mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-35658 Action button (add/edit/delete) must have standard hot key combination
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user