diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java index a892af632073..270262ef4ac3 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java @@ -22,6 +22,7 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.ActionToolbar; +import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.diff.impl.dir.actions.DirDiffToolbarActions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; @@ -190,7 +191,9 @@ public class DirDiffPanel implements Disposable { column.setMinWidth(120); } } - final ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("DirDiff", new DirDiffToolbarActions(myModel), true); + final DirDiffToolbarActions actions = new DirDiffToolbarActions(myModel, this.getPanel()); + final ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("DirDiff", actions, true); + registerCustomShortcuts(actions, myRootPanel); myToolBarPanel.add(toolbar.getComponent(), BorderLayout.CENTER); final JBLoadingPanel loadingPanel = new JBLoadingPanel(new BorderLayout(), wnd.getDisposable()); loadingPanel.add(myComponent, BorderLayout.CENTER); @@ -288,6 +291,13 @@ public class DirDiffPanel implements Disposable { } } + private void registerCustomShortcuts(DirDiffToolbarActions actions, JPanel rootPanel) { + final ActionManager mgr = ActionManager.getInstance(); + for (AnAction action : actions.getChildren(null)) { + + } + } + public void focusTable() { final IdeFocusManager focusManager = myModel.getProject().isDefault() ? IdeFocusManager.getGlobalInstance() : IdeFocusManager.getInstance(myModel.getProject()); diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/ChangeCompareModeGroup.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/ChangeCompareModeGroup.java index 00386818ebc5..8f4306113ff6 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/ChangeCompareModeGroup.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/ChangeCompareModeGroup.java @@ -16,9 +16,7 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.ide.diff.DirDiffSettings; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ComboBoxAction; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; import com.intellij.ui.IdeBorderFactory; @@ -31,9 +29,10 @@ import java.util.ArrayList; /** * @author Konstantin Bulenkov */ -public class ChangeCompareModeGroup extends ComboBoxAction { +public class ChangeCompareModeGroup extends ComboBoxAction implements ShortcutProvider{ private final DefaultActionGroup myGroup; private DirDiffSettings mySettings; + private JButton myButton; public ChangeCompareModeGroup(DirDiffTableModel model) { mySettings = model.getSettings(); @@ -51,6 +50,11 @@ public class ChangeCompareModeGroup extends ComboBoxAction { myGroup = new DefaultActionGroup(actions.toArray(new ChangeCompareModeAction[actions.size()])); } + @Override + public void actionPerformed(AnActionEvent e) { + myButton.doClick(); + } + @Override public void update(AnActionEvent e) { super.update(e); @@ -62,8 +66,10 @@ public class ChangeCompareModeGroup extends ComboBoxAction { public JComponent createCustomComponent(Presentation presentation) { JPanel panel = new JPanel(new BorderLayout()); final JLabel label = new JLabel("Compare by:"); + label.setDisplayedMnemonicIndex(0); panel.add(label, BorderLayout.WEST); - panel.add(super.createCustomComponent(presentation).getComponent(0), BorderLayout.CENTER); + myButton = (JButton)super.createCustomComponent(presentation).getComponent(0); + panel.add(myButton, BorderLayout.CENTER); panel.setBorder(IdeBorderFactory.createEmptyBorder(2, 6, 2, 0)); return panel; } @@ -73,4 +79,9 @@ public class ChangeCompareModeGroup extends ComboBoxAction { protected DefaultActionGroup createPopupActionGroup(JComponent button) { return myGroup; } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("alt C"); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffAction.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffAction.java index 37395bccb0c9..df0c6cb99b0d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffAction.java @@ -16,6 +16,7 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.ShortcutProvider; import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.diff.impl.dir.DirDiffIcons; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; @@ -25,7 +26,7 @@ import javax.swing.*; /** * @author Konstantin Bulenkov */ -public abstract class DirDiffAction extends ToggleAction implements DirDiffIcons { +public abstract class DirDiffAction extends ToggleAction implements DirDiffIcons, ShortcutProvider { private final DirDiffTableModel myModel; protected DirDiffAction(DirDiffTableModel model, String name, Icon icon) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffToolbarActions.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffToolbarActions.java index 3054c049f251..8b03ac38024c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffToolbarActions.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/DirDiffToolbarActions.java @@ -15,14 +15,13 @@ */ package com.intellij.openapi.diff.impl.dir.actions; -import com.intellij.openapi.actionSystem.ActionGroup; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Separator; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + /** * @author Konstantin Bulenkov */ @@ -30,7 +29,7 @@ public class DirDiffToolbarActions extends ActionGroup { private final AnAction[] myActions; private final DirDiffTableModel myModel; - public DirDiffToolbarActions(DirDiffTableModel model) { + public DirDiffToolbarActions(DirDiffTableModel model, JComponent panel) { super("Directory Diff Actions", false); myModel = model; myActions = new AnAction[] { @@ -44,6 +43,11 @@ public class DirDiffToolbarActions extends ActionGroup { new ChangeCompareModeGroup(myModel), Separator.getInstance() }; + for (AnAction action : myActions) { + if (action instanceof ShortcutProvider) { + action.registerCustomShortcutSet(new CustomShortcutSet(((ShortcutProvider)action).getShortcut()), panel); + } + } } @NotNull diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableEqual.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableEqual.java index 7b16d121bac0..f513da60978d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableEqual.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableEqual.java @@ -16,6 +16,8 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.KeyboardShortcut; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; /** @@ -34,4 +36,9 @@ public class EnableEqual extends DirDiffAction { public void updateState(boolean state) { getModel().setShowEqual(state); } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("alt EQUALS"); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableLeft.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableLeft.java index 1ac8db191781..8c797af0aff6 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableLeft.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableLeft.java @@ -16,6 +16,8 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.KeyboardShortcut; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; /** @@ -34,4 +36,9 @@ public class EnableLeft extends DirDiffAction { public void updateState(boolean state) { getModel().setShowNewOnSource(state); } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("alt RIGHT"); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableNotEqual.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableNotEqual.java index 21a7f9281e85..14723b78031e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableNotEqual.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableNotEqual.java @@ -16,6 +16,8 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.KeyboardShortcut; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; /** @@ -34,4 +36,9 @@ public class EnableNotEqual extends DirDiffAction { public void updateState(boolean state) { getModel().setShowDifferent(state); } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("alt MINUS"); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableRight.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableRight.java index f31df709f83e..0c771546beb4 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableRight.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/EnableRight.java @@ -16,6 +16,8 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.KeyboardShortcut; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; /** @@ -34,4 +36,9 @@ public class EnableRight extends DirDiffAction { public void updateState(boolean state) { getModel().setShowNewOnTarget(state); } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("alt LEFT"); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/RefreshDirDiffAction.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/RefreshDirDiffAction.java index 10988cc70262..ec86f28f90b0 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/RefreshDirDiffAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/actions/RefreshDirDiffAction.java @@ -16,6 +16,8 @@ package com.intellij.openapi.diff.impl.dir.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.KeyboardShortcut; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.diff.impl.dir.DirDiffTableModel; import com.intellij.util.Icons; @@ -36,4 +38,9 @@ public class RefreshDirDiffAction extends DirDiffAction { protected void updateState(boolean state) { getModel().updateFromUI(); } + + @Override + public Shortcut getShortcut() { + return KeyboardShortcut.fromString("F5"); + } }