diff --git a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java index 383495fbf2e8..90ad2778d913 100644 --- a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java +++ b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java @@ -30,7 +30,7 @@ import java.util.*; /** * @author Konstantin Bulenkov */ -class CommonActionsPanel extends JPanel { +public class CommonActionsPanel extends JPanel { public static enum Buttons { ADD, EDIT, REMOVE, UP, DOWN; @@ -193,14 +193,7 @@ class CommonActionsPanel extends JPanel { @Override public ShortcutSet getShortcut() { - switch (myButton) { - case ADD: return CommonShortcuts.getNewForDialogs(); - case EDIT: return CustomShortcutSet.fromString("ENTER"); - case REMOVE: return CustomShortcutSet.fromString(SystemInfo.isMac ? "meta BACK_SPACE" : "alt DELETE"); - case UP: return CustomShortcutSet.fromString("alt UP"); - case DOWN: return CustomShortcutSet.fromString("alt DOWN"); - } - return null; + return getCommonShortcut(myButton); } @Override @@ -244,6 +237,17 @@ class CommonActionsPanel extends JPanel { } } + public static ShortcutSet getCommonShortcut(Buttons button) { + switch (button) { + case ADD: return CommonShortcuts.getNewForDialogs(); + case EDIT: return CustomShortcutSet.fromString("ENTER"); + case REMOVE: return CustomShortcutSet.fromString(SystemInfo.isMac ? "meta BACK_SPACE" : "alt DELETE"); + case UP: return CustomShortcutSet.fromString("alt UP"); + case DOWN: return CustomShortcutSet.fromString("alt DOWN"); + } + return null; + } + interface ListenerFactory { Listener createListener(CommonActionsPanel panel); } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java index ff6c1a15cce2..fe8c445ecfc3 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java @@ -127,6 +127,7 @@ public abstract class AbstractTableView extends JPanel implements TypeSafeDat final ActionManager actionManager = ActionManager.getInstance(); final ToolbarPosition position = getToolbarPosition(); final ActionToolbar myActionToolbar = actionManager.createActionToolbar(ActionPlaces.PROJECT_VIEW_TOOLBAR, actionGroup, position == ToolbarPosition.TOP || position == ToolbarPosition.BOTTOM); + myActionToolbar.setTargetComponent(myTable); final JComponent toolbarComponent = myActionToolbar.getComponent(); final MatteBorder matteBorder = BorderFactory.createMatteBorder(0, 0, position == ToolbarPosition.TOP ? 1 : 0, 0, Color.darkGray); toolbarComponent.setBorder(BorderFactory.createCompoundBorder(matteBorder, toolbarComponent.getBorder())); diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/DomCollectionControl.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/DomCollectionControl.java index 803b890ecf12..30b718b1031d 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/DomCollectionControl.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/DomCollectionControl.java @@ -25,11 +25,12 @@ import com.intellij.openapi.util.IconLoader; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiUtilCore; import com.intellij.psi.xml.XmlElement; +import com.intellij.ui.CommonActionsPanel; import com.intellij.util.ArrayUtil; import com.intellij.util.EventDispatcher; import com.intellij.util.ReflectionUtil; -import com.intellij.util.containers.HashSet; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.HashSet; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.highlighting.DomCollectionProblemDescriptor; @@ -63,22 +64,6 @@ public class DomCollectionControl extends DomUIControl imp private List myCollectionElements = new ArrayList(); private ColumnInfo[] myColumnInfos; private boolean myEditable = false; - private final AnAction myAddAction = new AddAction() { - protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { - return DomCollectionControl.this; - } - }; - - private final AnAction myEditAction = new EditAction() { - protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { - return DomCollectionControl.this; - } - }; - private final AnAction myRemoveAction = new RemoveAction() { - protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { - return DomCollectionControl.this; - } - }; public static final Icon ADD_ICON = IconLoader.getIcon("/general/add.png"); public static final Icon EDIT_ICON = IconLoader.getIcon("/actions/editSource.png"); public static final Icon REMOVE_ICON = IconLoader.getIcon("/general/remove.png"); @@ -169,7 +154,7 @@ public class DomCollectionControl extends DomUIControl imp else { myCollectionPanel = boundComponent; } - myCollectionPanel.setToolbarActions(myAddAction, myEditAction, myRemoveAction); + myCollectionPanel.setToolbarActions(new AddAction(), new EditAction(), new RemoveAction()); myCollectionPanel.installPopup(ActionPlaces.J2EE_ATTRIBUTES_VIEW_POPUP, createPopupActionGroup()); myCollectionPanel.initializeTable(); myCollectionPanel.addCustomDataProvider(this); @@ -389,8 +374,13 @@ public class DomCollectionControl extends DomUIControl imp } public static class AddAction extends AddDomElementAction { + + public AddAction() { + setShortcutSet(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.ADD)); + } + protected boolean isEnabled(final AnActionEvent e) { - return getDomCollectionControl(e) != null || "ProjectViewToolbar".equals(e.getPlace()); + return getDomCollectionControl(e) != null; } protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { @@ -428,22 +418,20 @@ public class DomCollectionControl extends DomUIControl imp } public static class EditAction extends AnAction { - protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { - return DomCollectionControl.getDomCollectionControl(e); - } public EditAction() { super(ApplicationBundle.message("action.edit"), null, DomCollectionControl.EDIT_ICON); + setShortcutSet(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.EDIT)); } public void actionPerformed(AnActionEvent e) { - final DomCollectionControl control = getDomCollectionControl(e); + final DomCollectionControl control = DomCollectionControl.getDomCollectionControl(e); control.doEdit(); control.reset(); } public void update(AnActionEvent e) { - final DomCollectionControl control = getDomCollectionControl(e); + final DomCollectionControl control = DomCollectionControl.getDomCollectionControl(e); final boolean visible = control != null && control.isEditable(); e.getPresentation().setVisible(visible); e.getPresentation().setEnabled(visible && control.getComponent().getTable().getSelectedRowCount() == 1); @@ -453,21 +441,18 @@ public class DomCollectionControl extends DomUIControl imp public static class RemoveAction extends AnAction { public RemoveAction() { super(ApplicationBundle.message("action.remove"), null, DomCollectionControl.REMOVE_ICON); - } - - protected DomCollectionControl getDomCollectionControl(final AnActionEvent e) { - return DomCollectionControl.getDomCollectionControl(e); + setShortcutSet(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.REMOVE)); } public void actionPerformed(AnActionEvent e) { - final DomCollectionControl control = getDomCollectionControl(e); + final DomCollectionControl control = DomCollectionControl.getDomCollectionControl(e); control.doRemove(); control.reset(); } public void update(AnActionEvent e) { final boolean enabled; - final DomCollectionControl control = getDomCollectionControl(e); + final DomCollectionControl control = DomCollectionControl.getDomCollectionControl(e); if (control != null) { final JTable table = control.getComponent().getTable(); enabled = table != null && table.getSelectedRowCount() > 0; diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/actions/AddDomElementAction.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/actions/AddDomElementAction.java index 0e12ce1c47bd..b89220127c21 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/actions/AddDomElementAction.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/actions/AddDomElementAction.java @@ -22,8 +22,12 @@ import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.ListPopup; +import com.intellij.ui.CommonActionsPanel; import com.intellij.util.ReflectionUtil; -import com.intellij.util.xml.*; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomManager; +import com.intellij.util.xml.ElementPresentationManager; +import com.intellij.util.xml.TypeChooser; import com.intellij.util.xml.reflect.DomCollectionChildDescription; import com.intellij.util.xml.ui.DomCollectionControl; import org.jetbrains.annotations.NotNull; @@ -31,7 +35,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyEvent; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -41,8 +44,6 @@ import java.util.List; */ public abstract class AddDomElementAction extends AnAction { - private final static ShortcutSet shortcutSet = new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0)); - public AddDomElementAction() { super(ApplicationBundle.message("action.add"), null, DomCollectionControl.ADD_ICON); } @@ -84,7 +85,7 @@ public abstract class AddDomElementAction extends AnAction { final DataContext dataContext = e.getDataContext(); final ListPopup groupPopup = - JBPopupFactory.getInstance().createActionGroupPopup(null,//J2EEBundle.message("label.menu.title.add.activation.config.property"), + JBPopupFactory.getInstance().createActionGroupPopup(null, group, dataContext, JBPopupFactory.ActionSelectionAid.NUMBERING, true); showPopup(groupPopup, e); @@ -137,8 +138,9 @@ public abstract class AddDomElementAction extends AnAction { } if (actions.size() > 1 && showAsPopup()) { ActionGroup group = new ActionGroup() { + @NotNull public AnAction[] getChildren(@Nullable AnActionEvent e) { - return actions.toArray(AnAction.EMPTY_ARRAY); + return actions.toArray(new AnAction[actions.size()]); } }; return new AnAction[]{new ShowPopupAction(group)}; @@ -150,7 +152,7 @@ public abstract class AddDomElementAction extends AnAction { } } - return actions.toArray(AnAction.EMPTY_ARRAY); + return actions.toArray(new AnAction[actions.size()]); } protected abstract AnAction createAddingAction(final AnActionEvent e, @@ -178,12 +180,12 @@ public abstract class AddDomElementAction extends AnAction { protected ShowPopupAction(ActionGroup group) { super(ApplicationBundle.message("action.add"), null, DomCollectionControl.ADD_ICON); myGroup = group; - setShortcutSet(shortcutSet); + setShortcutSet(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.ADD)); } public void actionPerformed(AnActionEvent e) { final ListPopup groupPopup = - JBPopupFactory.getInstance().createActionGroupPopup(null,//J2EEBundle.message("label.menu.title.add.activation.config.property"), + JBPopupFactory.getInstance().createActionGroupPopup(null, myGroup, e.getDataContext(), JBPopupFactory.ActionSelectionAid.NUMBERING, true); showPopup(groupPopup, e);