provide keyboard navigation

This commit is contained in:
Konstantin Bulenkov
2011-05-15 12:38:26 +04:00
parent 17590faa96
commit bb2be75d07
9 changed files with 73 additions and 12 deletions
@@ -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());
@@ -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");
}
}
@@ -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) {
@@ -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
@@ -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");
}
}
@@ -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");
}
}
@@ -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");
}
}
@@ -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");
}
}
@@ -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");
}
}