1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.swing;
14
15 import java.awt.event.ActionEvent;
16
17 import javax.swing.AbstractAction;
18 import javax.swing.JPopupMenu;
19 import javax.swing.event.PopupMenuEvent;
20 import javax.swing.event.PopupMenuListener;
21 import javax.swing.text.JTextComponent;
22
23 import com.eviware.soapui.support.components.Undoable;
24
25 public final class JTextComponentPopupMenu extends JPopupMenu implements PopupMenuListener
26 {
27 private final JTextComponent textComponent;
28 private CutAction cutAction;
29 private CopyAction copyAction;
30 private PasteAction pasteAction;
31 private ClearAction clearAction;
32 private SelectAllAction selectAllAction;
33 private UndoAction undoAction;
34 private RedoAction redoAction;
35
36 public static JTextComponentPopupMenu add( JTextComponent textComponent )
37 {
38
39 if( textComponent.getComponentPopupMenu() instanceof JTextComponentPopupMenu )
40 return ( JTextComponentPopupMenu ) textComponent.getComponentPopupMenu();
41
42 JTextComponentPopupMenu popupMenu = new JTextComponentPopupMenu( textComponent );
43 textComponent.setComponentPopupMenu( popupMenu );
44 return popupMenu;
45 }
46
47 private JTextComponentPopupMenu(JTextComponent textComponent)
48 {
49 super( "Edit" );
50 this.textComponent = textComponent;
51
52 if( textComponent instanceof Undoable )
53 {
54 undoAction = new UndoAction();
55 add( undoAction );
56
57 redoAction = new RedoAction();
58 add( redoAction );
59
60 addSeparator();
61 }
62
63 cutAction = new CutAction();
64 add( cutAction );
65 copyAction = new CopyAction();
66 add( copyAction );
67 pasteAction = new PasteAction();
68 add( pasteAction );
69 clearAction = new ClearAction();
70 add( clearAction );
71 addSeparator();
72 selectAllAction = new SelectAllAction();
73 add( selectAllAction );
74
75 addPopupMenuListener( this );
76 }
77
78 private final class CutAction extends AbstractAction
79 {
80 public CutAction()
81 {
82 super( "Cut" );
83 }
84
85 public void actionPerformed( ActionEvent e )
86 {
87 textComponent.cut();
88 }
89 }
90
91 private final class CopyAction extends AbstractAction
92 {
93 public CopyAction()
94 {
95 super( "Copy" );
96 }
97
98 public void actionPerformed( ActionEvent e )
99 {
100 textComponent.copy();
101 }
102 }
103
104 private final class PasteAction extends AbstractAction
105 {
106 public PasteAction()
107 {
108 super( "Paste" );
109 }
110
111 public void actionPerformed( ActionEvent e )
112 {
113 textComponent.paste();
114 }
115 }
116
117 private final class ClearAction extends AbstractAction
118 {
119 public ClearAction()
120 {
121 super( "Clear" );
122 }
123
124 public void actionPerformed( ActionEvent e )
125 {
126 textComponent.setText( "" );
127 }
128 }
129
130 private final class SelectAllAction extends AbstractAction
131 {
132 public SelectAllAction()
133 {
134 super( "Select All" );
135 }
136
137 public void actionPerformed( ActionEvent e )
138 {
139 textComponent.selectAll();
140 }
141 }
142
143 private final class UndoAction extends AbstractAction
144 {
145 public UndoAction()
146 {
147 super( "Undo" );
148 }
149
150 public void actionPerformed( ActionEvent e )
151 {
152 ((Undoable)textComponent).undo();
153 }
154 }
155
156 private final class RedoAction extends AbstractAction
157 {
158 public RedoAction()
159 {
160 super( "Redo" );
161 }
162
163 public void actionPerformed( ActionEvent e )
164 {
165 ((Undoable)textComponent).redo();
166 }
167 }
168
169
170 public void popupMenuCanceled( PopupMenuEvent e )
171 {
172 }
173
174 public void popupMenuWillBecomeInvisible( PopupMenuEvent e )
175 {
176 }
177
178 public void popupMenuWillBecomeVisible( PopupMenuEvent e )
179 {
180 if( textComponent instanceof Undoable )
181 {
182 undoAction.setEnabled( ((Undoable)textComponent ).canUndo() );
183 redoAction.setEnabled( ((Undoable)textComponent ).canRedo() );
184 }
185
186 cutAction.setEnabled( textComponent.getSelectionEnd() != textComponent.getSelectionStart() );
187 copyAction.setEnabled( cutAction.isEnabled() );
188 clearAction.setEnabled( cutAction.isEnabled() );
189 selectAllAction.setEnabled( textComponent.getText().length() > 0 );
190 }
191 }