OSDN Git Service

改行コード指定
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / TextPopup.java
index 28d338d..c912e29 100644 (file)
-/*\r
- * テキストコンポーネント用ポップアップメニュー\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2008 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf;\r
-\r
-import java.awt.Component;\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import javax.swing.Action;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.text.Document;\r
-import javax.swing.text.JTextComponent;\r
-\r
-/**\r
- * テキストコンポーネント用ポップアップメニュー。\r
- * 各種クリップボード操作(カット、コピー、ペースト、etc.)を備える。\r
- */\r
-@SuppressWarnings("serial")\r
-public class TextPopup extends JPopupMenu implements PropertyChangeListener{\r
-\r
-    /** プロパティ変更イベントキー。 */\r
-    private static final String PROPERTY_UI = "UI";\r
-\r
-    private final Action cutAction    = ClipboardAction.cutAction();\r
-    private final Action copyAction   = ClipboardAction.copyAction();\r
-    private final Action pasteAction  = ClipboardAction.pasteAction();\r
-    private final Action selallAction = ClipboardAction.selectallAction();\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     */\r
-    public TextPopup(){\r
-        super();\r
-\r
-        buildMenu();\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * メニューの構成を作る。\r
-     */\r
-    private void buildMenu(){\r
-        add(this.cutAction);\r
-        add(this.copyAction);\r
-        add(this.pasteAction);\r
-\r
-        addSeparator();\r
-\r
-        add(this.selallAction);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * テキストコンポーネントに選択中文字列があるか判定する。\r
-     * @param textComp テキストコンポーネント\r
-     * @return 選択中文字列があればtrue\r
-     */\r
-    protected boolean hasSelectedContent(JTextComponent textComp){\r
-        int selStart = textComp.getSelectionStart();\r
-        int selEnd   = textComp.getSelectionEnd();\r
-\r
-        boolean result;\r
-        if(selStart == selEnd) result = false;\r
-        else                   result = true;\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * テキストコンポーネントに文字列があるか判定する。\r
-     * @param textComp テキストコンポーネント\r
-     * @return 文字列があればtrue\r
-     */\r
-    protected boolean hasContent(JTextComponent textComp){\r
-        Document document = textComp.getDocument();\r
-        int docLength = document.getLength();\r
-        if(docLength <= 0) return false;\r
-        return true;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * ついでにL&F変更監視機構を仕込む。\r
-     * @param invoker {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void setInvoker(Component invoker){\r
-        Component old = getInvoker();\r
-        if(old != null){\r
-            old.removePropertyChangeListener(this);\r
-        }\r
-\r
-        super.setInvoker(invoker);\r
-\r
-        if(invoker != null){\r
-            invoker.addPropertyChangeListener(PROPERTY_UI, this);\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * 文字列選択状況によって一部のポップアップメニューをマスクする。\r
-     * @param invoker {@inheritDoc}\r
-     * @param x {@inheritDoc}\r
-     * @param y {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void show(Component invoker, int x, int y){\r
-        if( ! (invoker instanceof JTextComponent) ) return;\r
-        JTextComponent textComp = (JTextComponent) invoker;\r
-\r
-        boolean textSelected = hasSelectedContent(textComp);\r
-        this.cutAction .setEnabled(textSelected);\r
-        this.copyAction.setEnabled(textSelected);\r
-\r
-        if( ! textComp.isEditable() ){\r
-            this.cutAction   .setEnabled(false);\r
-            this.pasteAction .setEnabled(false);\r
-        }\r
-\r
-        if(hasContent(textComp)){\r
-            this.selallAction.setEnabled(true);\r
-        }else{\r
-            this.selallAction.setEnabled(false);\r
-        }\r
-\r
-        super.show(invoker, x, y);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * ポップアップ呼び出し元を監視してL&Fを変更する。\r
-     * @param event {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void propertyChange(PropertyChangeEvent event){\r
-        String propertyName = event.getPropertyName();\r
-        if(PROPERTY_UI.equals(propertyName)) updateUI();\r
-        return;\r
-    }\r
-\r
-    // TODO アクセス権チェックによるポップアップメニュー変更\r
-}\r
+/*
+ * テキストコンポーネント用ポップアップメニュー
+ *
+ * License : The MIT License
+ * Copyright(c) 2008 olyutorskii
+ */
+
+package jp.sourceforge.jindolf;
+
+import java.awt.Component;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import javax.swing.Action;
+import javax.swing.JPopupMenu;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+
+/**
+ * テキストコンポーネント用ポップアップメニュー。
+ * 各種クリップボード操作(カット、コピー、ペースト、etc.)を備える。
+ */
+@SuppressWarnings("serial")
+public class TextPopup extends JPopupMenu implements PropertyChangeListener{
+
+    /** プロパティ変更イベントキー。 */
+    private static final String PROPERTY_UI = "UI";
+
+    private final Action cutAction    = ClipboardAction.cutAction();
+    private final Action copyAction   = ClipboardAction.copyAction();
+    private final Action pasteAction  = ClipboardAction.pasteAction();
+    private final Action selallAction = ClipboardAction.selectallAction();
+
+    /**
+     * コンストラクタ。
+     */
+    public TextPopup(){
+        super();
+
+        buildMenu();
+
+        return;
+    }
+
+    /**
+     * メニューの構成を作る。
+     */
+    private void buildMenu(){
+        add(this.cutAction);
+        add(this.copyAction);
+        add(this.pasteAction);
+
+        addSeparator();
+
+        add(this.selallAction);
+
+        return;
+    }
+
+    /**
+     * テキストコンポーネントに選択中文字列があるか判定する。
+     * @param textComp テキストコンポーネント
+     * @return 選択中文字列があればtrue
+     */
+    protected boolean hasSelectedContent(JTextComponent textComp){
+        int selStart = textComp.getSelectionStart();
+        int selEnd   = textComp.getSelectionEnd();
+
+        boolean result;
+        if(selStart == selEnd) result = false;
+        else                   result = true;
+
+        return result;
+    }
+
+    /**
+     * テキストコンポーネントに文字列があるか判定する。
+     * @param textComp テキストコンポーネント
+     * @return 文字列があればtrue
+     */
+    protected boolean hasContent(JTextComponent textComp){
+        Document document = textComp.getDocument();
+        int docLength = document.getLength();
+        if(docLength <= 0) return false;
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     * ついでにL&F変更監視機構を仕込む。
+     * @param invoker {@inheritDoc}
+     */
+    @Override
+    public void setInvoker(Component invoker){
+        Component old = getInvoker();
+        if(old != null){
+            old.removePropertyChangeListener(this);
+        }
+
+        super.setInvoker(invoker);
+
+        if(invoker != null){
+            invoker.addPropertyChangeListener(PROPERTY_UI, this);
+        }
+
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * 文字列選択状況によって一部のポップアップメニューをマスクする。
+     * @param invoker {@inheritDoc}
+     * @param x {@inheritDoc}
+     * @param y {@inheritDoc}
+     */
+    @Override
+    public void show(Component invoker, int x, int y){
+        if( ! (invoker instanceof JTextComponent) ) return;
+        JTextComponent textComp = (JTextComponent) invoker;
+
+        boolean textSelected = hasSelectedContent(textComp);
+        this.cutAction .setEnabled(textSelected);
+        this.copyAction.setEnabled(textSelected);
+
+        if( ! textComp.isEditable() ){
+            this.cutAction   .setEnabled(false);
+            this.pasteAction .setEnabled(false);
+        }
+
+        if(hasContent(textComp)){
+            this.selallAction.setEnabled(true);
+        }else{
+            this.selallAction.setEnabled(false);
+        }
+
+        super.show(invoker, x, y);
+
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * ポップアップ呼び出し元を監視してL&Fを変更する。
+     * @param event {@inheritDoc}
+     */
+    @Override
+    public void propertyChange(PropertyChangeEvent event){
+        String propertyName = event.getPropertyName();
+        if(PROPERTY_UI.equals(propertyName)) updateUI();
+        return;
+    }
+
+    // TODO アクセス権チェックによるポップアップメニュー変更
+}