1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.action.swing;
14
15 import java.awt.event.ActionEvent;
16
17 import javax.swing.AbstractAction;
18 import javax.swing.Action;
19 import javax.swing.JButton;
20 import javax.swing.JMenu;
21 import javax.swing.JPopupMenu;
22
23 import com.eviware.soapui.support.actions.MarkerAction;
24 import com.eviware.soapui.support.components.JXToolBar;
25 import com.jgoodies.forms.builder.ButtonBarBuilder;
26
27 /***
28 * ActionList-related utilities
29 *
30 * @author Ole.Matzura
31 */
32
33 public class ActionSupport
34 {
35 public static JPopupMenu buildPopup( ActionList actions )
36 {
37 if( actions == null || actions.getActionCount() == 0 )
38 return null;
39
40 JPopupMenu popup = new JPopupMenu( actions.getLabel() );
41
42 return ActionSupport.addActions(actions, popup);
43 }
44
45 public static JMenu buildMenu( ActionList actions )
46 {
47 if( actions == null || actions.getActionCount() == 0 )
48 return null;
49
50 JMenu menu = new JMenu( actions.getLabel() );
51
52 return ActionSupport.addActions(actions, menu);
53 }
54
55 public static JPopupMenu addActions(ActionList actions, JPopupMenu popup)
56 {
57 if( actions == null || actions.getActionCount() == 0 )
58 return popup;
59
60 for (int i = 0; i < actions.getActionCount(); i++)
61 {
62 Action action = actions.getActionAt(i);
63 if( action instanceof MarkerAction )
64 continue;
65
66 if( action == ActionSupport.SEPARATOR_ACTION )
67 popup.addSeparator();
68 else if( action instanceof ActionSupport.ActionListAction )
69 {
70 ActionList actionList = ((ActionListAction)action).getActionList();
71 if( actionList == null || actionList.getActionCount() == 0 )
72 System.err.println( "null/empty ActionList in action " + action.getValue( Action.NAME ));
73 else
74 popup.add( buildMenu( actionList ));
75 }
76 else
77 popup.add( action );
78 }
79
80 return popup;
81 }
82
83 public static JMenu addActions(ActionList actions, JMenu menu)
84 {
85 if( actions == null || menu == null )
86 return menu;
87
88 for (int i = 0; i < actions.getActionCount(); i++)
89 {
90 Action action = actions.getActionAt(i);
91
92 if( action instanceof MarkerAction )
93 continue;
94
95 if( action == ActionSupport.SEPARATOR_ACTION )
96 menu.addSeparator();
97 else if( action instanceof ActionSupport.ActionListAction )
98 menu.add( buildMenu( ((ActionListAction)action).getActionList() ));
99 else
100 menu.add( action );
101 }
102
103 return menu;
104 }
105
106 public final static Action SEPARATOR_ACTION = new AbstractAction()
107 {
108 public void actionPerformed(ActionEvent e)
109 {
110 }
111 };
112
113 public static class ActionListAction extends AbstractAction
114 {
115 private final ActionList actionList;
116
117 public ActionListAction( ActionList actionList )
118 {
119 this.actionList = actionList;
120 }
121
122 public ActionList getActionList()
123 {
124 return actionList;
125 }
126
127 public void actionPerformed(ActionEvent e)
128 {
129 Action defaultAction = actionList.getDefaultAction();
130 if( defaultAction != null )
131 defaultAction.actionPerformed( e );
132 }
133 };
134
135 public static JPopupMenu insertActions(ActionList actions, JPopupMenu popup, int index)
136 {
137 for (int i = 0; i < actions.getActionCount(); i++)
138 {
139 Action action = actions.getActionAt(i);
140 if( action instanceof MarkerAction )
141 continue;
142
143 if( action == ActionSupport.SEPARATOR_ACTION )
144 popup.insert( new JPopupMenu.Separator(), index+i );
145 else if( action instanceof ActionSupport.ActionListAction )
146 popup.insert( buildMenu( ((ActionSupport.ActionListAction)action).getActionList() ), index+i );
147 else
148 popup.insert( action, index+i );
149 }
150
151 return popup;
152 }
153
154 public static void addActions( ActionList actionList, ButtonBarBuilder builder )
155 {
156 for( int c = 0; c < actionList.getActionCount(); c++ )
157 {
158 Action action = actionList.getActionAt( c );
159 if( action == SEPARATOR_ACTION )
160 {
161 builder.addUnrelatedGap();
162 }
163 else
164 {
165 if( c > 0 )
166 builder.addRelatedGap();
167
168 builder.addFixed( new JButton( action ));
169 }
170 }
171 }
172
173 public static void addActions( ActionList actionList, JXToolBar toolbar )
174 {
175 for( int c = 0; c < actionList.getActionCount(); c++ )
176 {
177 Action action = actionList.getActionAt( c );
178 if( action == SEPARATOR_ACTION )
179 {
180 toolbar.addUnrelatedGap();
181 }
182 else
183 {
184 if( c > 0 )
185 toolbar.addRelatedGap();
186
187 toolbar.addFixed( new JButton( action ));
188 }
189 }
190 }
191 }