com.nokia.sdt.symbian.ui.appeditor.S60ApplicationEditorExtender.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.sdt.symbian.ui.appeditor.S60ApplicationEditorExtender.java

Source

/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/

package com.nokia.sdt.symbian.ui.appeditor;

import com.nokia.sdt.datamodel.util.ModelUtils;
import com.nokia.sdt.editor.*;
import com.nokia.sdt.symbian.dm.S60ModelUtils;
import com.nokia.sdt.symbian.dm.SymbianModelUtils;
import com.nokia.sdt.symbian.dm.SymbianModelUtils.SDKType;
import com.nokia.sdt.symbian.ui.UIPlugin;
import com.nokia.sdt.symbian.ui.appeditor.context.EditingContextCommand;
import com.nokia.sdt.symbian.ui.noexport.Messages;
import com.nokia.sdt.uidesigner.ui.DesignerEditorPage;
import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.*;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.viewers.*;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

import java.util.*;

/**
 *
 */
public class S60ApplicationEditorExtender implements IDesignerDataModelEditorExtender, IPageChangedListener {

    private final static String APPUI_PAGE_HELP_CONTEXT_ID = UIPlugin.PLUGIN_ID + ".appEditorAppUiPageContext"; //$NON-NLS-1$

    private IDesignerDataModelEditor dmEditor;
    private FormEditor formEditor;

    private OverviewPage overviewPage;
    private ViewsFormPage viewsPage;
    private LanguagesPage languagesPage;
    private IDesignerEditor appUiPage;

    private AppEditorContext editorContext;
    private int appUiPageIndex = -1;
    private boolean appUiPageActivated;
    private ISelection lastAppUiPageSelection;
    private Object lastSelectedPage;
    private MultiPageContentOutlinePage contentOutlinePage;

    /* (non-Javadoc)
     * @see com.nokia.sdt.editor.IDesignerDataModelEditorExtender#editorInitialized(com.nokia.sdt.editor.IDesignerDataModelEditor)
     */
    public void editorInitialized(IDesignerDataModelEditor editor) throws CoreException {
        if (!SymbianModelUtils.getModelSDK(editor.getDataModel()).equals(SDKType.S60))
            return;

        dmEditor = editor;
        formEditor = editor.getFormEditor();
        editorContext = (AppEditorContext) editor.getAdapter(AppEditorContext.class);

        createOverviewPage();
        createViewsPage();
        createLanguagesPage();
        createAppUiPage();

        formEditor.addPageChangedListener(this);
        dmEditor.getCommandStack().addCommandStackEventListener(new CommandStackEventListener() {
            public void stackChanged(CommandStackEvent event) {
                switch (event.getDetail()) {
                case CommandStack.PRE_EXECUTE:
                case CommandStack.PRE_UNDO:
                case CommandStack.PRE_REDO:
                    if (appUiPageIndex >= 0 && !(event.getCommand() instanceof EditingContextCommand)) {
                        dmEditor.activatePage(appUiPageIndex);
                    }
                    break;
                default:
                    break;
                }

            }
        });
    }

    private void createOverviewPage() throws PartInitException {
        overviewPage = new OverviewPage(editorContext);
        formEditor.addPage(overviewPage);
    }

    private void createViewsPage() throws PartInitException {
        viewsPage = new ViewsFormPage(editorContext);
        formEditor.addPage(viewsPage);
    }

    private void createLanguagesPage() throws PartInitException {
        languagesPage = new LanguagesPage(editorContext);
        formEditor.addPage(languagesPage);
    }

    private void createAppUiPage() throws PartInitException {
        if (editorContext.getS60RootModelType() != S60ModelUtils.S60RootModelType.LEGACY) {
            lastAppUiPageSelection = StructuredSelection.EMPTY;
            DesignerEditorPage designerEditorPage = new DesignerEditorPage(editorContext.getFormEditor());
            appUiPageIndex = formEditor.addPage(designerEditorPage, dmEditor.getEditorInput());
            editorContext.setAppUiPageIndex(appUiPageIndex);
            dmEditor.setTabTitle(appUiPageIndex, Messages.getString("ApplicationEditor.appUiPageLabel")); //$NON-NLS-1$
            appUiPage = designerEditorPage;

            IContentOutlinePage outlinePage = (IContentOutlinePage) dmEditor.getAdapter(IContentOutlinePage.class);
            if (outlinePage instanceof MultiPageContentOutlinePage)
                contentOutlinePage = (MultiPageContentOutlinePage) outlinePage;
        }
    }

    public void pageChanged(PageChangedEvent event) {
        Object selectedPage = event.getSelectedPage();
        if ((selectedPage == null) || (selectedPage == lastSelectedPage))
            return;

        lastSelectedPage = selectedPage;
        if (contentOutlinePage != null) {
            contentOutlinePage.activatePage(selectedPage);
        }

        if (appUiPage == null)
            return;
        ISelectionManager selectionManager = appUiPage.getSelectionManager();
        if (selectionManager == null)
            return;

        if (!selectedPage.equals(appUiPage)) {
            lastAppUiPageSelection = selectionManager.getSelection();
            selectionManager.setSelection(StructuredSelection.EMPTY);
        } else {
            if (!appUiPageActivated) {
                appUiPageActivated = true;
                WorkbenchUtils.setHelpContextId(appUiPage.getControl(), APPUI_PAGE_HELP_CONTEXT_ID);
            }
            pruneAppUiSelection();
            selectionManager.setSelection(lastAppUiPageSelection);
        }
    }

    @SuppressWarnings("unchecked")
    private void pruneAppUiSelection() {
        // remove any items no longer in the model from the last appUi page selection
        List selItems = new ArrayList();
        IStructuredSelection sel = (IStructuredSelection) lastAppUiPageSelection;
        for (Iterator iter = sel.iterator(); iter.hasNext();) {
            EditPart part = (EditPart) iter.next();
            if (ModelUtils.getModel((EObject) part.getModel()) != null)
                selItems.add(part);
        }
        lastAppUiPageSelection = new StructuredSelection(selItems);
    }

}