/**
* Copyright 2005 Bushe Enterprises, Inc., Hopkinton, MA, USA, www.bushe.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.bushe.swing.action;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.KeyStroke;
/**
* This class takes an action and configures it to make prototypes of the
* actions according to a look and feel. By default, the Java Look and Feel
* Design Guidelines are used.
* @deprecated Use ActionLookAndFeels instead. This was depecated so as
* not to confuse xml-action's ActionManager's configureXXX methods, which
* are very different in function.
* @author Michael Bushe
* @version 1.0
*/
public class ActionConfigurator {
public static final String ACTION_NEW = "New";
public static final String ACTION_SAVE = "Save";
public static final String ACTION_SAVE_AS = "Save As...";
public static final String ACTION_EXIT = "Exit";
public static final String ACTION_PREFERENCES = "Preferences";
public static final String ACTION_PRINT = "Print";
public static final String ACTION_COPY = "Copy";
public static final String ACTION_DELETE = "Delete";
public static final String ACTION_ABOUT = "About";
public static final String ACTION_USER_GUIDE = "User's Guide";
public static final String ACTION_REFRESH = "Refresh";
/** Map of Maps, each one keyed by action name, */
protected static Map sLookAndFeel = new HashMap();
/** Same as above, except a member variable, settable in the constructor.*/
static Map mLookAndFeel;
static {
addLookAndFeelActionEntry(ACTION_NEW, "New", "New", "New",
new ImageIcon(ActionConfigurator.class.
getResource(
"/toolbarButtonGraphics/general/New16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_N));
addLookAndFeelActionEntry(ACTION_SAVE, "Save", "Save", "Save",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Save16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_S));
addLookAndFeelActionEntry(ACTION_SAVE_AS, "Save As", "Save As", "Save As",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/SaveAs16.gif")),
null,
new Integer(KeyEvent.VK_A));
addLookAndFeelActionEntry(ACTION_EXIT, "Exit", "Exit", "Exit",
null,
null,
new Integer(KeyEvent.VK_X));
addLookAndFeelActionEntry(ACTION_PREFERENCES, "Preferences", "Preferences", "Preferences",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Preferences16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_R));
addLookAndFeelActionEntry(ACTION_PRINT, "Print", "Print", "Print",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Print16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_P));
addLookAndFeelActionEntry(ACTION_COPY, "Copy", "Copy", "Copy",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Copy16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_C));
addLookAndFeelActionEntry(ACTION_DELETE, "Delete", "Delete", "Delete",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Delete16.gif")),
KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK),
new Integer(KeyEvent.VK_D));
addLookAndFeelActionEntry(ACTION_ABOUT, "About", "About", "About",
null,
null,
new Integer(KeyEvent.VK_A));
addLookAndFeelActionEntry(ACTION_REFRESH, "Refresh", "Refresh", "Refresh",
new ImageIcon(ActionConfigurator.class.getResource(
"/toolbarButtonGraphics/general/Refresh16.gif")),
KeyStroke.getKeyStroke((char) KeyEvent.VK_F5),
new Integer(KeyEvent.VK_R));
}
/**
* Add an entry in the static look and feel entry set. This allows
* the configurator to have a sort of "look and feel" defined for action -
* which ones are available, their icons, names, etc.
* @param name the action name
* @param cmd the caction command name
* @param desc the short description of the action
* @param longDesc the long description of the action
* @param icon the icon description of the action
* @param acc the action's accelerator key (shortcut)
* @param mnemonic the action's mnemonic (underlined letter in a menu)
*/
public static void addLookAndFeelActionEntry(String name, String cmd, String desc,
String longDesc,
ImageIcon icon, KeyStroke acc, Integer mnemonic) {
HashMap valuesMap = new HashMap();
valuesMap.put(Action.NAME, name);
valuesMap.put(Action.ACTION_COMMAND_KEY, cmd);
valuesMap.put(Action.SHORT_DESCRIPTION, desc);
valuesMap.put(Action.LONG_DESCRIPTION, longDesc);
valuesMap.put(Action.SMALL_ICON, icon);
valuesMap.put(Action.ACCELERATOR_KEY, acc);
valuesMap.put(Action.MNEMONIC_KEY, mnemonic);
sLookAndFeel.put(name, valuesMap);
}
/**
* Constructor that uses the standard look and feel. This is not necessary,
* since the static methods of this class are equavalent to using an instance
* with the null, or standard look and feels. Added for consistency.
*/
public ActionConfigurator() {
mLookAndFeel = sLookAndFeel;
}
/**
* Constructor that uses a look and feel other than the standard look and
* feel.
* @param lookAndFeel a Map of Maps. The Map is keyed by action name,
* the values are Maps - name-value pairs that are used to configure a
* action by calling putValue with the name and the value of the action.
*/
public ActionConfigurator(Map lookAndFeel) {
mLookAndFeel = lookAndFeel;
}
/**
* Configures an action by setting the properties (putValue) for the look
* and feel of this Configurator. The default L&F is the Java look and
* feel, but another look and feel can be set during construction.
* Essentially turns a raw action into a prototypical one.
* @param actionConstant one of the constants defined for the configurator's
* look and feel. By default, use a constant defined in this class with the
* default look and feel.
* @param action the action to modify.
* @return true is successful, false if no values were specifed in the
* look and feel for the actionConstant
*/
public boolean configureActionRespectLookAndFeel(String actionConstant, Action action) {
return configureAction(mLookAndFeel, actionConstant, action);
}
/**
* Same as {@link #configureAction(Map, String, Action)
* configureAction(Map, String, Action)} except the Map is
* null, therefore it uses the static look and feel.
* @param actionConstant the name of the action
* @param action and action to modify
* @return an action configured to the look and feel set statically
*/
public static boolean configureAction(String actionConstant, Action action) {
return configureAction(sLookAndFeel, actionConstant, action);
}
/**
* Essentially turns a raw action into a prototypical one.
* Configures an action by setting the properties (putValue) for the look
* and feel of this Configurator. The default L&F is the Java look and
* feel, but another look and feel can be set during construction.
* Essentially turns a raw action into a prototypical one.
* @param lookAndFeel see constuctor for description of structure.
* @param actionConstant one of the constants defined for the configurator's
* look and feel. By default, use a constant defined in this class with the
* default look and feel.
* @param action the action to modify.
* @return true is successful, false if no values were specifed in the
* look and feel for the actionConstant
*/
public static boolean configureAction(Map lookAndFeel, String actionConstant, Action action) {
if (lookAndFeel == null) {
lookAndFeel = sLookAndFeel;
}
Map values = (Map) lookAndFeel.get(actionConstant);
if (values == null) {
return false;
} else {
Iterator iter = values.keySet().iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
Object value = values.get(key);
action.putValue(key, value);
}
return true;
}
}
}