mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Make the designer actions panel extensible
https://partner-android-review.googlesource.com/#/c/30296/3
This commit is contained in:
+54
-24
@@ -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);
|
||||
|
||||
+5
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user