From f55ad922b2ccf702ec91f84b3c852b6da4f1427d Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Tue, 19 Mar 2013 21:06:22 +0400 Subject: [PATCH] Make the designer actions panel extensible https://partner-android-review.googlesource.com/#/c/30296/3 --- .../designer/actions/DesignerActionPanel.java | 78 +++++++++++++------ .../designSurface/DesignerEditorPanel.java | 6 +- 2 files changed, 59 insertions(+), 25 deletions(-) diff --git a/plugins/ui-designer-core/src/com/intellij/designer/actions/DesignerActionPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/actions/DesignerActionPanel.java index 24a15a36953b..249c4247c117 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/actions/DesignerActionPanel.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/actions/DesignerActionPanel.java @@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.SideBorder; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.KeyEvent; @@ -34,14 +35,14 @@ import java.util.List; public class DesignerActionPanel implements DataProvider { public static final String TOOLBAR = "DesignerToolbar"; - private final DefaultActionGroup myActionGroup = new DefaultActionGroup(); + private final DefaultActionGroup myActionGroup; private final DefaultActionGroup myStaticGroup = new DefaultActionGroup(); private final DefaultActionGroup myDynamicGroup = new DefaultActionGroup(); private final DefaultActionGroup myPopupGroup = new DefaultActionGroup(); private final DefaultActionGroup myDynamicPopupGroup = new DefaultActionGroup(); - private JComponent myToolbar; - private final DesignerEditorPanel myDesigner; + protected final JComponent myToolbar; + protected final DesignerEditorPanel myDesigner; private final CommonEditActionsProvider myCommonEditActionsProvider; private final JComponent myShortcuts; @@ -52,16 +53,50 @@ public class DesignerActionPanel implements DataProvider { createInplaceEditingAction(myShortcuts).setDesignerPanel(designer); - myActionGroup.add(myStaticGroup); - myActionGroup.add(myDynamicGroup); + myActionGroup = createActionGroup(); + myToolbar = createToolbar(); + ActionManager actionManager = ActionManager.getInstance(); + myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_CUT)); + myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_COPY)); + myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_PASTE)); + myPopupGroup.addSeparator(); + myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_DELETE)); + myPopupGroup.addSeparator(); + myPopupGroup.add(createSelectActionGroup(designer)); + myPopupGroup.addSeparator(); + myPopupGroup.add(myDynamicPopupGroup); + + designer.getSurfaceArea().addSelectionListener(new ComponentSelectionListener() { + @Override + public void selectionChanged(EditableArea area) { + updateSelectionActions(area.getSelection()); + } + }); + } + + protected DefaultActionGroup createActionGroup() { + DefaultActionGroup group = new DefaultActionGroup(); + group.add(myStaticGroup); + group.add(myDynamicGroup); + return group; + } + + protected JComponent createToolbar() { ActionManager actionManager = ActionManager.getInstance(); ActionToolbar actionToolbar = actionManager.createActionToolbar(TOOLBAR, myActionGroup, true); actionToolbar.setLayoutPolicy(ActionToolbar.WRAP_LAYOUT_POLICY); - myToolbar = actionToolbar.getComponent(); - myToolbar.setBorder(IdeBorderFactory.createBorder(SideBorder.BOTTOM)); - myToolbar.setVisible(false); + JComponent toolbar = actionToolbar.getComponent(); + toolbar.setBorder(IdeBorderFactory.createBorder(SideBorder.BOTTOM)); + toolbar.setVisible(false); + + return toolbar; + } + + @NotNull + private ActionGroup createSelectActionGroup(DesignerEditorPanel designer) { + final DefaultActionGroup group = new DefaultActionGroup("_Select", true); AnAction selectParent = new AnAction("Select Parent", "Select Parent", null) { @Override @@ -78,23 +113,10 @@ public class DesignerActionPanel implements DataProvider { SelectAllAction selectAllAction = new SelectAllAction(designer.getSurfaceArea()); registerAction(selectAllAction, "$SelectAll"); - myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_CUT)); - myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_COPY)); - myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_PASTE)); - myPopupGroup.addSeparator(); - myPopupGroup.add(actionManager.getAction(IdeActions.ACTION_DELETE)); - myPopupGroup.addSeparator(); - myPopupGroup.add(selectParent); - myPopupGroup.add(selectAllAction); - myPopupGroup.addSeparator(); - myPopupGroup.add(myDynamicPopupGroup); + group.add(selectParent); + group.add(selectAllAction); - designer.getSurfaceArea().addSelectionListener(new ComponentSelectionListener() { - @Override - public void selectionChanged(EditableArea area) { - updateSelectionActions(area.getSelection()); - } - }); + return group; } public static StartInplaceEditing createInplaceEditingAction(JComponent shortcuts) { @@ -122,6 +144,14 @@ public class DesignerActionPanel implements DataProvider { return myPopupGroup; } + protected DefaultActionGroup getDynamicActionGroup() { + return myDynamicGroup; + } + + protected JComponent getShortcuts() { + return myShortcuts; + } + public void update() { boolean oldVisible = myToolbar.isVisible(); boolean newVisible = isVisible(myActionGroup); diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java index b09fc926803e..6486d4dab20c 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java @@ -327,7 +327,7 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider myQuickFixManager = new QuickFixManager(this, myGlassLayer, myScrollPane.getViewport()); - myActionPanel = new DesignerActionPanel(this, myGlassLayer); + myActionPanel = createActionPanel(); myWarnAction = new FixableMessageAction(); add(myActionPanel.getToolbarComponent()); @@ -344,6 +344,10 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider }); } + protected DesignerActionPanel createActionPanel() { + return new DesignerActionPanel(this, myGlassLayer); + } + @Nullable public final PaletteItem getActivePaletteItem() { return myActivePaletteItem;