diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java index d585941bc9e2..676a3e3f970f 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java @@ -16,7 +16,6 @@ package com.intellij.android.designer.designSurface; import com.android.ide.common.rendering.api.RenderSession; -import com.android.ide.common.rendering.api.Result; import com.android.ide.common.resources.configuration.*; import com.android.sdklib.IAndroidTarget; import com.intellij.android.designer.actions.ProfileAction; @@ -24,11 +23,13 @@ import com.intellij.android.designer.componentTree.AndroidTreeDecorator; import com.intellij.android.designer.model.ModelParser; import com.intellij.android.designer.model.PropertyParser; import com.intellij.android.designer.model.RadViewComponent; -import com.intellij.android.designer.model.viewAnimator.RadViewAnimatorLayout; import com.intellij.android.designer.profile.ProfileManager; import com.intellij.designer.DesignerToolWindowManager; import com.intellij.designer.componentTree.TreeComponentDecorator; -import com.intellij.designer.designSurface.*; +import com.intellij.designer.designSurface.ComponentDecorator; +import com.intellij.designer.designSurface.DesignerEditorPanel; +import com.intellij.designer.designSurface.EditOperation; +import com.intellij.designer.designSurface.OperationContext; import com.intellij.designer.designSurface.selection.NonResizeSelectionDecorator; import com.intellij.designer.designSurface.tools.ComponentCreationFactory; import com.intellij.designer.designSurface.tools.ComponentPasteFactory; @@ -38,7 +39,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; @@ -57,7 +57,6 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -import java.lang.reflect.Method; import java.util.List; /** @@ -112,71 +111,6 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { }); } - @Override - public void updateTreeArea(EditableArea area) { - area.addSelectionListener(new ComponentSelectionListener() { - @Override - public void selectionChanged(EditableArea area) { - List selection = area.getSelection(); - if (selection.size() == 1) { - final RadComponent component = selection.get(0); - final RadComponent parent = component.getParent(); - if (parent instanceof RadViewComponent && parent.getLayout() instanceof RadViewAnimatorLayout) { - ApplicationManager.getApplication().invokeLater( - new Runnable() { - @Override - public void run() { - try { - int index = parent.getChildren().indexOf(component); - Object parentView = - ((RadViewComponent)parent).getViewInfo().getViewObject(); - Method method = - parentView.getClass().getMethod("setDisplayedChild", int.class); - method.invoke(parentView, index); - - Result result = mySession.render(); - - // XXX - - if (!result.isSuccess()) { - System.out.println( - "No re render session: " + - result.getErrorMessage() + - " : " + - result.getStatus() + - " : " + - result.getData() + - " : " + - result.getException()); - } - else { - RadViewComponent rootComponent = (RadViewComponent)myRootComponent; - RootView rootView = (RootView)rootComponent.getNativeComponent(); - rootView.setImage(mySession.getImage()); - ModelParser.updateRootComponent(rootComponent, mySession, rootView); - - myLayeredPane.revalidate(); - - DesignerToolWindowManager.getInstance(getProject()).refresh(true); - } - } - catch (Throwable e) { - showError("Render error", e); - } - } - }, new Condition() { - @Override - public boolean value(Object o) { - return mySession == null; - } - } - ); - } - } - } - }); - } - private void reparseFile() { try { storeState(); diff --git a/plugins/android-designer/src/com/intellij/android/designer/icons/TabHost.png b/plugins/android-designer/src/com/intellij/android/designer/icons/TabHost.png new file mode 100644 index 000000000000..9153a884797a Binary files /dev/null and b/plugins/android-designer/src/com/intellij/android/designer/icons/TabHost.png differ diff --git a/plugins/android-designer/src/com/intellij/android/designer/icons/TabWidget.png b/plugins/android-designer/src/com/intellij/android/designer/icons/TabWidget.png new file mode 100644 index 000000000000..7992fa2d3c12 Binary files /dev/null and b/plugins/android-designer/src/com/intellij/android/designer/icons/TabWidget.png differ diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/IdManager.java b/plugins/android-designer/src/com/intellij/android/designer/model/IdManager.java index 3571b818c880..92e1a745d47c 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/IdManager.java +++ b/plugins/android-designer/src/com/intellij/android/designer/model/IdManager.java @@ -37,7 +37,7 @@ public class IdManager { public void addComponent(RadViewComponent component) { String id = component.getId(); - if (id != null) { + if (id != null && !id.startsWith("@android:id/")) { myIdList.add(id); } } @@ -71,18 +71,18 @@ public class IdManager { return newId; } - public void ensurePasteIds(final RadViewComponent component) { + public void ensureIds(final RadViewComponent container) { // TODO: rename all references ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - component.accept(new RadComponentVisitor() { + container.accept(new RadComponentVisitor() { @Override public void endVisit(RadComponent component) { RadViewComponent viewComponent = (RadViewComponent)component; String idValue = viewComponent.getId(); - if (idValue != null && myIdList.contains(idValue)) { + if (component == container || (idValue != null && myIdList.contains(idValue))) { createId(viewComponent); } } diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java b/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java index 608e08bbd037..82b217020b22 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java +++ b/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java @@ -179,21 +179,20 @@ public class ModelParser extends XmlRecursiveElementVisitor { public String compute() { return newComponent.getMetaModel().getCreation(); } - }, true); + }); PropertyParser propertyParser = container.getRoot().getClientProperty(PropertyParser.KEY); propertyParser.load(newComponent); if (!newComponent.getTag().isEmpty()) { - MetaManager metaManager = ViewsMetaManager.getInstance(newComponent.getTag().getProject()); - IdManager idManager = container.getRoot().getClientProperty(IdManager.KEY); - addComponent(newComponent, metaManager, idManager, propertyParser); + addComponent(newComponent, ViewsMetaManager.getInstance(newComponent.getTag().getProject()), propertyParser); } + + IdManager.get(container).ensureIds(newComponent); } private static void addComponent(RadViewComponent parentComponent, MetaManager metaManager, - IdManager idManager, PropertyParser propertyParser) throws Exception { for (XmlTag tag : parentComponent.getTag().getSubTags()) { MetaModel metaModel = metaManager.getModelByTag(tag.getName()); @@ -203,11 +202,10 @@ public class ModelParser extends XmlRecursiveElementVisitor { RadViewComponent component = createComponent(tag, metaModel); - idManager.addComponent(component); parentComponent.add(component, null); propertyParser.load(component); - addComponent(component, metaManager, idManager, propertyParser); + addComponent(component, metaManager, propertyParser); } } @@ -218,7 +216,7 @@ public class ModelParser extends XmlRecursiveElementVisitor { PropertyParser propertyParser = container.getRoot().getClientProperty(PropertyParser.KEY); pasteComponent(newComponent, container.getTag(), insertBefore == null ? null : insertBefore.getTag(), propertyParser); - IdManager.get(container).ensurePasteIds(newComponent); + IdManager.get(container).ensureIds(newComponent); } private static void pasteComponent(final RadViewComponent component, @@ -262,7 +260,7 @@ public class ModelParser extends XmlRecursiveElementVisitor { return builder.append("/>").toString(); } - }, false); + }); XmlTag xmlTag = component.getTag(); List children = component.getChildren(); @@ -284,8 +282,7 @@ public class ModelParser extends XmlRecursiveElementVisitor { public static void addComponentTag(final XmlTag parentTag, final RadViewComponent component, final XmlTag nextTag, - final Computable tagBuilder, - final boolean createId) { + final Computable tagBuilder) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { @@ -323,10 +320,6 @@ public class ModelParser extends XmlRecursiveElementVisitor { } component.setTag(xmlTag); - - if (createId) { - component.ensureId(); - } } }); } diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/RadViewComponent.java b/plugins/android-designer/src/com/intellij/android/designer/model/RadViewComponent.java index b7dbce9d9545..022437d0035b 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/RadViewComponent.java +++ b/plugins/android-designer/src/com/intellij/android/designer/model/RadViewComponent.java @@ -92,6 +92,9 @@ public class RadViewComponent extends RadVisualComponent { if (StringUtil.isEmpty(idValue)) { return null; } + if (idValue.startsWith("@android:id/")) { + return idValue; + } return "@id/" + idValue.substring(idValue.indexOf('/') + 1); } diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/views-meta-model.xml b/plugins/android-designer/src/com/intellij/android/designer/model/views-meta-model.xml index 300c0ad11702..8705708dd998 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/views-meta-model.xml +++ b/plugins/android-designer/src/com/intellij/android/designer/model/views-meta-model.xml @@ -1230,6 +1230,64 @@ + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + @@ -1283,6 +1341,7 @@ + diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/componentTree/ComponentTreeBuilder.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/componentTree/ComponentTreeBuilder.java index 7e65f3946825..90ba8e957d45 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/componentTree/ComponentTreeBuilder.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/componentTree/ComponentTreeBuilder.java @@ -45,8 +45,6 @@ public final class ComponentTreeBuilder extends AbstractTreeBuilder implements C new TreeDropListener(tree, myTreeArea, designer.getToolProvider()); - designer.updateTreeArea(myTreeArea); - selectFromSurface(); expandFromState(); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java index df72fee777aa..123c06d9be67 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java @@ -637,9 +637,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider public abstract String getPlatformTarget(); - public void updateTreeArea(EditableArea area) { - } - protected abstract ComponentDecorator getRootSelectionDecorator(); @Nullable