Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / tools / smc / EditVertexCADToolContext.java @ 10626

History | View | Annotate | Download (13.4 KB)

1

    
2
//
3
// Vicente Caballero Navarro
4

    
5

    
6
package com.iver.cit.gvsig.gui.cad.tools.smc;
7

    
8
import java.awt.event.InputEvent;
9

    
10
import com.iver.andami.PluginServices;
11
import com.iver.cit.gvsig.gui.cad.tools.EditVertexCADTool;
12

    
13
public final class EditVertexCADToolContext
14
    extends statemap.FSMContext
15
{
16
//---------------------------------------------------------------
17
// Member methods.
18
//
19

    
20
    public EditVertexCADToolContext(EditVertexCADTool owner)
21
    {
22
        super();
23

    
24
        _owner = owner;
25
        setState(EditVertex.SelectVertexOrDelete);
26
        EditVertex.SelectVertexOrDelete.Entry(this);
27
    }
28

    
29
    public void addOption(String s)
30
    {
31
        _transition = "addOption";
32
        getState().addOption(this, s);
33
        _transition = "";
34
        return;
35
    }
36

    
37
    public void addPoint(double pointX, double pointY, InputEvent event)
38
    {
39
        _transition = "addPoint";
40
        getState().addPoint(this, pointX, pointY, event);
41
        _transition = "";
42
        return;
43
    }
44

    
45
    public void addValue(double d)
46
    {
47
        _transition = "addValue";
48
        getState().addValue(this, d);
49
        _transition = "";
50
        return;
51
    }
52

    
53
    public EditVertexCADToolState getState()
54
        throws statemap.StateUndefinedException
55
    {
56
        if (_state == null)
57
        {
58
            throw(
59
                new statemap.StateUndefinedException());
60
        }
61

    
62
        return ((EditVertexCADToolState) _state);
63
    }
64

    
65
    protected EditVertexCADTool getOwner()
66
    {
67
        return (_owner);
68
    }
69

    
70
//---------------------------------------------------------------
71
// Member data.
72
//
73

    
74
    transient private EditVertexCADTool _owner;
75

    
76
//---------------------------------------------------------------
77
// Inner classes.
78
//
79

    
80
    public static abstract class EditVertexCADToolState
81
        extends statemap.State
82
    {
83
    //-----------------------------------------------------------
84
    // Member methods.
85
    //
86

    
87
        protected EditVertexCADToolState(String name, int id)
88
        {
89
            super (name, id);
90
        }
91

    
92
        protected void Entry(EditVertexCADToolContext context) {}
93
        protected void Exit(EditVertexCADToolContext context) {}
94

    
95
        protected void addOption(EditVertexCADToolContext context, String s)
96
        {
97
            Default(context);
98
        }
99

    
100
        protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
101
        {
102
            Default(context);
103
        }
104

    
105
        protected void addValue(EditVertexCADToolContext context, double d)
106
        {
107
            Default(context);
108
        }
109

    
110
        protected void Default(EditVertexCADToolContext context)
111
        {
112
            throw (
113
                new statemap.TransitionUndefinedException(
114
                    "State: " +
115
                    context.getState().getName() +
116
                    ", Transition: " +
117
                    context.getTransition()));
118
        }
119

    
120
    //-----------------------------------------------------------
121
    // Member data.
122
    //
123
    }
124

    
125
    /* package */ static abstract class EditVertex
126
    {
127
    //-----------------------------------------------------------
128
    // Member methods.
129
    //
130

    
131
    //-----------------------------------------------------------
132
    // Member data.
133
    //
134

    
135
        //-------------------------------------------------------
136
        // Statics.
137
        //
138
        /* package */ static EditVertex_Default.EditVertex_SelectVertexOrDelete SelectVertexOrDelete;
139
        /* package */ static EditVertex_Default.EditVertex_AddVertex AddVertex;
140
        private static EditVertex_Default Default;
141

    
142
        static
143
        {
144
            SelectVertexOrDelete = new EditVertex_Default.EditVertex_SelectVertexOrDelete("EditVertex.SelectVertexOrDelete", 0);
145
            AddVertex = new EditVertex_Default.EditVertex_AddVertex("EditVertex.AddVertex", 1);
146
            Default = new EditVertex_Default("EditVertex.Default", -1);
147
        }
148

    
149
    }
150

    
151
    protected static class EditVertex_Default
152
        extends EditVertexCADToolState
153
    {
154
    //-----------------------------------------------------------
155
    // Member methods.
156
    //
157

    
158
        protected EditVertex_Default(String name, int id)
159
        {
160
            super (name, id);
161
        }
162

    
163
        protected void addOption(EditVertexCADToolContext context, String s)
164
        {
165
            EditVertexCADTool ctxt = context.getOwner();
166

    
167
            if (s.equals(PluginServices.getText(this,"cancel")))
168
            {
169
                boolean loopbackFlag =
170
                    context.getState().getName().equals(
171
                        EditVertex.SelectVertexOrDelete.getName());
172

    
173
                if (loopbackFlag == false)
174
                {
175
                    (context.getState()).Exit(context);
176
                }
177

    
178
                context.clearState();
179
                try
180
                {
181
                    ctxt.end();
182
                }
183
                finally
184
                {
185
                    context.setState(EditVertex.SelectVertexOrDelete);
186

    
187
                    if (loopbackFlag == false)
188
                    {
189
                        (context.getState()).Entry(context);
190
                    }
191

    
192
                }
193
            }
194
            else
195
            {
196
                boolean loopbackFlag =
197
                    context.getState().getName().equals(
198
                        EditVertex.SelectVertexOrDelete.getName());
199

    
200
                if (loopbackFlag == false)
201
                {
202
                    (context.getState()).Exit(context);
203
                }
204

    
205
                context.clearState();
206
                try
207
                {
208
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
209
                }
210
                finally
211
                {
212
                    context.setState(EditVertex.SelectVertexOrDelete);
213

    
214
                    if (loopbackFlag == false)
215
                    {
216
                        (context.getState()).Entry(context);
217
                    }
218

    
219
                }
220
            }
221

    
222
            return;
223
        }
224

    
225
        protected void addValue(EditVertexCADToolContext context, double d)
226
        {
227
            EditVertexCADTool ctxt = context.getOwner();
228

    
229
            boolean loopbackFlag =
230
                context.getState().getName().equals(
231
                    EditVertex.SelectVertexOrDelete.getName());
232

    
233
            if (loopbackFlag == false)
234
            {
235
                (context.getState()).Exit(context);
236
            }
237

    
238
            context.clearState();
239
            try
240
            {
241
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
242
            }
243
            finally
244
            {
245
                context.setState(EditVertex.SelectVertexOrDelete);
246

    
247
                if (loopbackFlag == false)
248
                {
249
                    (context.getState()).Entry(context);
250
                }
251

    
252
            }
253
            return;
254
        }
255

    
256
        protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
257
        {
258
            EditVertexCADTool ctxt = context.getOwner();
259

    
260
            boolean loopbackFlag =
261
                context.getState().getName().equals(
262
                    EditVertex.SelectVertexOrDelete.getName());
263

    
264
            if (loopbackFlag == false)
265
            {
266
                (context.getState()).Exit(context);
267
            }
268

    
269
            context.clearState();
270
            try
271
            {
272
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
273
            }
274
            finally
275
            {
276
                context.setState(EditVertex.SelectVertexOrDelete);
277

    
278
                if (loopbackFlag == false)
279
                {
280
                    (context.getState()).Entry(context);
281
                }
282

    
283
            }
284
            return;
285
        }
286

    
287
    //-----------------------------------------------------------
288
    // Inner classse.
289
    //
290

    
291

    
292
        private static final class EditVertex_SelectVertexOrDelete
293
            extends EditVertex_Default
294
        {
295
        //-------------------------------------------------------
296
        // Member methods.
297
        //
298

    
299
            private EditVertex_SelectVertexOrDelete(String name, int id)
300
            {
301
                super (name, id);
302
            }
303

    
304
            protected void Entry(EditVertexCADToolContext context)
305
            {
306
                EditVertexCADTool ctxt = context.getOwner();
307

    
308
                ctxt.selection();
309
                ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
310
                    PluginServices.getText(this,"next")+
311
                    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
312
                     PluginServices.getText(this,"previous")+
313
                    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
314
                     PluginServices.getText(this,"add")+
315
                    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
316
                    PluginServices.getText(this,"cad.or")+" "+
317
                     PluginServices.getText(this,"del")+
318
                    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
319
                ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
320
                return;
321
            }
322

    
323
            protected void addOption(EditVertexCADToolContext context, String s)
324
            {
325
                EditVertexCADTool ctxt = context.getOwner();
326

    
327
                if (s.equals("i") || s.equals("I") || s.equals(PluginServices.getText(this,"add")))
328
                {
329

    
330
                    (context.getState()).Exit(context);
331
                    context.clearState();
332
                    try
333
                    {
334
                        ctxt.setQuestion(PluginServices.getText(this,"add_vertex"));
335
                        ctxt.setDescription(new String[]{"cancel"});
336
                        ctxt.addOption(s);
337
                    }
338
                    finally
339
                    {
340
                        context.setState(EditVertex.AddVertex);
341
                        (context.getState()).Entry(context);
342
                    }
343
                }
344
                else if (!s.equals("i") && !s.equals("I") && !s.equals(PluginServices.getText(this,"add")))
345
                {
346
                    EditVertexCADToolState endState = context.getState();
347

    
348
                    context.clearState();
349
                    try
350
                    {
351
                        ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
352
                                    PluginServices.getText(this,"next")+
353
                                    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
354
                                     PluginServices.getText(this,"previous")+
355
                                    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
356
                                     PluginServices.getText(this,"add")+
357
                                    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
358
                                    PluginServices.getText(this,"cad.or")+" "+
359
                                     PluginServices.getText(this,"del")+
360
                                    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
361
                        ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
362
                        ctxt.addOption(s);
363
                    }
364
                    finally
365
                    {
366
                        context.setState(endState);
367
                    }
368
                }                else
369
                {
370
                    super.addOption(context, s);
371
                }
372

    
373
                return;
374
            }
375

    
376
            protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
377
            {
378
                EditVertexCADTool ctxt = context.getOwner();
379

    
380
                EditVertexCADToolState endState = context.getState();
381

    
382
                context.clearState();
383
                try
384
                {
385
                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
386
                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
387
                    ctxt.addPoint(pointX, pointY, event);
388
                }
389
                finally
390
                {
391
                    context.setState(endState);
392
                }
393
                return;
394
            }
395

    
396
        //-------------------------------------------------------
397
        // Member data.
398
        //
399
        }
400

    
401
        private static final class EditVertex_AddVertex
402
            extends EditVertex_Default
403
        {
404
        //-------------------------------------------------------
405
        // Member methods.
406
        //
407

    
408
            private EditVertex_AddVertex(String name, int id)
409
            {
410
                super (name, id);
411
            }
412

    
413
            protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
414
            {
415
                EditVertexCADTool ctxt = context.getOwner();
416

    
417

    
418
                (context.getState()).Exit(context);
419
                context.clearState();
420
                try
421
                {
422
                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
423
                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
424
                    ctxt.addPoint(pointX, pointY, event);
425
                }
426
                finally
427
                {
428
                    context.setState(EditVertex.SelectVertexOrDelete);
429
                    (context.getState()).Entry(context);
430
                }
431
                return;
432
            }
433

    
434
        //-------------------------------------------------------
435
        // Member data.
436
        //
437
        }
438

    
439
    //-----------------------------------------------------------
440
    // Member data.
441
    //
442
    }
443
}