EditorAction.java :  » Testing » abbot-1.0.1 » abbot » editor » actions » Java Open Source

Java Open Source » Testing » abbot 1.0.1 
abbot 1.0.1 » abbot » editor » actions » EditorAction.java
package abbot.editor.actions;

import java.awt.event.*;
import java.net.URL;

import javax.swing.*;

import abbot.Log;
import abbot.Platform;
import abbot.editor.*;
import abbot.editor.widgets.*;
import abbot.i18n.Strings;

/** Encapsulate GUI attributes for an editor action. */

public abstract class EditorAction
    extends AbstractAction implements EditorConstants {

    /** Key to refer to the action in ActionMaps; <strong>not</strong> the
        same as the NAME property which is typically used for labels.
    */
    public static final String ACTION_KEY = "action-key";
    public static final String LARGE_ICON = "large-icon";
    public static final String MNEMONIC_INDEX = "mnemonic-index";

    public EditorAction(String actionKey) {
        super(actionKey);
        putValue(ACTION_KEY, actionKey);

        String key = ACTION_PREFIX + actionKey;

        Mnemonic mnemonic = Mnemonic.getMnemonic(Strings.get(key));
        mnemonic.setMnemonic(this);
        if (mnemonic.index != -1)
            putValue(MNEMONIC_INDEX, new Integer(mnemonic.index));
        // Check deprecated usage
        if (mnemonic.keycode == KeyEvent.VK_UNDEFINED) {
            int mn = getMnemonic(key);
            if (mn != KeyEvent.VK_UNDEFINED)
                putValue(MNEMONIC_KEY, new Integer(mn));
        }

        String desc = Strings.get(key + ".desc", true);
        if (!"".equals(desc) && desc != null) {
            putValue(SHORT_DESCRIPTION, TextFormat.tooltip(desc));
        }
        String longDesc = Strings.get(key + ".ldesc", true);
        if (!"".equals(longDesc) && longDesc != null) {
            putValue(LONG_DESCRIPTION, TextFormat.tooltip(longDesc));
        }
        else {
            putValue(LONG_DESCRIPTION, getValue(SHORT_DESCRIPTION));
        }

        String iconName = Strings.get(key + ".icon", true);
        if (!"".equals(iconName) && iconName != null) {
            putValue(SMALL_ICON, getIcon(iconName, 16));
            putValue(LARGE_ICON, getIcon(iconName, 24));
        }

        String accelerator = Strings.get(key + ".acc", true);
        if (!"".equals(accelerator) && accelerator != null) {
            accelerator =
                abbot.tester.AWTConstants.MENU_SHORTCUT_STRING + accelerator;
            try {
                // In case the accelerator given is garbage...
                putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(accelerator));
            }
            catch(Exception e) {
                Log.warn("Bad accelerator '" + accelerator + "': " + e);
            }
        }
    }

    /** @deprecated Encode the mnemonic into the localized label instead. */
    public static int getMnemonic(String key) {
        int code = KeyEvent.VK_UNDEFINED;
        // No (visible) mnemonics on OSX
        if (Platform.isOSX())
            return code;

        String mnemonic = Strings.get(key + ".mn", true);
        if (!"".equals(mnemonic) && mnemonic != null) {
            if (!mnemonic.startsWith("VK_")) {
                mnemonic = "VK_" + mnemonic;
            }
            try {
                code = abbot.util.AWT.getKeyCode(mnemonic);
            }
            catch(IllegalArgumentException e) {
                String msg = Strings.get("editor.bad_mnemonic",
                                         new Object[] {
                                             mnemonic, key + ".mn",
                                             java.util.Locale.getDefault(),
                                             e.toString()
                                         });
                // TODO: format this into an email message
                Log.warn(msg);
            }
        }
        return code;
    }

    /** 
     * Returns the Icon associated with the given name from the available
     * resources. 
     * 
     * @param name Base name of the icon file e.g., help for help16.gif
     * @param size Size in pixels of the icon from the filename, or zero if
     * none, e.g. 16 for help16.gif or 0 for help.gif.
     * @return an ImageIcon or null if no corresponding icon resource is found.
     */
    private ImageIcon getIcon(String name, int size)  {
        String ABBOT_IMAGE_DIR = "/abbot/editor/icons/";
        String base = ABBOT_IMAGE_DIR + name;
        URL url = getClass().getResource(base + ".gif");
        if (url == null) {
            url = getClass().getResource(base + size + ".gif");
        }
        ImageIcon icon = url != null ? new ImageIcon(url) : null;
        return icon;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.