diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GLE2.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GLE2.java new file mode 100755 index 000000000..8b868e33a --- /dev/null +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GLE2.java @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.editors.layout; + +import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode; +import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; +import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.gef.ui.parts.SelectionSynchronizer; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.part.EditorPart; + +/** + * Graphical layout editor, version 2. + */ +public class GLE2 extends EditorPart implements IGraphicalLayoutEditor { + + /* + * Useful notes: + * To understand Drag'n'drop: + * http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html + */ + + /** Reference to the layout editor */ + private final LayoutEditor mLayoutEditor; + + public GLE2(LayoutEditor layoutEditor) { + mLayoutEditor = layoutEditor; + setPartName("Graphical Layout"); + } + + // ------------------------------------ + // Methods overridden from base classes + //------------------------------------ + + /** + * Initializes the editor part with a site and input. + * {@inheritDoc} + */ + @Override + public void init(IEditorSite site, IEditorInput input) throws PartInitException { + setSite(site); + setInput(input); + } + + @Override + public void dispose() { + super.dispose(); + } + + @Override + public void doSave(IProgressMonitor monitor) { + // TODO Auto-generated method stub + + } + + @Override + public void doSaveAs() { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDirty() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isSaveAsAllowed() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + + } + + public void activated() { + // TODO Auto-generated method stub + + } + + public void deactivated() { + // TODO Auto-generated method stub + + } + + public void editNewFile(FolderConfiguration configuration) { + // TODO Auto-generated method stub + + } + + public Clipboard getClipboard() { + // TODO Auto-generated method stub + return null; + } + + public LayoutEditor getLayoutEditor() { + // TODO Auto-generated method stub + return null; + } + + public UiDocumentNode getModel() { + // TODO Auto-generated method stub + return null; + } + + public SelectionSynchronizer getSelectionSynchronizer() { + // TODO Auto-generated method stub + return null; + } + + public void onXmlModelChanged() { + // TODO Auto-generated method stub + + } + + public void recomputeLayout() { + // TODO Auto-generated method stub + + } + + public void reloadEditor() { + // TODO Auto-generated method stub + + } + + public void reloadPalette() { + // TODO Auto-generated method stub + + } + + public void selectModel(UiElementNode uiNodeModel) { + // TODO Auto-generated method stub + + } + + public void reloadLayout(boolean codeChange, boolean rChange, + boolean resChange) { + // TODO Auto-generated method stub + + } + +} diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java index 7d7ec5524..7cbd19c98 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java @@ -19,7 +19,6 @@ package com.android.ide.eclipse.adt.internal.editors.layout; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.IconFactory; import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.UiEditorActions; -import com.android.ide.eclipse.adt.internal.editors.layout.LayoutReloadMonitor.ILayoutReloadListener; import com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite; import com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.IConfigListener; import com.android.ide.eclipse.adt.internal.editors.layout.descriptors.ViewElementDescriptor; @@ -71,6 +70,8 @@ import org.eclipse.gef.dnd.TemplateTransferDropTargetListener; import org.eclipse.gef.editparts.ScalableFreeformRootEditPart; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.requests.CreationFactory; +import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; +import org.eclipse.gef.ui.parts.SelectionSynchronizer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; @@ -111,8 +112,8 @@ import java.util.Map; *

* To understand Drag'n'drop: http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html */ -public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor - implements ILayoutReloadListener, IConfigListener { +public class GraphicalLayoutEditor extends GraphicalEditorWithPalette + implements IGraphicalLayoutEditor, IConfigListener { /** Reference to the layout editor */ @@ -233,6 +234,31 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor super.dispose(); } + /** + * Returns the selection synchronizer object. + * The synchronizer can be used to sync the selection of 2 or more EditPartViewers. + *

+ * This is changed from protected to public so that the outline can use it. + * + * @return the synchronizer + */ + @Override + public SelectionSynchronizer getSelectionSynchronizer() { + return super.getSelectionSynchronizer(); + } + + /** + * Returns the edit domain. + *

+ * This is changed from protected to public so that the outline can use it. + * + * @return the edit domain + */ + @Override + public DefaultEditDomain getEditDomain() { + return super.getEditDomain(); + } + /* (non-Javadoc) * Creates the palette root. */ @@ -243,7 +269,6 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor return mPaletteRoot; } - @Override public Clipboard getClipboard() { return mClipboard; } @@ -365,8 +390,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor * * @param uiNodeModel The {@link UiElementNode} to select. */ - @Override - void selectModel(UiElementNode uiNodeModel) { + public void selectModel(UiElementNode uiNodeModel) { GraphicalViewer viewer = getGraphicalViewer(); // Give focus to the graphical viewer (in case the outline has it) @@ -384,7 +408,6 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor // Local methods //-------------- - @Override public LayoutEditor getLayoutEditor() { return mLayoutEditor; } @@ -514,8 +537,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor * Sets the UI for the edition of a new file. * @param configuration the configuration of the new file. */ - @Override - void editNewFile(FolderConfiguration configuration) { + public void editNewFile(FolderConfiguration configuration) { // update the configuration UI setConfiguration(configuration, true /*force*/); @@ -625,8 +647,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor /** * Reloads this editor, by getting the new model from the {@link LayoutEditor}. */ - @Override - void reloadEditor() { + public void reloadEditor() { GraphicalViewer viewer = getGraphicalViewer(); viewer.setContents(getModel()); @@ -647,8 +668,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor /** * Callback for XML model changed. Only update/recompute the layout if the editor is visible */ - @Override - void onXmlModelChanged() { + public void onXmlModelChanged() { if (mLayoutEditor.isGraphicalEditorActive()) { doXmlReload(true /* force */); recomputeLayout(); @@ -697,13 +717,11 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor } - @Override - UiDocumentNode getModel() { + public UiDocumentNode getModel() { return mLayoutEditor.getUiRootNode(); } - @Override - void reloadPalette() { + public void reloadPalette() { PaletteFactory.createPaletteRoot(mPaletteRoot, mLayoutEditor.getTargetData()); } @@ -794,9 +812,8 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor /** * Recomputes the layout with the help of layoutlib. */ - @Override @SuppressWarnings("deprecation") - void recomputeLayout() { + public void recomputeLayout() { doXmlReload(false /* force */); try { // check that the resource exists. If the file is opened but the project is closed @@ -1072,8 +1089,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor /** * Responds to a page change that made the Graphical editor page the activated page. */ - @Override - void activated() { + public void activated() { if (mNeedsRecompute || mNeedsXmlReload) { recomputeLayout(); } @@ -1082,8 +1098,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor /** * Responds to a page change that made the Graphical editor page the deactivated page */ - @Override - void deactivated() { + public void deactivated() { // nothing to be done here for now. } @@ -1093,11 +1108,11 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor if (frameworkRes == null) { AdtPlugin.log(IStatus.ERROR, "Failed to get ProjectResource for the framework"); + } else { + // get the framework resource values based on the current config + mConfiguredFrameworkRes = frameworkRes.getConfiguredResources( + mConfigComposite.getCurrentConfig()); } - - // get the framework resource values based on the current config - mConfiguredFrameworkRes = frameworkRes.getConfiguredResources( - mConfigComposite.getCurrentConfig()); } return mConfiguredFrameworkRes; diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/IGraphicalLayoutEditor.java old mode 100644 new mode 100755 similarity index 75% rename from tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java rename to tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/IGraphicalLayoutEditor.java index e8ccdab1b..8ed7b3d74 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/IGraphicalLayoutEditor.java @@ -4,7 +4,7 @@ * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.eclipse.org/org/documents/epl-v10.php * * Unless required by applicable law or agreed to in writing, software @@ -22,17 +22,14 @@ import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; -import org.eclipse.gef.DefaultEditDomain; -import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; import org.eclipse.gef.ui.parts.SelectionSynchronizer; import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IEditorPart; /** - * Abstract GraphicalLayoutEditor. + * Interface defining what {@link LayoutEditor} expects from a GraphicalLayoutEditor part. */ -/*package*/ abstract class AbstractGraphicalLayoutEditor extends GraphicalEditorWithPalette - implements IWorkbenchPart, ILayoutReloadListener { +/*package*/ interface IGraphicalLayoutEditor extends IEditorPart, ILayoutReloadListener { /** * Sets the UI for the edition of a new file. @@ -63,7 +60,7 @@ import org.eclipse.ui.IWorkbenchPart; /** * Used by LayoutEditor.UiEditorActions.selectUiNode to select a new UI Node * created by {@link ElementCreateCommand#execute()}. - * + * * @param uiNodeModel The {@link UiElementNode} to select. */ abstract void selectModel(UiElementNode uiNodeModel); @@ -71,27 +68,8 @@ import org.eclipse.ui.IWorkbenchPart; /** * Returns the selection synchronizer object. * The synchronizer can be used to sync the selection of 2 or more EditPartViewers. - *

- * This is changed from protected to public so that the outline can use it. - * - * @return the synchronizer */ - @Override - public SelectionSynchronizer getSelectionSynchronizer() { - return super.getSelectionSynchronizer(); - } - - /** - * Returns the edit domain. - *

- * This is changed from protected to public so that the outline can use it. - * - * @return the edit domain - */ - @Override - public DefaultEditDomain getEditDomain() { - return super.getEditDomain(); - } + abstract public SelectionSynchronizer getSelectionSynchronizer(); abstract void reloadPalette(); diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java index 6226b7bc7..117625390 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java @@ -46,7 +46,7 @@ import org.eclipse.ui.views.properties.IPropertySheetPage; import org.w3c.dom.Document; /** - * Multi-page form editor for /res/layout XML files. + * Multi-page form editor for /res/layout XML files. */ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPartListener { @@ -54,8 +54,8 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa /** Root node of the UI element hierarchy */ private UiDocumentNode mUiRootNode; - - private AbstractGraphicalLayoutEditor mGraphicalEditor; + + private IGraphicalLayoutEditor mGraphicalEditor; private int mGraphicalEditorIndex; /** Implementation of the {@link IContentOutlinePage} for this editor */ private UiContentOutlinePage mOutline; @@ -63,7 +63,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa private UiPropertySheetPage mPropertyPage; private UiEditorActions mUiEditorActions; - + /** * Creates the form editor for resources XML files. */ @@ -87,7 +87,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa super.dispose(); } - + /** * Save the XML. *

@@ -105,12 +105,12 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa mGraphicalEditor.doSave(monitor); } } - + /** * Returns whether the "save as" operation is supported by this editor. *

* Save-As is a valid operation for the ManifestEditor since it acts on a - * single source file. + * single source file. * * @see IEditorPart */ @@ -128,9 +128,15 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa // The graphical layout editor is now enabled by default. // In case there's an issue we provide a way to disable it using an // env variable. - if (System.getenv("ANDROID_DISABLE_LAYOUT") == null) { + if (System.getenv("ANDROID_DISABLE_LAYOUT") == null) { //$NON-NLS-1$ if (mGraphicalEditor == null) { - mGraphicalEditor = new GraphicalLayoutEditor(this); + + if (System.getenv("USE_GLE2") != null) { //$NON-NLS-1$ //$NON-NLS-2$ + mGraphicalEditor = new GLE2(this); + } else { + mGraphicalEditor = new GraphicalLayoutEditor(this); + } + mGraphicalEditorIndex = addPage(mGraphicalEditor, getEditorInput()); setPageText(mGraphicalEditorIndex, mGraphicalEditor.getTitle()); } else { @@ -174,7 +180,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa super.setInputWithNotify(input); handleNewInput(input); } - + /** * Called to replace the current {@link IEditorInput} with another one. *

This is used when {@link MatchingStrategy} returned true which means we're @@ -183,10 +189,10 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa public void showEditorInput(IEditorInput editorInput) { // save the current editor input. doSave(new NullProgressMonitor()); - + // get the current page int currentPage = getActivePage(); - + // remove the pages, except for the graphical editor, which will be dynamically adapted // to the new model. // page after the graphical editor: @@ -198,10 +204,10 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa for (int i = mGraphicalEditorIndex - 1 ; i >= 0 ; i--) { removePage(i); } - + // set the current input. setInputWithNotify(editorInput); - + // re-create or reload the pages with the default page shown as the previous active page. createAndroidPages(); selectDefaultPage(Integer.toString(currentPage)); @@ -211,10 +217,10 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa mOutline.reloadModel(); } } - + /** * Processes the new XML Model, which XML root node is given. - * + * * @param xml_doc The XML document, if available, or null if none exists. */ @Override @@ -226,16 +232,16 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa // update the model first, since it is used by the viewers. super.xmlModelChanged(xml_doc); - + if (mGraphicalEditor != null) { mGraphicalEditor.onXmlModelChanged(); } - + if (mOutline != null) { mOutline.reloadModel(); } } - + /* (non-java doc) * Returns the IContentOutlinePage when asked for it. */ @@ -246,29 +252,33 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa // This fixes the case where a layout file is opened in XML view first and the outline // gets stuck in the XML outline. if (IContentOutlinePage.class == adapter && mGraphicalEditor != null) { - if (mOutline == null) { - mOutline = new UiContentOutlinePage(mGraphicalEditor, new TreeViewer()); + + if (mOutline == null && mGraphicalEditor instanceof GraphicalLayoutEditor) { + // TODO add support for GLE2 + mOutline = new UiContentOutlinePage( + (GraphicalLayoutEditor) mGraphicalEditor, + new TreeViewer()); } - + return mOutline; } - + if (IPropertySheetPage.class == adapter && mGraphicalEditor != null) { if (mPropertyPage == null) { mPropertyPage = new UiPropertySheetPage(); } - + return mPropertyPage; } // return default return super.getAdapter(adapter); } - + @Override protected void pageChange(int newPageIndex) { super.pageChange(newPageIndex); - + if (mGraphicalEditor != null) { if (newPageIndex == mGraphicalEditorIndex) { mGraphicalEditor.activated(); @@ -277,9 +287,9 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa } } } - + // ----- IPartListener Methods ---- - + public void partActivated(IWorkbenchPart part) { if (part == this) { if (mGraphicalEditor != null) { @@ -312,7 +322,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa EclipseUiHelper.showView(EclipseUiHelper.CONTENT_OUTLINE_VIEW_ID, false /* activate */); EclipseUiHelper.showView(EclipseUiHelper.PROPERTY_SHEET_VIEW_ID, false /* activate */); } - + public class UiEditorActions extends UiActions { @Override @@ -331,16 +341,16 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa // Pass. There is nothing to commit before the XML is changed here. } } - + public UiEditorActions getUiEditorActions() { if (mUiEditorActions == null) { mUiEditorActions = new UiEditorActions(); } return mUiEditorActions; } - + // ---- Local Methods ---- - + /** * Returns true if the Graphics editor page is visible. This must be * called from the UI thread. @@ -357,20 +367,20 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa } return false; - } - + } + @Override protected void initUiRootNode(boolean force) { // The root UI node is always created, even if there's no corresponding XML node. if (mUiRootNode == null || force) { // get the target data from the opened file (and its project) AndroidTargetData data = getTargetData(); - + Document doc = null; if (mUiRootNode != null) { doc = mUiRootNode.getXmlDocument(); } - + DocumentDescriptor desc; if (data == null) { desc = new DocumentDescriptor("temp", null /*children*/); @@ -385,18 +395,18 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa onDescriptorsChanged(doc); } } - + private void onDescriptorsChanged(Document document) { if (document != null) { mUiRootNode.loadFromXmlNode(document); } else { mUiRootNode.reloadFromXmlNode(mUiRootNode.getXmlDocument()); } - + if (mOutline != null) { mOutline.reloadModel(); } - + if (mGraphicalEditor != null) { mGraphicalEditor.reloadEditor(); mGraphicalEditor.reloadPalette(); diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java index 62abd5f68..775f23b06 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java @@ -70,26 +70,26 @@ import java.util.List; */ class UiContentOutlinePage extends ContentOutlinePage { - private AbstractGraphicalLayoutEditor mEditor; - + private GraphicalLayoutEditor mEditor; + private Action mAddAction; private Action mDeleteAction; private Action mUpAction; private Action mDownAction; - + private UiOutlineActions mUiActions = new UiOutlineActions(); - public UiContentOutlinePage(AbstractGraphicalLayoutEditor editor, final EditPartViewer viewer) { + public UiContentOutlinePage(GraphicalLayoutEditor editor, final EditPartViewer viewer) { super(viewer); mEditor = editor; IconFactory factory = IconFactory.getInstance(); - + mAddAction = new Action("Add...") { @Override public void run() { List nodes = getModelSelections(); UiElementNode node = nodes != null && nodes.size() > 0 ? nodes.get(0) : null; - + mUiActions.doAdd(node, viewer.getControl().getShell()); } }; @@ -100,7 +100,7 @@ class UiContentOutlinePage extends ContentOutlinePage { @Override public void run() { List nodes = getModelSelections(); - + mUiActions.doRemove(nodes, viewer.getControl().getShell()); } }; @@ -111,7 +111,7 @@ class UiContentOutlinePage extends ContentOutlinePage { @Override public void run() { List nodes = getModelSelections(); - + mUiActions.doUp(nodes); } }; @@ -122,7 +122,7 @@ class UiContentOutlinePage extends ContentOutlinePage { @Override public void run() { List nodes = getModelSelections(); - + mUiActions.doDown(nodes); } }; @@ -138,7 +138,7 @@ class UiContentOutlinePage extends ContentOutlinePage { addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); - + // the selection is never empty. The least it'll contain is the // UiDocumentTreeEditPart object. if (selection instanceof StructuredSelection) { @@ -162,7 +162,7 @@ class UiContentOutlinePage extends ContentOutlinePage { } }); } - + /* (non-Javadoc) * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite) @@ -184,7 +184,7 @@ class UiContentOutlinePage extends ContentOutlinePage { /* * (non-Javadoc) * @see org.eclipse.ui.part.Page#setActionBars(org.eclipse.ui.IActionBars) - * + * * Called automatically after createControl */ @Override @@ -195,7 +195,7 @@ class UiContentOutlinePage extends ContentOutlinePage { toolBarManager.add(new Separator()); toolBarManager.add(mUpAction); toolBarManager.add(mDownAction); - + IMenuManager menuManager = actionBars.getMenuManager(); menuManager.add(mAddAction); menuManager.add(mDeleteAction); @@ -222,18 +222,19 @@ class UiContentOutlinePage extends ContentOutlinePage { public Control getControl() { return getViewer().getControl(); } - + void setNewEditor(GraphicalLayoutEditor editor) { mEditor = editor; setupOutline(); } - + void breakConnectionWithEditor() { // unhook outline viewer mEditor.getSelectionSynchronizer().removeViewer(getViewer()); } - + private void setupOutline() { + getViewer().setEditDomain(mEditor.getEditDomain()); // hook outline viewer @@ -255,13 +256,13 @@ class UiContentOutlinePage extends ContentOutlinePage { */ public void menuAboutToShow(IMenuManager manager) { List selected = getModelSelections(); - + if (selected != null) { doCreateMenuAction(manager, selected); return; } doCreateMenuAction(manager, null /* ui_node */); - } + } }); Control control = getControl(); Menu contextMenu = menuManager.createContextMenu(control); @@ -271,13 +272,13 @@ class UiContentOutlinePage extends ContentOutlinePage { /** * Adds the menu actions to the context menu when the given UI node is selected in * the tree view. - * + * * @param manager The context menu manager * @param selected The UI node selected in the tree. Can be null, in which case the root * is to be modified. */ private void doCreateMenuAction(IMenuManager manager, List selected) { - + if (selected != null) { boolean hasXml = false; for (UiElementNode uiNode : selected) { @@ -323,14 +324,14 @@ class UiContentOutlinePage extends ContentOutlinePage { if (selected != null) { manager.add(mDeleteAction); manager.add(new Separator()); - + manager.add(mUpAction); manager.add(mDownAction); } if (selected != null && selected.size() == 1) { manager.add(new Separator()); - + Action propertiesAction = new Action("Properties") { @Override public void run() { @@ -344,7 +345,7 @@ class UiContentOutlinePage extends ContentOutlinePage { } /** - * Updates the outline view with the model of the {@link GraphicalLayoutEditor}. + * Updates the outline view with the model of the {@link IGraphicalLayoutEditor}. *

* This attemps to preserve the selection, if any. */ @@ -380,22 +381,22 @@ class UiContentOutlinePage extends ContentOutlinePage { ISelection selection = getSelection(); if (selection instanceof StructuredSelection) { StructuredSelection structuredSelection = (StructuredSelection)selection; - + if (structuredSelection.size() > 0) { ArrayList selected = new ArrayList(); - + for (Iterator it = structuredSelection.iterator(); it.hasNext(); ) { Object selectedObj = it.next(); - + if (selectedObj instanceof UiElementTreeEditPart) { selected.add((UiElementTreeEditPart) selectedObj); } } - + return selected.size() > 0 ? selected : null; } } - + return null; } @@ -412,16 +413,16 @@ class UiContentOutlinePage extends ContentOutlinePage { if (parts != null) { ArrayList selected = new ArrayList(); - + for (UiElementTreeEditPart part : parts) { if (part instanceof UiViewTreeEditPart || part instanceof UiLayoutTreeEditPart) { selected.add((UiElementNode) part.getModel()); } } - + return selected.size() > 0 ? selected : null; } - + return null; } @@ -440,17 +441,17 @@ class UiContentOutlinePage extends ContentOutlinePage { } } - /** + /** * Selects the corresponding model element in the tree viewer. */ private void setModelSelection(UiElementNode uiNodeToSelect) { if (uiNodeToSelect != null) { - + // find an edit part that has the requested model element UiElementTreeEditPart part = findPartForModel( (UiElementTreeEditPart) getViewer().getContents(), uiNodeToSelect); - + // if we found a part, select it and reveal it if (part != null) { setViewerSelection(part); @@ -461,7 +462,7 @@ class UiContentOutlinePage extends ContentOutlinePage { /** * Utility method that tries to find an edit part that matches a given model UI node. - * + * * @param rootPart The root of the viewer edit parts * @param uiNode The UI node model to find * @return The part that matches the model or null if it's not in the sub tree. @@ -471,7 +472,7 @@ class UiContentOutlinePage extends ContentOutlinePage { if (rootPart.getModel() == uiNode) { return rootPart; } - + for (Object part : rootPart.getChildren()) { if (part instanceof UiElementTreeEditPart) { UiElementTreeEditPart found = findPartForModel( @@ -492,16 +493,16 @@ class UiContentOutlinePage extends ContentOutlinePage { */ private void setupTooltip() { final Tree tree = (Tree) getControl(); - + /* - * Reference: + * Reference: * http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java?view=markup */ - + final Listener listener = new Listener() { Shell tip = null; Label label = null; - + public void handleEvent(Event event) { switch(event.type) { case SWT.Dispose: @@ -523,7 +524,7 @@ class UiContentOutlinePage extends ContentOutlinePage { } String tooltip = null; - + TreeItem item = tree.getItem(new Point(event.x, event.y)); if (item != null) { Object data = item.getData(); @@ -540,12 +541,12 @@ class UiContentOutlinePage extends ContentOutlinePage { tooltip = item.getText() + ":\r" + tooltip; } } - - + + if (tooltip != null) { Shell shell = tree.getShell(); Display display = tree.getDisplay(); - + tip = new Shell(shell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL); tip.setBackground(display .getSystemColor(SWT.COLOR_INFO_BACKGROUND)); FillLayout layout = new FillLayout(); @@ -567,7 +568,7 @@ class UiContentOutlinePage extends ContentOutlinePage { } } }; - + tree.addListener(SWT.Dispose, listener); tree.addListener(SWT.KeyDown, listener); tree.addListener(SWT.MouseMove, listener); @@ -592,7 +593,7 @@ class UiContentOutlinePage extends ContentOutlinePage { } // --------------- - + private class UiOutlineActions extends UiActions { @Override @@ -610,6 +611,6 @@ class UiContentOutlinePage extends ContentOutlinePage { public void commitPendingXmlChanges() { // Pass. There is nothing to commit before the XML is changed here. } - + } }