Author: tchemit Date: 2008-01-20 22:09:09 +0000 (Sun, 20 Jan 2008) New Revision: 300 Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerActionManager.java Log: am?\195?\169lioration init des actions (on peut soit utiliser les ActionConfig, soit les attributs du component parent) Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerActionManager.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerActionManager.java 2008-01-20 22:08:05 UTC (rev 299) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerActionManager.java 2008-01-20 22:09:09 UTC (rev 300) @@ -25,7 +25,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import static org.codelutin.i18n.I18n._; -import org.codelutin.i18n.I18n; import javax.swing.AbstractButton; import javax.swing.Action; @@ -38,7 +37,7 @@ * La classe responsable de l'enregistrement des actions disponibles * dans l'application ({@link #init()} . * <p/> - * C'est aussi une usine d'actions ({@link #newAction(String)} . + * C'est aussi une usine d'actions ({@link #newAction(String,javax.swing.AbstractButton)} . * <p/> * On peut de plus via la méthode {@link #loadActions(JAXXObject)} de charger * dans l'ui les actions connues. @@ -57,55 +56,6 @@ static Map<String, Class<? extends SimExplorerAbstractAction>> impls; - /** - * @param actionKey le nom de l'action tel que définie dans le fichier - * de mapping (sans le prefix action.) - * @return une nouvelle instance de l'action associée à sa clef. - */ - public static SimExplorerAbstractAction newAction(String actionKey) { - - // on vérifie que l'action existe bien - checkRegistredAction(actionKey); - - // on récupère la classe d'implantation de l'action - Class<? extends SimExplorerAbstractAction> klazz = impls.get(actionKey); - - - try { - SimExplorerAbstractAction result = klazz.getConstructor(String.class).newInstance(actionKey); - result.putValue(Action.ACTION_COMMAND_KEY, actionKey); - - log.debug(actionKey + " : " + result); - // recherche de l'annotation de configuration - ActionConfig anno = klazz.getAnnotation(ActionConfig.class); - if (anno != null) { - // inject les données - if (!anno.name().isEmpty()) { - result.putValue(Action.NAME, I18n._(anno.name())); - } - //if (!anno.shortDescription().isEmpty()) { - result.putValue(Action.SHORT_DESCRIPTION, I18n._(anno.shortDescription())); - //} - if (!anno.smallIcon().isEmpty()) { - result.putValue(Action.SMALL_ICON, fr.cemagref.simexplorer.is.ui.swing.util.UIHelper.createImageIcon(anno.smallIcon())); - } - if (anno.mnemonic() != '\0') { - result.putValue(Action.MNEMONIC_KEY, anno.mnemonic()); - } - result.putValue(Action.ACCELERATOR_KEY, anno.accelerator()); - result.putValue(Action.DISPLAYED_MNEMONIC_INDEX_KEY, anno.displayedMnemonicIndex()); - - result.putValue("hideActionText", anno.hideActionText()); - result.putValue(Action.SELECTED_KEY, anno.selected()); - result.setEnabled(anno.enabled()); - - } - return result; - } catch (Exception e) { - throw new SimExplorerRuntimeException(e); - } - } - @SuppressWarnings({"unchecked"}) public static void init() { if (impls == null) { @@ -150,19 +100,84 @@ continue; } AbstractButton component = (AbstractButton) comp; - SimExplorerAbstractAction action = newAction(actionKey); - //String text = component.getText(); - //String tooltip = component.getToolTipText(); - //Icon icon = component.getIcon(); + + SimExplorerAbstractAction action = newAction(actionKey, component); + component.setAction(action); + Boolean value = (Boolean) action.getValue("hideActionText"); - if (value != null && value) { - component.setHideActionText(true); + + component.setHideActionText(value != null && value); + } + } + + /** + * @param actionKey le nom de l'action tel que définie dans le fichier + * de mapping (sans le prefix action.) + * @param component le button où rattacher l'action + * @return une nouvelle instance de l'action associée à sa clef. + */ + public static SimExplorerAbstractAction newAction(String actionKey, AbstractButton component) { + + // on vérifie que l'action existe bien + checkRegistredAction(actionKey); + + // on récupère la classe d'implantation de l'action + Class<? extends SimExplorerAbstractAction> klazz = impls.get(actionKey); + + + try { + SimExplorerAbstractAction result = klazz.getConstructor(String.class).newInstance(actionKey); + //result.putValue(Action.ACTION_COMMAND_KEY, actionKey); + + log.debug(actionKey + " : " + result); + // recherche de l'annotation de configuration + ActionConfig anno = klazz.getAnnotation(ActionConfig.class); + if (anno != null) { + // inject les données + if (!anno.name().isEmpty()) { + System.out.println("found action with name : " + anno.name()); + result.putValue(Action.NAME, _(anno.name())); + } + //if (!anno.shortDescription().isEmpty()) { + result.putValue(Action.SHORT_DESCRIPTION, _(anno.shortDescription())); + //} + if (!anno.smallIcon().isEmpty()) { + result.putValue(Action.SMALL_ICON, fr.cemagref.simexplorer.is.ui.swing.util.UIHelper.createImageIcon(anno.smallIcon())); + } + if (anno.mnemonic() != '\0') { + result.putValue(Action.MNEMONIC_KEY, anno.mnemonic()); + } else if (component!=null) { + result.putValue(Action.MNEMONIC_KEY, component.getMnemonic()); + } + //TODO Convert it from String result.putValue(Action.ACCELERATOR_KEY, anno.accelerator()); + + + result.putValue("hideActionText", anno.hideActionText()); + result.putValue(Action.SELECTED_KEY, anno.selected()); + result.setEnabled(anno.enabled()); + } else { + if (component != null) { + result.putValue(Action.SHORT_DESCRIPTION, component.getToolTipText()); + result.putValue(Action.SMALL_ICON, component.getIcon()); + result.putValue(Action.ACTION_COMMAND_KEY, component.getName()); + result.putValue(Action.NAME, component.getText()); + result.putValue(Action.MNEMONIC_KEY, component.getMnemonic()); + result.putValue("hideActionText", component.getHideActionText()); + } } - //component.setText(text); - //component.setToolTipText(tooltip); - //component.setIcon(icon); - //component.setEnabled(true); + String text = (String) result.getValue(Action.NAME); + Integer mnemo = (Integer) result.getValue(Action.MNEMONIC_KEY); + if (mnemo!=null && mnemo != '\0') { + int pos = text.indexOf((char)mnemo.intValue()); + if (pos==-1) { + pos = text.indexOf(Character.toLowerCase((char)mnemo.intValue())); + } + result.putValue(Action.DISPLAYED_MNEMONIC_INDEX_KEY, pos); + } + return result; + } catch (Exception e) { + throw new SimExplorerRuntimeException(e); } }