Make the designer actions panel extensible

https://partner-android-review.googlesource.com/#/c/30296/3
This commit is contained in:
Alexander Lobas
2013-03-19 21:06:22 +04:00
parent 156d57a666
commit f55ad922b2
2 changed files with 59 additions and 25 deletions
@@ -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);
@@ -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;