OSDN Git Service

Merge commit '2458eff3aea04f67893bc824b5cf896fbb767332'
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / ClipboardAction.java
diff --git a/src/main/java/jp/sourceforge/jindolf/ClipboardAction.java b/src/main/java/jp/sourceforge/jindolf/ClipboardAction.java
new file mode 100644 (file)
index 0000000..3a1b3d7
--- /dev/null
@@ -0,0 +1,130 @@
+/*\r
+ * クリップボード操作用Action\r
+ *\r
+ * Copyright(c) 2008 olyutorskii\r
+ * $Id: ClipboardAction.java 888 2009-11-04 06:23:35Z olyutorskii $\r
+ */\r
+\r
+package jp.sourceforge.jindolf;\r
+\r
+import java.awt.Toolkit;\r
+import java.awt.datatransfer.Clipboard;\r
+import java.awt.datatransfer.StringSelection;\r
+import java.awt.event.ActionEvent;\r
+import javax.swing.Action;\r
+import javax.swing.text.JTextComponent;\r
+import javax.swing.text.TextAction;\r
+\r
+/**\r
+ * テキストコンポーネント-クリップボード間操作用にカスタム化したAction。\r
+ */\r
+@SuppressWarnings("serial")\r
+public class ClipboardAction extends TextAction{\r
+\r
+    /** アクション{@value}。 */\r
+    public static final String ACTION_CUT    = "ACTION_CUT";\r
+    /** アクション{@value}。 */\r
+    public static final String ACTION_COPY   = "ACTION_COPY";\r
+    /** アクション{@value}。 */\r
+    public static final String ACTION_PASTE  = "ACTION_PASTE";\r
+    /** アクション{@value}。 */\r
+    public static final String ACTION_SELALL = "ACTION_SELALL";\r
+\r
+    /**\r
+     * 文字列をクリップボードにコピーする。\r
+     * @param data 文字列\r
+     */\r
+    public static void copyToClipboard(CharSequence data){\r
+        Toolkit toolkit = Toolkit.getDefaultToolkit();\r
+        Clipboard clipboard = toolkit.getSystemClipboard();\r
+        StringSelection selection = new StringSelection(data.toString());\r
+        clipboard.setContents(selection, selection);\r
+        return;\r
+    }\r
+\r
+    /**\r
+     * カット用Actionの生成。\r
+     * @return カット用Action\r
+     */\r
+    public static ClipboardAction cutAction(){\r
+        return new ClipboardAction("選択範囲をカット", ACTION_CUT);\r
+    }\r
+\r
+    /**\r
+     * コピー用Actionの生成。\r
+     * @return コピー用Action\r
+     */\r
+    public static ClipboardAction copyAction(){\r
+        return new ClipboardAction("選択範囲をコピー", ACTION_COPY);\r
+    }\r
+\r
+    /**\r
+     * ペースト用Actionの生成。\r
+     * @return ペースト用Action\r
+     */\r
+    public static ClipboardAction pasteAction(){\r
+        return new ClipboardAction("ペースト", ACTION_PASTE);\r
+    }\r
+\r
+    /**\r
+     * 全選択用Actionの生成。\r
+     * @return 全選択用Action\r
+     */\r
+    public static ClipboardAction selectallAction(){\r
+        return new ClipboardAction("すべて選択", ACTION_SELALL);\r
+    }\r
+\r
+    /**\r
+     * コンストラクタ。\r
+     * @param name ポップアップメニュー名\r
+     * @param command アクションコマンド名\r
+     */\r
+    protected ClipboardAction(String name, String command){\r
+        super(name);\r
+        setActionCommand(command);\r
+        return;\r
+    }\r
+\r
+    /**\r
+     * アクションコマンド名を設定する。\r
+     * @param actionCommand アクションコマンド名\r
+     */\r
+    private void setActionCommand(String actionCommand){\r
+        putValue(Action.ACTION_COMMAND_KEY, actionCommand);\r
+        return;\r
+    }\r
+\r
+    /**\r
+     * アクションコマンド名を取得する。\r
+     * @return アクションコマンド名\r
+     */\r
+    protected String getActionCommand(){\r
+        Object value = getValue(Action.ACTION_COMMAND_KEY);\r
+        if( ! (value instanceof String) ) return null;\r
+\r
+        String command = (String) value;\r
+\r
+        return command;\r
+    }\r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     * アクションの受信によってクリップボード操作を行う。\r
+     * @param event {@inheritDoc}\r
+     */\r
+    public void actionPerformed(ActionEvent event){\r
+        JTextComponent textComp = getTextComponent(event);\r
+        if(textComp == null) return;\r
+\r
+        String command = getActionCommand();\r
+\r
+        if     (ACTION_CUT   .equals(command)) textComp.cut();\r
+        else if(ACTION_COPY  .equals(command)) textComp.copy();\r
+        else if(ACTION_PASTE .equals(command)) textComp.paste();\r
+        else if(ACTION_SELALL.equals(command)) textComp.selectAll();\r
+\r
+        return;\r
+    }\r
+\r
+    // TODO 文字列以外の物をペーストしたときに無視したい。\r
+}\r