Add i18n components.
[jkeytool.git] / src / net / pterodactylus / util / i18n / gui / I18nAction.java
diff --git a/src/net/pterodactylus/util/i18n/gui/I18nAction.java b/src/net/pterodactylus/util/i18n/gui/I18nAction.java
new file mode 100644 (file)
index 0000000..6078335
--- /dev/null
@@ -0,0 +1,89 @@
+
+package net.pterodactylus.util.i18n.gui;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Icon;
+
+import net.pterodactylus.util.i18n.I18n;
+import net.pterodactylus.util.i18n.I18nable;
+
+/**
+ * Helper class that initializes actions with values from {@link I18n}.
+ *
+ * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
+ */
+public abstract class I18nAction extends AbstractAction implements I18nable {
+
+       /** The I18n basename. */
+       private final String i18nName;
+
+       /**
+        * Creates a new action that uses the given name as base name to get values
+        * from {@link I18n}.
+        *
+        * @param i18nName
+        *            The base name of the action
+        */
+       public I18nAction(String i18nName) {
+               this(i18nName, null);
+       }
+
+       /**
+        * Creates a new action that uses the given name as base name to get values
+        * from {@link I18n} and the given icon.
+        *
+        * @param i18nName
+        *            The base name of the action
+        * @param icon
+        *            The icon for the action
+        */
+       public I18nAction(String i18nName, Icon icon) {
+               this(i18nName, true, icon);
+       }
+
+       /**
+        * Creates a new action that uses the given name as base name to get values
+        * from {@link I18n}.
+        *
+        * @param i18nName
+        *            The base name of the action
+        * @param enabled
+        *            Whether the action should be enabled
+        */
+       public I18nAction(String i18nName, boolean enabled) {
+               this(i18nName, enabled, null);
+       }
+
+       /**
+        * Creates a new action that uses the given name as base name to get values
+        * from {@link I18n} and the given icon.
+        *
+        * @param i18nName
+        *            The base name of the action
+        * @param enabled
+        *            Whether the action should be enabled
+        * @param icon
+        *            The icon for the action
+        */
+       public I18nAction(String i18nName, boolean enabled, Icon icon) {
+               this.i18nName = i18nName;
+               if (icon != null) {
+                       putValue(Action.SMALL_ICON, icon);
+               }
+               setEnabled(enabled);
+               updateI18n();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void updateI18n() {
+               putValue(Action.NAME, I18n.get(i18nName + ".name"));
+               putValue(Action.MNEMONIC_KEY, I18n.getKey(i18nName + ".mnemonic"));
+               putValue(Action.ACCELERATOR_KEY, I18n.getKeyStroke(i18nName + ".accelerator"));
+               putValue(Action.SHORT_DESCRIPTION, I18n.get(i18nName + ".shortDescription"));
+               putValue(Action.LONG_DESCRIPTION, I18n.get(i18nName + ".longDescription"));
+       }
+
+}
\ No newline at end of file