root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / tools / smc / PolylineCADToolContext.java @ 5184
History | View | Annotate | Download (13.3 KB)
1 | 3766 | caballero | |
---|---|---|---|
2 | //
|
||
3 | // Vicente Caballero Navarro
|
||
4 | |||
5 | |||
6 | package com.iver.cit.gvsig.gui.cad.tools.smc; |
||
7 | |||
8 | import com.iver.cit.gvsig.gui.cad.tools.PolylineCADTool; |
||
9 | 4324 | caballero | import java.awt.event.InputEvent; |
10 | 4584 | caballero | import com.iver.andami.PluginServices; |
11 | 3766 | caballero | |
12 | public final class PolylineCADToolContext |
||
13 | extends statemap.FSMContext
|
||
14 | { |
||
15 | //---------------------------------------------------------------
|
||
16 | // Member methods.
|
||
17 | //
|
||
18 | |||
19 | public PolylineCADToolContext(PolylineCADTool owner)
|
||
20 | { |
||
21 | super();
|
||
22 | |||
23 | _owner = owner; |
||
24 | 3978 | caballero | setState(Polyline.FirstPoint); |
25 | Polyline.FirstPoint.Entry(this);
|
||
26 | 3766 | caballero | } |
27 | |||
28 | 3832 | caballero | public void addOption(String s) |
29 | 3766 | caballero | { |
30 | _transition = "addOption";
|
||
31 | 3832 | caballero | getState().addOption(this, s);
|
32 | 3766 | caballero | _transition = "";
|
33 | return;
|
||
34 | } |
||
35 | |||
36 | 4324 | caballero | public void addPoint(double pointX, double pointY, InputEvent event) |
37 | 3766 | caballero | { |
38 | _transition = "addPoint";
|
||
39 | 4324 | caballero | getState().addPoint(this, pointX, pointY, event);
|
40 | 3766 | caballero | _transition = "";
|
41 | return;
|
||
42 | } |
||
43 | |||
44 | public PolylineCADToolState getState()
|
||
45 | throws statemap.StateUndefinedException
|
||
46 | { |
||
47 | if (_state == null) |
||
48 | { |
||
49 | throw(
|
||
50 | new statemap.StateUndefinedException());
|
||
51 | } |
||
52 | |||
53 | return ((PolylineCADToolState) _state);
|
||
54 | } |
||
55 | |||
56 | protected PolylineCADTool getOwner()
|
||
57 | { |
||
58 | return (_owner);
|
||
59 | } |
||
60 | |||
61 | //---------------------------------------------------------------
|
||
62 | // Member data.
|
||
63 | //
|
||
64 | |||
65 | transient private PolylineCADTool _owner; |
||
66 | |||
67 | //---------------------------------------------------------------
|
||
68 | // Inner classes.
|
||
69 | //
|
||
70 | |||
71 | public static abstract class PolylineCADToolState |
||
72 | extends statemap.State
|
||
73 | { |
||
74 | //-----------------------------------------------------------
|
||
75 | // Member methods.
|
||
76 | //
|
||
77 | |||
78 | protected PolylineCADToolState(String name, int id) |
||
79 | { |
||
80 | super (name, id);
|
||
81 | } |
||
82 | |||
83 | protected void Entry(PolylineCADToolContext context) {} |
||
84 | protected void Exit(PolylineCADToolContext context) {} |
||
85 | |||
86 | 3832 | caballero | protected void addOption(PolylineCADToolContext context, String s) |
87 | 3766 | caballero | { |
88 | Default(context); |
||
89 | } |
||
90 | |||
91 | 4324 | caballero | protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event) |
92 | 3766 | caballero | { |
93 | Default(context); |
||
94 | } |
||
95 | |||
96 | protected void Default(PolylineCADToolContext context) |
||
97 | { |
||
98 | throw (
|
||
99 | new statemap.TransitionUndefinedException(
|
||
100 | "State: " +
|
||
101 | context.getState().getName() + |
||
102 | ", Transition: " +
|
||
103 | context.getTransition())); |
||
104 | } |
||
105 | |||
106 | //-----------------------------------------------------------
|
||
107 | // Member data.
|
||
108 | //
|
||
109 | } |
||
110 | |||
111 | 3978 | caballero | /* package */ static abstract class Polyline |
112 | 3766 | caballero | { |
113 | //-----------------------------------------------------------
|
||
114 | // Member methods.
|
||
115 | //
|
||
116 | |||
117 | //-----------------------------------------------------------
|
||
118 | // Member data.
|
||
119 | //
|
||
120 | |||
121 | //-------------------------------------------------------
|
||
122 | // Statics.
|
||
123 | //
|
||
124 | 3978 | caballero | /* package */ static Polyline_Default.Polyline_FirstPoint FirstPoint; |
125 | /* package */ static Polyline_Default.Polyline_NextPointOrArcOrClose NextPointOrArcOrClose; |
||
126 | /* package */ static Polyline_Default.Polyline_NextPointOrLineOrClose NextPointOrLineOrClose; |
||
127 | private static Polyline_Default Default; |
||
128 | 3766 | caballero | |
129 | static
|
||
130 | { |
||
131 | 3978 | caballero | FirstPoint = new Polyline_Default.Polyline_FirstPoint("Polyline.FirstPoint", 0); |
132 | NextPointOrArcOrClose = new Polyline_Default.Polyline_NextPointOrArcOrClose("Polyline.NextPointOrArcOrClose", 1); |
||
133 | NextPointOrLineOrClose = new Polyline_Default.Polyline_NextPointOrLineOrClose("Polyline.NextPointOrLineOrClose", 2); |
||
134 | Default = new Polyline_Default("Polyline.Default", -1); |
||
135 | 3766 | caballero | } |
136 | |||
137 | } |
||
138 | |||
139 | 3978 | caballero | protected static class Polyline_Default |
140 | 3766 | caballero | extends PolylineCADToolState
|
141 | { |
||
142 | //-----------------------------------------------------------
|
||
143 | // Member methods.
|
||
144 | //
|
||
145 | |||
146 | 3978 | caballero | protected Polyline_Default(String name, int id) |
147 | 3766 | caballero | { |
148 | super (name, id);
|
||
149 | } |
||
150 | |||
151 | 3883 | caballero | protected void addOption(PolylineCADToolContext context, String s) |
152 | { |
||
153 | PolylineCADTool ctxt = context.getOwner(); |
||
154 | |||
155 | 4584 | caballero | if (s.equals(PluginServices.getText(this,"cancel"))) |
156 | 3883 | caballero | { |
157 | boolean loopbackFlag =
|
||
158 | context.getState().getName().equals( |
||
159 | 3978 | caballero | Polyline.FirstPoint.getName()); |
160 | 3883 | caballero | |
161 | if (loopbackFlag == false) |
||
162 | { |
||
163 | (context.getState()).Exit(context); |
||
164 | } |
||
165 | |||
166 | context.clearState(); |
||
167 | try
|
||
168 | { |
||
169 | ctxt.cancel(); |
||
170 | } |
||
171 | finally
|
||
172 | { |
||
173 | 3978 | caballero | context.setState(Polyline.FirstPoint); |
174 | 3883 | caballero | |
175 | if (loopbackFlag == false) |
||
176 | { |
||
177 | (context.getState()).Entry(context); |
||
178 | } |
||
179 | |||
180 | } |
||
181 | } |
||
182 | 4002 | fjp | else if (s.equals("")) |
183 | 3883 | caballero | { |
184 | 4002 | fjp | boolean loopbackFlag =
|
185 | context.getState().getName().equals( |
||
186 | Polyline.FirstPoint.getName()); |
||
187 | |||
188 | if (loopbackFlag == false) |
||
189 | { |
||
190 | (context.getState()).Exit(context); |
||
191 | } |
||
192 | |||
193 | context.clearState(); |
||
194 | try
|
||
195 | { |
||
196 | ctxt.endGeometry(); |
||
197 | } |
||
198 | finally
|
||
199 | { |
||
200 | context.setState(Polyline.FirstPoint); |
||
201 | |||
202 | if (loopbackFlag == false) |
||
203 | { |
||
204 | (context.getState()).Entry(context); |
||
205 | } |
||
206 | |||
207 | } |
||
208 | } else
|
||
209 | { |
||
210 | 3883 | caballero | super.addOption(context, s);
|
211 | } |
||
212 | |||
213 | return;
|
||
214 | } |
||
215 | |||
216 | 3766 | caballero | //-----------------------------------------------------------
|
217 | // Inner classse.
|
||
218 | //
|
||
219 | |||
220 | |||
221 | 3978 | caballero | private static final class Polyline_FirstPoint |
222 | extends Polyline_Default
|
||
223 | 3766 | caballero | { |
224 | //-------------------------------------------------------
|
||
225 | // Member methods.
|
||
226 | //
|
||
227 | |||
228 | 3978 | caballero | private Polyline_FirstPoint(String name, int id) |
229 | 3766 | caballero | { |
230 | super (name, id);
|
||
231 | } |
||
232 | |||
233 | protected void Entry(PolylineCADToolContext context) |
||
234 | { |
||
235 | PolylineCADTool ctxt = context.getOwner(); |
||
236 | |||
237 | 4892 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_first_point")); |
238 | 4584 | caballero | ctxt.setDescription(new String[]{"cancel"}); |
239 | 3766 | caballero | return;
|
240 | } |
||
241 | |||
242 | 4324 | caballero | protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event) |
243 | 3766 | caballero | { |
244 | PolylineCADTool ctxt = context.getOwner(); |
||
245 | |||
246 | |||
247 | (context.getState()).Exit(context); |
||
248 | context.clearState(); |
||
249 | try
|
||
250 | { |
||
251 | 4584 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close")); |
252 | 5172 | caballero | ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"}); |
253 | 4365 | caballero | ctxt.addPoint(pointX, pointY, event); |
254 | 3766 | caballero | } |
255 | finally
|
||
256 | { |
||
257 | 3978 | caballero | context.setState(Polyline.NextPointOrArcOrClose); |
258 | 3766 | caballero | (context.getState()).Entry(context); |
259 | } |
||
260 | return;
|
||
261 | } |
||
262 | |||
263 | //-------------------------------------------------------
|
||
264 | // Member data.
|
||
265 | //
|
||
266 | } |
||
267 | |||
268 | 3978 | caballero | private static final class Polyline_NextPointOrArcOrClose |
269 | extends Polyline_Default
|
||
270 | 3766 | caballero | { |
271 | //-------------------------------------------------------
|
||
272 | // Member methods.
|
||
273 | //
|
||
274 | |||
275 | 3978 | caballero | private Polyline_NextPointOrArcOrClose(String name, int id) |
276 | 3766 | caballero | { |
277 | super (name, id);
|
||
278 | } |
||
279 | |||
280 | 3832 | caballero | protected void addOption(PolylineCADToolContext context, String s) |
281 | 3766 | caballero | { |
282 | PolylineCADTool ctxt = context.getOwner(); |
||
283 | |||
284 | 5172 | caballero | if (s.equals("A") || s.equals("a") || s.equals(PluginServices.getText(this,"inter_arc"))) |
285 | 3766 | caballero | { |
286 | |||
287 | (context.getState()).Exit(context); |
||
288 | context.clearState(); |
||
289 | try
|
||
290 | { |
||
291 | 4584 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_line_or_close")); |
292 | 5172 | caballero | ctxt.setDescription(new String[]{"inter_line", "close", "cancel"}); |
293 | 3832 | caballero | ctxt.addOption(s); |
294 | 3766 | caballero | } |
295 | finally
|
||
296 | { |
||
297 | 3978 | caballero | context.setState(Polyline.NextPointOrLineOrClose); |
298 | 3766 | caballero | (context.getState()).Entry(context); |
299 | } |
||
300 | } |
||
301 | 4584 | caballero | else if (s.equals("C") || s.equals("c") || s.equals(PluginServices.getText(this,"close"))) |
302 | 3766 | caballero | { |
303 | |||
304 | (context.getState()).Exit(context); |
||
305 | context.clearState(); |
||
306 | try
|
||
307 | { |
||
308 | 3832 | caballero | ctxt.addOption(s); |
309 | 3883 | caballero | ctxt.closeGeometry(); |
310 | ctxt.endGeometry(); |
||
311 | 3766 | caballero | ctxt.end(); |
312 | } |
||
313 | finally
|
||
314 | { |
||
315 | 3978 | caballero | context.setState(Polyline.FirstPoint); |
316 | 3766 | caballero | (context.getState()).Entry(context); |
317 | } |
||
318 | } else
|
||
319 | { |
||
320 | 3832 | caballero | super.addOption(context, s);
|
321 | 3766 | caballero | } |
322 | |||
323 | return;
|
||
324 | } |
||
325 | |||
326 | 4324 | caballero | protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event) |
327 | 3766 | caballero | { |
328 | PolylineCADTool ctxt = context.getOwner(); |
||
329 | |||
330 | PolylineCADToolState endState = context.getState(); |
||
331 | |||
332 | context.clearState(); |
||
333 | try
|
||
334 | { |
||
335 | 4584 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close")); |
336 | 5172 | caballero | ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"}); |
337 | 4365 | caballero | ctxt.addPoint(pointX, pointY, event); |
338 | 3766 | caballero | } |
339 | finally
|
||
340 | { |
||
341 | context.setState(endState); |
||
342 | } |
||
343 | return;
|
||
344 | } |
||
345 | |||
346 | //-------------------------------------------------------
|
||
347 | // Member data.
|
||
348 | //
|
||
349 | } |
||
350 | |||
351 | 3978 | caballero | private static final class Polyline_NextPointOrLineOrClose |
352 | extends Polyline_Default
|
||
353 | 3766 | caballero | { |
354 | //-------------------------------------------------------
|
||
355 | // Member methods.
|
||
356 | //
|
||
357 | |||
358 | 3978 | caballero | private Polyline_NextPointOrLineOrClose(String name, int id) |
359 | 3766 | caballero | { |
360 | super (name, id);
|
||
361 | } |
||
362 | |||
363 | 3832 | caballero | protected void addOption(PolylineCADToolContext context, String s) |
364 | 3766 | caballero | { |
365 | PolylineCADTool ctxt = context.getOwner(); |
||
366 | |||
367 | 5172 | caballero | if (s.equals("N") || s.equals("n") || s.equals(PluginServices.getText(this,"inter_line"))) |
368 | 3766 | caballero | { |
369 | |||
370 | (context.getState()).Exit(context); |
||
371 | context.clearState(); |
||
372 | try
|
||
373 | { |
||
374 | 4584 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_arc_or_close")); |
375 | 5172 | caballero | ctxt.setDescription(new String[]{"inter_arc", "close", "cancel"}); |
376 | 3832 | caballero | ctxt.addOption(s); |
377 | 3766 | caballero | } |
378 | finally
|
||
379 | { |
||
380 | 3978 | caballero | context.setState(Polyline.NextPointOrArcOrClose); |
381 | 3766 | caballero | (context.getState()).Entry(context); |
382 | } |
||
383 | } |
||
384 | 4584 | caballero | else if (s.equals("C") || s.equals("c") || s.equals(PluginServices.getText(this,"close"))) |
385 | 3766 | caballero | { |
386 | |||
387 | (context.getState()).Exit(context); |
||
388 | context.clearState(); |
||
389 | try
|
||
390 | { |
||
391 | 3832 | caballero | ctxt.addOption(s); |
392 | 3883 | caballero | ctxt.closeGeometry(); |
393 | ctxt.endGeometry(); |
||
394 | 3766 | caballero | ctxt.end(); |
395 | } |
||
396 | finally
|
||
397 | { |
||
398 | 3978 | caballero | context.setState(Polyline.FirstPoint); |
399 | 3766 | caballero | (context.getState()).Entry(context); |
400 | } |
||
401 | } else
|
||
402 | { |
||
403 | 3832 | caballero | super.addOption(context, s);
|
404 | 3766 | caballero | } |
405 | |||
406 | return;
|
||
407 | } |
||
408 | |||
409 | 4324 | caballero | protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event) |
410 | 3766 | caballero | { |
411 | PolylineCADTool ctxt = context.getOwner(); |
||
412 | |||
413 | PolylineCADToolState endState = context.getState(); |
||
414 | |||
415 | context.clearState(); |
||
416 | try
|
||
417 | { |
||
418 | 4584 | caballero | ctxt.setQuestion(PluginServices.getText(this,"insert_next_point_line_or_close")); |
419 | 5172 | caballero | ctxt.setDescription(new String[]{"inter_line", "close", "cancel"}); |
420 | 4365 | caballero | ctxt.addPoint(pointX, pointY, event); |
421 | 3766 | caballero | } |
422 | finally
|
||
423 | { |
||
424 | context.setState(endState); |
||
425 | } |
||
426 | return;
|
||
427 | } |
||
428 | |||
429 | //-------------------------------------------------------
|
||
430 | // Member data.
|
||
431 | //
|
||
432 | } |
||
433 | |||
434 | //-----------------------------------------------------------
|
||
435 | // Member data.
|
||
436 | //
|
||
437 | } |
||
438 | } |