diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/manifest/ManifestEditor.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/manifest/ManifestEditor.java index d0f8d7b85..dc32383d9 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/manifest/ManifestEditor.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/manifest/ManifestEditor.java @@ -159,9 +159,9 @@ public final class ManifestEditor extends AndroidEditor { protected void xmlModelChanged(Document xml_doc) { // create the ui root node on demand. initUiRootNode(false /*force*/); - + loadFromXml(xml_doc); - + super.xmlModelChanged(xml_doc); } @@ -184,7 +184,7 @@ public final class ManifestEditor extends AndroidEditor { } } } - + private void onDescriptorsChanged(UiElementNode oldManifestNode) { mUiManifestNode.reloadFromXmlNode(oldManifestNode.getXmlNode()); @@ -321,7 +321,6 @@ public final class ManifestEditor extends AndroidEditor { if (mUiManifestNode != null && force == false) { return; } - AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors(); diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/NewItemSelectionDialog.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/NewItemSelectionDialog.java index 07298810f..72fe06034 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/NewItemSelectionDialog.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/NewItemSelectionDialog.java @@ -38,7 +38,7 @@ import java.util.Arrays; /** * A selection dialog to select the type of the new element node to - * created, either in the application node or the selected sub node. + * create, either in the application node or the selected sub node. */ public class NewItemSelectionDialog extends AbstractElementListSelectionDialog { diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java index 9f34d9e72..30919926b 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java @@ -30,16 +30,15 @@ import java.util.ArrayList; */ class UiModelTreeContentProvider implements ITreeContentProvider { - /** The root {@link UiElementNode} which contains all the elements that are to be - * manipulated by this tree view. In general this is the manifest UI node. */ - private UiElementNode mUiRootNode; /** The descriptor of the elements to be displayed as root in this tree view. All elements * of the same type in the root will be displayed. */ private ElementDescriptor[] mDescriptorFilters; + /** Object which provides the uiRootNode */ + private final UiRootNodeProvider mUiRootNodeProvider; - public UiModelTreeContentProvider(UiElementNode uiRootNode, + public UiModelTreeContentProvider(UiRootNodeProvider rootNodeProvider, ElementDescriptor[] descriptorFilters) { - mUiRootNode = uiRootNode; + mUiRootNodeProvider = rootNodeProvider; mDescriptorFilters = descriptorFilters; } @@ -87,8 +86,9 @@ class UiModelTreeContentProvider implements ITreeContentProvider { */ public Object[] getElements(Object inputElement) { ArrayList roots = new ArrayList(); - if (mUiRootNode != null) { - for (UiElementNode ui_node : mUiRootNode.getUiChildren()) { + UiElementNode uiRootNode = mUiRootNodeProvider.getRootNode(); + if (uiRootNode != null) { + for (UiElementNode ui_node : uiRootNode.getUiChildren()) { if (mDescriptorFilters == null || mDescriptorFilters.length == 0) { roots.add(ui_node); } else { diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java new file mode 100644 index 000000000..5121e3546 --- /dev/null +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java @@ -0,0 +1,27 @@ +/* + * 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.editors.ui.tree; + +import com.android.ide.eclipse.editors.uimodel.UiElementNode; + +/** + * An object that can provide a uiRootNode. + */ +public interface UiRootNodeProvider { + /** Returns the UiDocumentNode for the current model. */ + public abstract UiElementNode getRootNode(); +} diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java index fc384e8c0..8038a47de 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java @@ -83,7 +83,8 @@ import java.util.LinkedList; * On the left is a details part that displays all the visible UI attributes for a given * selected UI element node. */ -public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml { +public final class UiTreeBlock extends MasterDetailsBlock + implements ICommitXml, UiRootNodeProvider { /** Height hint for the tree view. Helps the grid layout resize properly on smaller screens. */ private static final int TREE_HEIGHT_HINT = 50; @@ -181,6 +182,17 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml return mMasterPart; } + /** + * Returns the {@link UiElementNode} for the current model. + *

+ * This is used by the content provider attached to {@link #mTreeViewer} since + * the uiRootNode changes after each call to + * {@link #changeRootAndDescriptors(UiElementNode, ElementDescriptor[], boolean)}. + */ + public UiElementNode getRootNode() { + return mUiRootNode; + } + @Override protected void createMasterPart(final IManagedForm managedForm, Composite parent) { FormToolkit toolkit = managedForm.getToolkit(); @@ -239,8 +251,7 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml tree.setLayoutData(gd); mTreeViewer = new TreeViewer(tree); - mTreeViewer.setContentProvider(new UiModelTreeContentProvider( - mUiRootNode, mDescriptorFilters)); + mTreeViewer.setContentProvider(new UiModelTreeContentProvider(this, mDescriptorFilters)); mTreeViewer.setLabelProvider(new UiModelTreeLabelProvider()); mTreeViewer.setInput("unused"); //$NON-NLS-1$