-/*\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 アクセス権チェックによるポップアップメニュー変更
+}