Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extEditing / src / com / iver / cit / gvsig / gui / cad / tools / smc / SymmetryCADToolContext.java @ 26243

History | View | Annotate | Download (11.8 KB)

1

    
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.SymmetryCADTool;
9
import java.awt.event.InputEvent;
10
import com.iver.andami.PluginServices;
11

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

    
19
    public SymmetryCADToolContext(SymmetryCADTool owner)
20
    {
21
        super();
22

    
23
        _owner = owner;
24
        setState(Symmetry.FirstPoint);
25
        Symmetry.FirstPoint.Entry(this);
26
    }
27

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

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

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

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

    
61
        return ((SymmetryCADToolState) _state);
62
    }
63

    
64
    protected SymmetryCADTool getOwner()
65
    {
66
        return (_owner);
67
    }
68

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

    
73
    transient private SymmetryCADTool _owner;
74

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

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

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

    
91
        protected void Entry(SymmetryCADToolContext context) {}
92
        protected void Exit(SymmetryCADToolContext context) {}
93

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

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

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

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

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

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

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

    
134
        //-------------------------------------------------------
135
        // Statics.
136
        //
137
        /* package */ static Symmetry_Default.Symmetry_FirstPoint FirstPoint;
138
        /* package */ static Symmetry_Default.Symmetry_SecondPoint SecondPoint;
139
        /* package */ static Symmetry_Default.Symmetry_CutOrCopy CutOrCopy;
140
        private static Symmetry_Default Default;
141

    
142
        static
143
        {
144
            FirstPoint = new Symmetry_Default.Symmetry_FirstPoint("Symmetry.FirstPoint", 0);
145
            SecondPoint = new Symmetry_Default.Symmetry_SecondPoint("Symmetry.SecondPoint", 1);
146
            CutOrCopy = new Symmetry_Default.Symmetry_CutOrCopy("Symmetry.CutOrCopy", 2);
147
            Default = new Symmetry_Default("Symmetry.Default", -1);
148
        }
149

    
150
    }
151

    
152
    protected static class Symmetry_Default
153
        extends SymmetryCADToolState
154
    {
155
    //-----------------------------------------------------------
156
    // Member methods.
157
    //
158

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

    
164
        protected void addOption(SymmetryCADToolContext context, String s)
165
        {
166
            SymmetryCADTool ctxt = context.getOwner();
167

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

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

    
179
                context.clearState();
180
                try
181
                {
182
                    ctxt.end();
183
                }
184
                finally
185
                {
186
                    context.setState(Symmetry.FirstPoint);
187

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

    
193
                }
194
            }
195
            else
196
            {
197
                boolean loopbackFlag =
198
                    context.getState().getName().equals(
199
                        Symmetry.FirstPoint.getName());
200

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

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

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

    
220
                }
221
            }
222

    
223
            return;
224
        }
225

    
226
        protected void addValue(SymmetryCADToolContext context, double d)
227
        {
228
            SymmetryCADTool ctxt = context.getOwner();
229

    
230
            boolean loopbackFlag =
231
                context.getState().getName().equals(
232
                    Symmetry.FirstPoint.getName());
233

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

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

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

    
253
            }
254
            return;
255
        }
256

    
257
        protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
258
        {
259
            SymmetryCADTool ctxt = context.getOwner();
260

    
261
            boolean loopbackFlag =
262
                context.getState().getName().equals(
263
                    Symmetry.FirstPoint.getName());
264

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

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

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

    
284
            }
285
            return;
286
        }
287

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

    
292

    
293
        private static final class Symmetry_FirstPoint
294
            extends Symmetry_Default
295
        {
296
        //-------------------------------------------------------
297
        // Member methods.
298
        //
299

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

    
305
            protected void Entry(SymmetryCADToolContext context)
306
            {
307
                SymmetryCADTool ctxt = context.getOwner();
308

    
309
                ctxt.selection();
310
                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
311
                ctxt.setDescription(new String[]{"cancel"});
312
                return;
313
            }
314

    
315
            protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
316
            {
317
                SymmetryCADTool ctxt = context.getOwner();
318

    
319

    
320
                (context.getState()).Exit(context);
321
                context.clearState();
322
                try
323
                {
324
                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
325
                    ctxt.setDescription(new String[]{"cancel"});
326
                    ctxt.addPoint(pointX, pointY, event);
327
                }
328
                finally
329
                {
330
                    context.setState(Symmetry.SecondPoint);
331
                    (context.getState()).Entry(context);
332
                }
333
                return;
334
            }
335

    
336
        //-------------------------------------------------------
337
        // Member data.
338
        //
339
        }
340

    
341
        private static final class Symmetry_SecondPoint
342
            extends Symmetry_Default
343
        {
344
        //-------------------------------------------------------
345
        // Member methods.
346
        //
347

    
348
            private Symmetry_SecondPoint(String name, int id)
349
            {
350
                super (name, id);
351
            }
352

    
353
            protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
354
            {
355
                SymmetryCADTool ctxt = context.getOwner();
356

    
357

    
358
                (context.getState()).Exit(context);
359
                context.clearState();
360
                try
361
                {
362
                    ctxt.setQuestion(PluginServices.getText(this,"del_original_geometries")+" "+
363
                                PluginServices.getText(this,"yes")+
364
                                "["+PluginServices.getText(this,"SymmetryCADTool.yes")+"], "+
365
                                PluginServices.getText(this,"cad.or")+" "+
366
                                PluginServices.getText(this,"no")+
367
                                "["+PluginServices.getText(this,"SymmetryCADTool.no")+"]");
368
                    ctxt.setDescription(new String[]{"cancel", "cut", "copy"});
369
                    ctxt.addPoint(pointX, pointY, event);
370
                }
371
                finally
372
                {
373
                    context.setState(Symmetry.CutOrCopy);
374
                    (context.getState()).Entry(context);
375
                }
376
                return;
377
            }
378

    
379
        //-------------------------------------------------------
380
        // Member data.
381
        //
382
        }
383

    
384
        private static final class Symmetry_CutOrCopy
385
            extends Symmetry_Default
386
        {
387
        //-------------------------------------------------------
388
        // Member methods.
389
        //
390

    
391
            private Symmetry_CutOrCopy(String name, int id)
392
            {
393
                super (name, id);
394
            }
395

    
396
            protected void addOption(SymmetryCADToolContext context, String s)
397
            {
398
                SymmetryCADTool ctxt = context.getOwner();
399

    
400

    
401
                (context.getState()).Exit(context);
402
                context.clearState();
403
                try
404
                {
405
                    ctxt.setDescription(new String[]{"cancel"});
406
                    ctxt.addOption(s);
407
                    ctxt.end();
408
                }
409
                finally
410
                {
411
                    context.setState(Symmetry.FirstPoint);
412
                    (context.getState()).Entry(context);
413
                }
414
                return;
415
            }
416

    
417
        //-------------------------------------------------------
418
        // Member data.
419
        //
420
        }
421

    
422
    //-----------------------------------------------------------
423
    // Member data.
424
    //
425
    }
426
}