IDEA-35658 Action button (add/edit/delete) must have standard hot key combination

This commit is contained in:
peter
2012-03-06 20:30:18 +04:00
parent a9626a21d6
commit e81cb911e7
4 changed files with 40 additions and 48 deletions
@@ -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);
}
@@ -127,6 +127,7 @@ public abstract class AbstractTableView<T> 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()));
@@ -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<T extends DomElement> extends DomUIControl imp
private List<T> myCollectionElements = new ArrayList<T>();
private ColumnInfo<T, ?>[] 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<T extends DomElement> 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<T extends DomElement> 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<T extends DomElement> 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<T extends DomElement> 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;
@@ -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);