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.Action;
19 import javax.swing.JPopupMenu;
20 import javax.swing.event.PopupMenuEvent;
21 import javax.swing.event.PopupMenuListener;
22
23 import com.eviware.soapui.support.UISupport;
24 import com.eviware.soapui.support.xml.JXEditTextArea;
25
26 public final class JXEditAreaPopupMenu extends JPopupMenu implements PopupMenuListener
27 {
28 private final JXEditTextArea textComponent;
29 private CutAction cutAction;
30 private CopyAction copyAction;
31 private PasteAction pasteAction;
32 private ClearAction clearAction;
33 private SelectAllAction selectAllAction;
34 private UndoAction undoAction;
35 private RedoAction redoAction;
36
37 public static JXEditAreaPopupMenu add( JXEditTextArea textComponent )
38 {
39
40 if( textComponent.getRightClickPopup() instanceof JXEditAreaPopupMenu )
41 return ( JXEditAreaPopupMenu ) textComponent.getRightClickPopup();
42
43 JXEditAreaPopupMenu popupMenu = new JXEditAreaPopupMenu( textComponent );
44 textComponent.setRightClickPopup( popupMenu );
45 return popupMenu;
46 }
47
48 private JXEditAreaPopupMenu(JXEditTextArea textComponent)
49 {
50 super( "Edit" );
51 this.textComponent = textComponent;
52
53 undoAction = new UndoAction();
54 add( undoAction );
55
56 redoAction = new RedoAction();
57 add( redoAction );
58
59 addSeparator();
60
61 cutAction = new CutAction();
62 add( cutAction );
63 copyAction = new CopyAction();
64 add( copyAction );
65 pasteAction = new PasteAction();
66 add( pasteAction );
67 clearAction = new ClearAction();
68 add( clearAction );
69 addSeparator();
70 selectAllAction = new SelectAllAction();
71 add( selectAllAction );
72
73 addPopupMenuListener( this );
74 }
75
76 private final class CutAction extends AbstractAction
77 {
78 public CutAction()
79 {
80 super( "Cut" );
81 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu X" ));
82 }
83
84 public void actionPerformed( ActionEvent e )
85 {
86 textComponent.cut();
87 }
88 }
89
90 private final class CopyAction extends AbstractAction
91 {
92 public CopyAction()
93 {
94 super( "Copy" );
95 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu C" ));
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 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu V" ));
110 }
111
112 public void actionPerformed( ActionEvent e )
113 {
114 textComponent.paste();
115 }
116 }
117
118 private final class ClearAction extends AbstractAction
119 {
120 public ClearAction()
121 {
122 super( "Clear" );
123 }
124
125 public void actionPerformed( ActionEvent e )
126 {
127 textComponent.setText( "" );
128 }
129 }
130
131 private final class SelectAllAction extends AbstractAction
132 {
133 public SelectAllAction()
134 {
135 super( "Select All" );
136 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu A" ));
137 }
138
139 public void actionPerformed( ActionEvent e )
140 {
141 textComponent.selectAll();
142 }
143 }
144
145 private final class UndoAction extends AbstractAction
146 {
147 public UndoAction()
148 {
149 super( "Undo" );
150 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu Z" ));
151 }
152
153 public void actionPerformed( ActionEvent e )
154 {
155 textComponent.undo();
156 }
157 }
158
159 private final class RedoAction extends AbstractAction
160 {
161 public RedoAction()
162 {
163 super( "Redo" );
164 putValue( Action.ACCELERATOR_KEY, UISupport.getKeyStroke( "menu Y" ));
165 }
166
167 public void actionPerformed( ActionEvent e )
168 {
169 textComponent.redo();
170 }
171 }
172
173
174 public void popupMenuCanceled( PopupMenuEvent e )
175 {
176 }
177
178 public void popupMenuWillBecomeInvisible( PopupMenuEvent e )
179 {
180 }
181
182 public void popupMenuWillBecomeVisible( PopupMenuEvent e )
183 {
184 undoAction.setEnabled( textComponent.canUndo() );
185 redoAction.setEnabled( textComponent.canRedo() );
186
187 cutAction.setEnabled( textComponent.getSelectionEnd() != textComponent.getSelectionStart() );
188 copyAction.setEnabled( cutAction.isEnabled() );
189 clearAction.setEnabled( cutAction.isEnabled() );
190 selectAllAction.setEnabled( textComponent.getText().length() > 0 );
191 }
192 }