From 58c4535b50eef592f5a30bb084cc2f20e21b20d1 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 24 Aug 2009 20:15:13 -0700 Subject: [PATCH] ADT: Skeleton for GLE2. This refactors the GLE base class into an interface, to make it possible to not depend on GEF at all. The GLE2 editor part displays and does nothing. It's just an empty shell. To enable, setenv USE_GLE2 to anything. Unset to remove it. Change-Id: I7a95b4a1a5a8ddf5a3f18acf7a04b1f9b3439655 --- .../eclipse/adt/internal/editors/layout/GLE2.java | 172 +++++++++++++++++++++ .../editors/layout/GraphicalLayoutEditor.java | 69 +++++---- ...youtEditor.java => IGraphicalLayoutEditor.java} | 34 +--- .../adt/internal/editors/layout/LayoutEditor.java | 88 ++++++----- .../editors/layout/UiContentOutlinePage.java | 95 ++++++------ 5 files changed, 317 insertions(+), 141 deletions(-) create mode 100755 eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GLE2.java rename eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/{AbstractGraphicalLayoutEditor.java => IGraphicalLayoutEditor.java} (75%) mode change 100644 => 100755 diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GLE2.java b/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/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/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java index 7d7ec5524..7cbd19c98 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java +++ b/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/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java b/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 eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java rename to eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/IGraphicalLayoutEditor.java index e8ccdab1b..8ed7b3d74 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/AbstractGraphicalLayoutEditor.java +++ b/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/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java index 6226b7bc7..117625390 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java +++ b/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/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java index 62abd5f68..775f23b06 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/UiContentOutlinePage.java +++ b/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. } - + } } -- 2.11.0