From 0426162e2a17eae90f235193adf389ba0d23dd72 Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Sun, 1 Apr 2012 20:34:13 +0400 Subject: [PATCH] Copy & Paste --- .../designSurface/AbstractEditOperation.java | 4 + .../AndroidDesignerEditorPanel.java | 2 +- .../designSurface/AndroidPasteFactory.java | 159 ++++++++++++++++++ .../android/designer/model/ModelParser.java | 2 +- .../designer/model/RadViewComponent.java | 48 ++++++ .../model/scroll/RadScrollViewComponent.java | 2 +- .../actions/CommonEditActionsProvider.java | 41 ++--- .../designSurface/DesignerEditorPanel.java | 19 ++- .../designSurface/OperationContext.java | 10 ++ .../tools/ComponentPasteFactory.java | 2 + .../designSurface/tools/PasteTool.java | 3 +- .../designSurface/tools/ResizeTracker.java | 3 +- .../designSurface/tools/TargetingTool.java | 4 +- .../designSurface/tools/ToolProvider.java | 4 +- .../intellij/designer/model/MetaManager.java | 1 - .../designer/propertyTable/PropertyTable.java | 52 ++---- .../src/messages/DesignerBundle.properties | 1 + 17 files changed, 286 insertions(+), 71 deletions(-) create mode 100644 plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidPasteFactory.java diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AbstractEditOperation.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AbstractEditOperation.java index 9de7390bb88a..c2aeec06f494 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AbstractEditOperation.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AbstractEditOperation.java @@ -42,6 +42,10 @@ public abstract class AbstractEditOperation extends com.intellij.designer.design for (RadComponent component : myComponents) { ModelParser.addComponent(myContainer, (RadViewComponent)component, null); } + + if (myContext.isPaste()) { + myContext.getPasteFactory().finish(); + } } } } \ No newline at end of file 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 d192cdae870d..b9ea3469de69 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 @@ -426,7 +426,7 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { @Override public ComponentPasteFactory createPasteFactory(String xmlComponents) { - return null; // TODO: Auto-generated method stub + return new AndroidPasteFactory(getProject(), xmlComponents); } @Override diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidPasteFactory.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidPasteFactory.java new file mode 100644 index 000000000000..dd576eba8955 --- /dev/null +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidPasteFactory.java @@ -0,0 +1,159 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 + * + * 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.intellij.android.designer.designSurface; + +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.ViewsMetaManager; +import com.intellij.designer.designSurface.tools.ComponentPasteFactory; +import com.intellij.designer.model.MetaManager; +import com.intellij.designer.model.MetaModel; +import com.intellij.designer.model.RadComponent; +import com.intellij.lang.Language; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.project.Project; +import com.intellij.psi.XmlElementFactory; +import com.intellij.psi.xml.XmlAttribute; +import com.intellij.psi.xml.XmlTag; +import com.intellij.util.containers.hash.HashMap; +import org.jdom.Attribute; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.input.SAXBuilder; +import org.jetbrains.annotations.NotNull; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author Alexander Lobas + */ +public class AndroidPasteFactory implements ComponentPasteFactory { + private final Project myProject; + private final MetaManager myMetaManager; + private final String myXmlComponents; + private final Map myProperties = new HashMap(); + private List myComponents; + + public AndroidPasteFactory(Project project, String xmlComponents) { + myProject = project; + myMetaManager = ViewsMetaManager.getInstance(project); + myXmlComponents = xmlComponents; + } + + @NotNull + @Override + public List create() throws Exception { + myComponents = new ArrayList(); + + Document document = new SAXBuilder().build(new StringReader(myXmlComponents), "UTF-8"); + for (Object element : document.getRootElement().getChildren("component")) { + myComponents.add(createComponent((Element)element)); + } + + return myComponents; + } + + private RadComponent createComponent(Element element) throws Exception { + MetaModel metaModel = myMetaManager.getModelByTag(element.getAttributeValue("tag")); + + RadViewComponent component = ModelParser.createComponent(null, metaModel); + List children = component.getChildren(); + + myProperties.put(component, element.getChild("properties")); + + for (Object childElement : element.getChildren("component")) { + RadComponent childComponent = createComponent((Element)childElement); + childComponent.setParent(component); + children.add(childComponent); + } + + return component; + } + + @Override + public void finish() throws Exception { + for (RadComponent component : myComponents) { + createTagAndProperties((RadViewComponent)component); + } + } + + private void createTagAndProperties(final RadViewComponent component) throws Exception { + final Element properties = myProperties.get(component); + if (properties != null) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + XmlTag xmlTag = component.getTag(); + if (xmlTag == null) { + Language language = StdFileTypes.XML.getLanguage(); + xmlTag = + XmlElementFactory.getInstance(myProject).createTagFromText("\n" + component.getMetaModel().getCreation(), language); + + RadViewComponent parent = (RadViewComponent)component.getParent(); + XmlTag parentTag = parent.getTag(); + + XmlTag nextTag = null; + List children = parent.getChildren(); + int index = children.indexOf(component) + 1; + if (index < children.size()) { + nextTag = ((RadViewComponent)children.get(index)).getTag(); + } + + if (nextTag == null) { + xmlTag = parentTag.addSubTag(xmlTag, false); + } + else { + xmlTag = (XmlTag)parentTag.addBefore(xmlTag, nextTag); + } + } + + for (XmlAttribute attribute : xmlTag.getAttributes()) { + attribute.delete(); + } + + for (Object object : properties.getAttributes()) { + Attribute attribute = (Attribute)object; + xmlTag.setAttribute(attribute.getName(), attribute.getValue()); + } + + for (Object object : properties.getChildren()) { + Element element = (Element)object; + String namespace = element.getName(); + + for (Object child : element.getAttributes()) { + Attribute attribute = (Attribute)child; + xmlTag.setAttribute(namespace + ":" + attribute.getName(), attribute.getValue()); + } + } + } + }); + } + + if (component.getProperties() == null) { + PropertyParser propertyParser = component.getRoot().getClientProperty(PropertyParser.KEY); + propertyParser.load(component); + } + + for (RadComponent child : component.getChildren()) { + createTagAndProperties((RadViewComponent)child); + } + } +} \ No newline at end of file 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 999c82c33e6a..07c1917c5b89 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 @@ -108,7 +108,7 @@ public class ModelParser extends XmlRecursiveElementVisitor { } } - public static RadViewComponent createComponent(XmlTag tag, MetaModel metaModel) throws Exception { + public static RadViewComponent createComponent(@Nullable XmlTag tag, MetaModel metaModel) throws Exception { RadViewComponent component = (RadViewComponent)metaModel.getModel().newInstance(); component.setMetaModel(metaModel); component.setTag(tag); 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 9e22ed5910a7..f4bca1481fb8 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 @@ -19,12 +19,16 @@ import com.android.ide.common.rendering.api.ViewInfo; import com.intellij.designer.model.RadComponent; import com.intellij.designer.propertyTable.Property; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlTag; +import com.intellij.util.containers.hash.HashMap; +import org.jdom.Element; import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @author Alexander Lobas @@ -105,4 +109,48 @@ public class RadViewComponent extends RadComponent { public void setProperties(List properties) { myProperties = properties; } + + @Override + public void copyTo(Element parent) throws Exception { + // skip root + if (getParent() != null) { + Element component = new Element("component"); + component.setAttribute("tag", myTag.getName()); + + XmlAttribute[] attributes = myTag.getAttributes(); + if (attributes.length > 0) { + Element properties = new Element("properties"); + component.addContent(properties); + + Map namespaces = new HashMap(); + + for (XmlAttribute attribute : attributes) { + String namespace = attribute.getNamespacePrefix(); + if (namespace.length() == 0) { + properties.setAttribute(attribute.getName(), attribute.getValue()); + } + else { + Element element = namespaces.get(namespace); + if (element == null) { + element = new Element(namespace); + namespaces.put(namespace, element); + } + + element.setAttribute(attribute.getLocalName(), attribute.getValue()); + } + } + + for (Element element : namespaces.values()) { + properties.addContent(element); + } + } + + parent.addContent(component); + parent = component; + } + + for (RadComponent child : myChildren) { + child.copyTo(parent); + } + } } \ No newline at end of file diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/scroll/RadScrollViewComponent.java b/plugins/android-designer/src/com/intellij/android/designer/model/scroll/RadScrollViewComponent.java index 945ff4c4d90d..269eb6635db2 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/scroll/RadScrollViewComponent.java +++ b/plugins/android-designer/src/com/intellij/android/designer/model/scroll/RadScrollViewComponent.java @@ -73,7 +73,7 @@ public class RadScrollViewComponent extends RadViewComponent { // TODO: maybe reload properties } - }, true); + }, getTemplatePresentation().getText(), true); } }); } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/CommonEditActionsProvider.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/CommonEditActionsProvider.java index 64843a768ed4..aa03c7c26326 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/CommonEditActionsProvider.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/CommonEditActionsProvider.java @@ -16,7 +16,6 @@ package com.intellij.designer.actions; import com.intellij.designer.DesignerBundle; -import com.intellij.uiDesigner.SerializedComponentData; import com.intellij.designer.clipboard.SimpleTransferable; import com.intellij.designer.designSurface.DesignerEditorPanel; import com.intellij.designer.designSurface.EditableArea; @@ -29,8 +28,8 @@ import com.intellij.ide.DeleteProvider; import com.intellij.ide.PasteProvider; import com.intellij.ide.dnd.FileCopyPasteUtil; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.ide.CopyPasteManager; +import com.intellij.uiDesigner.SerializedComponentData; import com.intellij.util.ThrowableRunnable; import org.jdom.Element; import org.jdom.output.XMLOutputter; @@ -75,30 +74,26 @@ public class CommonEditActionsProvider implements DeleteProvider, CopyProvider, @Override public void deleteElement(@NotNull DataContext dataContext) { - CommandProcessor.getInstance().executeCommand(myDesigner.getProject(), new Runnable() { - public void run() { - myDesigner.getToolProvider().execute(new ThrowableRunnable() { - @Override - public void run() throws Exception { - EditableArea area = myDesigner.getActionsArea(); - List selection = area.getSelection(); - List components = RadComponent.getPureSelection(selection); - RadComponent newSelection = getNewSelection(components.get(0), selection); + myDesigner.getToolProvider().execute(new ThrowableRunnable() { + @Override + public void run() throws Exception { + EditableArea area = myDesigner.getActionsArea(); + List selection = area.getSelection(); + List components = RadComponent.getPureSelection(selection); + RadComponent newSelection = getNewSelection(components.get(0), selection); - for (RadComponent component : components) { - component.delete(); - } + for (RadComponent component : components) { + component.delete(); + } - if (newSelection == null) { - area.deselectAll(); - } - else { - area.select(newSelection); - } - } - }, true); + if (newSelection == null) { + area.deselectAll(); + } + else { + area.select(newSelection); + } } - }, DesignerBundle.message("command.delete.selection"), null); + }, DesignerBundle.message("command.delete.selection"), true); } @Nullable 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 0c812dac1bf2..448becf86a3c 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 @@ -26,6 +26,7 @@ import com.intellij.designer.palette.Item; import com.intellij.ide.palette.impl.PaletteManager; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.ex.ApplicationManagerEx; +import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; @@ -211,13 +212,23 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider } @Override - public boolean execute(ThrowableRunnable operation, boolean updateProperties) { - return DesignerEditorPanel.this.execute(operation, updateProperties); + public boolean execute(final ThrowableRunnable operation, String command, final boolean updateProperties) { + final boolean[] is = {true}; + CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() { + public void run() { + is[0] = DesignerEditorPanel.this.execute(operation, updateProperties); + } + }, command, null); + return is[0]; } @Override - public void execute(List operations) { - DesignerEditorPanel.this.execute(operations); + public void execute(final List operations, String command) { + CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() { + public void run() { + DesignerEditorPanel.this.execute(operations); + } + }, command, null); } @Override diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/OperationContext.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/OperationContext.java index bc9b7a837a1d..8395728850cd 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/OperationContext.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/OperationContext.java @@ -15,6 +15,7 @@ */ package com.intellij.designer.designSurface; +import com.intellij.designer.designSurface.tools.ComponentPasteFactory; import com.intellij.designer.model.RadComponent; import org.jetbrains.annotations.Nullable; @@ -34,6 +35,7 @@ public final class OperationContext { private Object myType; private EditableArea myArea; private List myComponents; + private ComponentPasteFactory myPasteFactory; private InputEvent myInputEvent; private Point myLocation; private Point myMoveDelta; @@ -104,6 +106,14 @@ public final class OperationContext { myComponents = components; } + public ComponentPasteFactory getPasteFactory() { + return myPasteFactory; + } + + public void setPasteFactory(ComponentPasteFactory pasteFactory) { + myPasteFactory = pasteFactory; + } + public boolean isMoveEnabled() { return myMoveEnabled; } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ComponentPasteFactory.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ComponentPasteFactory.java index eeb72713598f..2e37b3acef09 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ComponentPasteFactory.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ComponentPasteFactory.java @@ -26,4 +26,6 @@ import java.util.List; public interface ComponentPasteFactory { @NotNull List create() throws Exception; + + void finish() throws Exception; } \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/PasteTool.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/PasteTool.java index b0a2c707310b..ab576cc3c3f0 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/PasteTool.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/PasteTool.java @@ -17,8 +17,6 @@ package com.intellij.designer.designSurface.tools; import com.intellij.designer.designSurface.OperationContext; -import java.util.Collections; - /** * @author Alexander Lobas */ @@ -34,6 +32,7 @@ public class PasteTool extends AbstractCreationTool { public void activate() { super.activate(); myContext.setType(OperationContext.PASTE); + myContext.setPasteFactory(myFactory); try { myContext.setComponents(myFactory.create()); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ResizeTracker.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ResizeTracker.java index 213cf8068538..ca862b2bdfd4 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ResizeTracker.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ResizeTracker.java @@ -15,6 +15,7 @@ */ package com.intellij.designer.designSurface.tools; +import com.intellij.designer.DesignerBundle; import com.intellij.designer.designSurface.EditOperation; import com.intellij.designer.designSurface.OperationContext; import com.intellij.designer.model.RadComponent; @@ -122,7 +123,7 @@ public class ResizeTracker extends InputTool { operations.add(operation); } } - myToolProvider.execute(operations); + myToolProvider.execute(operations, DesignerBundle.message("command.tool_operation", myContext.getType())); } } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/TargetingTool.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/TargetingTool.java index 28667f479b9c..dc6e8c870250 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/TargetingTool.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/TargetingTool.java @@ -15,6 +15,7 @@ */ package com.intellij.designer.designSurface.tools; +import com.intellij.designer.DesignerBundle; import com.intellij.designer.designSurface.ComponentTargetFilter; import com.intellij.designer.designSurface.EditOperation; import com.intellij.designer.designSurface.OperationContext; @@ -78,7 +79,8 @@ public abstract class TargetingTool extends InputTool { protected void executeCommand() { if (myExecuteEnabled) { - myToolProvider.execute(Collections.singletonList(myTargetOperation)); + myToolProvider + .execute(Collections.singletonList(myTargetOperation), DesignerBundle.message("command.tool_operation", myContext.getType())); } } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ToolProvider.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ToolProvider.java index 371605c6bbd0..6e096a089837 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ToolProvider.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/tools/ToolProvider.java @@ -130,7 +130,7 @@ public abstract class ToolProvider { public abstract void loadDefaultTool(); - public abstract boolean execute(ThrowableRunnable operation, boolean updateProperties); + public abstract boolean execute(ThrowableRunnable operation, String command, boolean updateProperties); - public abstract void execute(List operations); + public abstract void execute(List operations, String command); } \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java index 345eb76b2663..e8eb19476c55 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java @@ -18,7 +18,6 @@ package com.intellij.designer.model; import com.intellij.designer.palette.Group; import com.intellij.designer.palette.Item; import com.intellij.ide.palette.PaletteGroup; -import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/propertyTable/PropertyTable.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/propertyTable/PropertyTable.java index f4b9bf1e5986..81b4455d9c60 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/propertyTable/PropertyTable.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/propertyTable/PropertyTable.java @@ -21,7 +21,6 @@ import com.intellij.designer.designSurface.DesignerEditorPanel; import com.intellij.designer.designSurface.EditableArea; import com.intellij.designer.model.RadComponent; import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; @@ -176,20 +175,16 @@ public final class PropertyTable extends JBTable implements ComponentSelectionLi cellEditor.stopCellEditing(); } - CommandProcessor.getInstance().executeCommand(myDesigner.getProject(), new Runnable() { - public void run() { - myDesigner.getToolProvider().execute(new ThrowableRunnable() { - @Override - public void run() throws Exception { - for (RadComponent component : myComponents) { - if (!property.isDefaultValue(component)) { - property.setDefaultValue(component); - } - } + myDesigner.getToolProvider().execute(new ThrowableRunnable() { + @Override + public void run() throws Exception { + for (RadComponent component : myComponents) { + if (!property.isDefaultValue(component)) { + property.setDefaultValue(component); } - }, false); + } } - }, DesignerBundle.message("designer.properties.restore_default"), null); + }, DesignerBundle.message("designer.properties.restore_default"), false); repaint(); } @@ -578,41 +573,30 @@ public final class PropertyTable extends JBTable implements ComponentSelectionLi isNewValue = true; } - final boolean[] isSet = {true}; + boolean isSetValue = true; if (isNewValue) { - CommandProcessor.getInstance().executeCommand(myDesigner.getProject(), new Runnable() { - public void run() { - isSet[0] = myDesigner.getToolProvider().execute(new ThrowableRunnable() { - @Override - public void run() throws Exception { - for (RadComponent component : myComponents) { - property.setValue(component, newValue); - } - } - }, false); + isSetValue = myDesigner.getToolProvider().execute(new ThrowableRunnable() { + @Override + public void run() throws Exception { + for (RadComponent component : myComponents) { + property.setValue(component, newValue); + } } - }, DesignerBundle.message("command.set.property.value"), null); + }, DesignerBundle.message("command.set.property.value"), false); } - if (property.needRefreshPropertyList() && isSet[0]) { + if (property.needRefreshPropertyList() && isSetValue) { updateProperties(); } - return isSet[0]; + return isSetValue; } private static void showInvalidInput(Exception e) { Throwable cause = e.getCause(); String message = cause == null ? e.getMessage() : cause.getMessage(); - if (cause == null) { - e.printStackTrace(); - } - else { - cause.printStackTrace(); - } - if (message == null || message.length() == 0) { message = DesignerBundle.message("designer.properties.no_message.error"); } diff --git a/plugins/ui-designer/ui-designer-new/src/messages/DesignerBundle.properties b/plugins/ui-designer/ui-designer-new/src/messages/DesignerBundle.properties index 419f9ea8740a..089103a611d9 100644 --- a/plugins/ui-designer/ui-designer-new/src/messages/DesignerBundle.properties +++ b/plugins/ui-designer/ui-designer-new/src/messages/DesignerBundle.properties @@ -1,6 +1,7 @@ designer.toolwindow.name=Designer designer.toolwindow.title=Component Tree +command.tool_operation=Visual edit operation: {0} command.delete.selection=Delete Selection command.set.property.value=Set Property Value