1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.jguiraffe.gui.platform.swing.builder.event;
17
18 import java.awt.event.ActionListener;
19 import java.awt.event.FocusListener;
20 import java.awt.event.MouseListener;
21 import java.util.EventListener;
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import net.sf.jguiraffe.gui.builder.event.FormEventManager;
26 import net.sf.jguiraffe.gui.builder.event.FormListenerType;
27 import net.sf.jguiraffe.gui.builder.event.PlatformEventManager;
28 import net.sf.jguiraffe.gui.forms.ComponentHandler;
29
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public class SwingEventManager implements PlatformEventManager
64 {
65
66 private final Log log = LogFactory.getLog(getClass());
67
68
69 private final Map<FormListenerType, Map<String, EventListener>> registeredListeners;
70
71
72
73
74 public SwingEventManager()
75 {
76 registeredListeners = new HashMap<FormListenerType, Map<String, EventListener>>();
77 for (FormListenerType type : FormListenerType.values())
78 {
79 Map<String, EventListener> typeListeners = new HashMap<String, EventListener>();
80 registeredListeners.put(type, typeListeners);
81 }
82 }
83
84
85
86
87
88
89
90
91
92
93 public void registerListener(String name, ComponentHandler<?> handler,
94 FormEventManager eventManager, FormListenerType type)
95 {
96 if (type == null)
97 {
98 throw new IllegalArgumentException(
99 "Listener type must not be null!");
100 }
101 SwingEventSource source = obtainSource(handler);
102 if (source == null)
103 {
104 return;
105 }
106 EventListener listener = null;
107
108 switch (type)
109 {
110 case ACTION:
111 ActionListener al = new ActionEventAdapter(eventManager, handler,
112 name);
113 source.addActionListener(al);
114 listener = al;
115 break;
116
117 case CHANGE:
118 ChangeListener cl = new ChangeEventAdapter(eventManager, handler,
119 name);
120 source.addChangeListener(cl);
121 listener = cl;
122 break;
123
124 case FOCUS:
125 FocusListener fl = new FocusEventAdapter(eventManager, handler,
126 name);
127 source.addFocusListener(fl);
128 listener = fl;
129 break;
130
131 default:
132 MouseListener ml = new MouseEventAdapter(eventManager, handler,
133 name);
134 source.addMouseListener(ml);
135 listener = ml;
136 break;
137 }
138
139 registeredListeners.get(type).put(name, listener);
140 }
141
142
143
144
145
146
147
148
149
150 public void unregisterListener(String name, ComponentHandler<?> handler,
151 FormEventManager eventManager, FormListenerType type)
152 {
153 if (type == null)
154 {
155 throw new IllegalArgumentException(
156 "Listener type must not be null!");
157 }
158 SwingEventSource source = obtainSource(handler);
159 if (source == null)
160 {
161 return;
162 }
163 EventListener l = registeredListeners.get(type).remove(name);
164 assert l != null : "Try to remove non existing listener!";
165
166 switch (type)
167 {
168 case ACTION:
169 source.removeActionListener((ActionListener) l);
170 break;
171 case CHANGE:
172 source.removeChangeListener((ChangeListener) l);
173 break;
174 case FOCUS:
175 source.removeFocusListener((FocusListener) l);
176 break;
177 default:
178 source.removeMouseListener((MouseListener) l);
179 break;
180 }
181 }
182
183
184
185
186
187
188
189
190
191 private SwingEventSource obtainSource(ComponentHandler<?> handler)
192 {
193 if (handler instanceof SwingEventSource)
194 {
195 return (SwingEventSource) handler;
196 }
197
198 if (log.isDebugEnabled())
199 {
200 log.debug("Component handler is no SwingEventSource: " + handler
201 + ". Ignoring.");
202 }
203 return null;
204 }
205 }