protected void xmlModelChanged(Document xml_doc) {
// create the ui root node on demand.
initUiRootNode(false /*force*/);
-
+
loadFromXml(xml_doc);
-
+
super.xmlModelChanged(xml_doc);
}
}
}
}
-
+
private void onDescriptorsChanged(UiElementNode oldManifestNode) {
mUiManifestNode.reloadFromXmlNode(oldManifestNode.getXmlNode());
if (mUiManifestNode != null && force == false) {
return;
}
-
AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors();
/**
* 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 {
*/
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;
}
*/
public Object[] getElements(Object inputElement) {
ArrayList<UiElementNode> roots = new ArrayList<UiElementNode>();
- 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 {
--- /dev/null
+/*
+ * 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();
+}
* 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;
return mMasterPart;
}
+ /**
+ * Returns the {@link UiElementNode} for the current model.
+ * <p/>
+ * 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();
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$