20 package net.sf.gridarta.gui.dialog.shortcuts;
22 import java.awt.Component;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.Comparator;
27 import java.util.HashSet;
28 import java.util.Iterator;
29 import java.util.List;
30 import java.util.prefs.AbstractPreferences;
31 import java.util.prefs.BackingStoreException;
32 import java.util.prefs.Preferences;
33 import javax.swing.Action;
34 import javax.swing.ActionMap;
35 import javax.swing.KeyStroke;
40 import net.
sf.japi.swing.action.ActionBuilder;
41 import net.
sf.japi.swing.action.DummyAction;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
77 public int compare(@NotNull
final Action o1, @NotNull
final Action o2) {
109 for (
final Action action :
this) {
110 final Object acceleratorKey = action.getValue(Action.ACCELERATOR_KEY);
111 if (acceleratorKey != null) {
116 final Preferences commentPreferences =
new AbstractPreferences(null,
"") {
119 protected void putSpi(
final String key,
final String value) {
120 throw new UnsupportedOperationException();
125 protected String getSpi(@NotNull
final String key) {
126 if (!key.startsWith(PREFERENCES_COMMENT_PREFIX)) {
130 final String actionKey = key.substring(PREFERENCES_COMMENT_PREFIX.length());
131 final Action action = actionBuilder.getAction(actionKey);
140 protected void removeSpi(
final String key) {
141 throw new UnsupportedOperationException();
145 protected void removeNodeSpi() {
146 throw new UnsupportedOperationException();
150 protected String[] keysSpi() {
151 throw new UnsupportedOperationException();
155 protected String[] childrenNamesSpi() {
156 throw new UnsupportedOperationException();
160 protected AbstractPreferences childSpi(
final String name) {
161 throw new UnsupportedOperationException();
165 protected void syncSpi() {
170 protected void flushSpi() {
175 actionBuilder.addPref(commentPreferences);
177 for (
final Action action :
this) {
178 final String value = preferences.get(PREFERENCES_SHORTCUT_PREFIX +
ActionUtils.
getActionId(action), null);
181 action.putValue(Action.ACCELERATOR_KEY, null);
183 final Object acceleratorKey = KeyStroke.getKeyStroke(value);
184 if (acceleratorKey != null) {
185 action.putValue(Action.ACCELERATOR_KEY, acceleratorKey);
197 for (
final String key : preferences.keys()) {
198 if (key.startsWith(PREFERENCES_SHORTCUT_PREFIX)) {
199 preferences.remove(key);
202 }
catch (
final BackingStoreException ignored) {
206 for (
final Action action :
this) {
210 if (acceleratorKey.equals(defaultAcceleratorKey)) {
211 preferences.remove(preferencesKey);
213 preferences.put(preferencesKey, acceleratorKey);
231 for (
final Action action :
this) {
242 final List<Action> result =
new ArrayList<>();
243 final ActionMap actionMap = actionBuilder.getActionMap();
244 for (
final Object key : actionMap.allKeys()) {
245 if (key instanceof String) {
246 final Action action = actionMap.get(key);
247 assert action != null;
253 result.sort(ACTION_COMPARATOR);
254 return result.iterator();
263 if (action instanceof DummyAction) {
270 }
catch (
final IllegalArgumentException ignored) {
274 return !ignoreActions.contains(
id);
static final Comparator< Action > ACTION_COMPARATOR
A Comparator that compares Actions by name.
boolean isValidAction(@NotNull final Action action)
Returns whether an Action is a global action.
Utility class for string manipulation.
final Collection< String > ignoreActions
The action names to hide.
final ActionBuilder actionBuilder
The managed ActionBuilder.
static String getShortcutDescription(@NotNull final Action action, @NotNull final String key)
Returns a description of the shortcut of an Action.
void revertAll()
Reverts all shortcuts to their default values.
Utility class implementing Action related functions.
static final Pattern PATTERN_SPACES
The pattern that matches a non-empty sequence of spaces.
void saveShortcuts()
Saves all shortcuts to the preferences.
static String getString(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final String defaultValue)
Returns the value of a key.
Base package of all Gridarta classes.
void showShortcutsDialog(@NotNull final Component parentComponent)
Displays a dialog to edit shortcuts.
void loadShortcuts()
Restores all shortcuts from the preferences.
Interface used as preferences location.
Iterator< Action > iterator()
Returns all Actions.
static final String PREFERENCES_SHORTCUT_PREFIX
The prefix for preferences keys for shortcuts.
Manager for shortcuts of all Actions in an ActionBuilder instance.
ShortcutsManager(@NotNull final ActionBuilder actionBuilder)
Creates a new instance.
static String getActionId(@NotNull final Action action)
Returns an Action's ID string.
final Preferences preferences
The Preferences for storing/restoring shortcuts.
Utility class for ActionBuilder related functions.
static final String DEFAULT_ACCELERATOR_KEY
Action key to store the default shortcut.
static String getActionName(@NotNull final Action action)
Returns the name of an Action.
static final String NO_SHORTCUT
The shortcut description for actions without shortcuts.
static final String PREFERENCES_COMMENT_PREFIX
The prefix for preferences keys for shortcut comments.
void showDialog(@NotNull final Component parentComponent)
Opens the dialog.