Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.editing.app / org.gvsig.editing.app.mainplugin / src / main / java / org / gvsig / editing / gui / cad / tools / smc / EquidistanceCADToolContext.java @ 40557

History | View | Annotate | Download (13.6 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

    
25
//
26
// Vicente Caballero Navarro
27

    
28

    
29
package org.gvsig.editing.gui.cad.tools.smc;
30

    
31
import java.awt.event.InputEvent;
32

    
33
import org.gvsig.andami.PluginServices;
34
import org.gvsig.editing.gui.cad.tools.EquidistanceCADTool;
35

    
36

    
37
public final class EquidistanceCADToolContext
38
    extends statemap.FSMContext
39
{
40
//---------------------------------------------------------------
41
// Member methods.
42
//
43

    
44
    public EquidistanceCADToolContext(EquidistanceCADTool owner)
45
    {
46
        super();
47

    
48
        _owner = owner;
49
        setState(Equidistance.Distance);
50
        Equidistance.Distance.Entry(this);
51
    }
52

    
53
    public void addOption(String s)
54
    {
55
        _transition = "addOption";
56
        getState().addOption(this, s);
57
        _transition = "";
58
        return;
59
    }
60

    
61
    public void addPoint(double pointX, double pointY, InputEvent event)
62
    {
63
        _transition = "addPoint";
64
        getState().addPoint(this, pointX, pointY, event);
65
        _transition = "";
66
        return;
67
    }
68

    
69
    public void addValue(double d)
70
    {
71
        _transition = "addValue";
72
        getState().addValue(this, d);
73
        _transition = "";
74
        return;
75
    }
76

    
77
    public EquidistanceCADToolState getState()
78
        throws statemap.StateUndefinedException
79
    {
80
        if (_state == null)
81
        {
82
            throw(
83
                new statemap.StateUndefinedException());
84
        }
85

    
86
        return ((EquidistanceCADToolState) _state);
87
    }
88

    
89
    protected EquidistanceCADTool getOwner()
90
    {
91
        return (_owner);
92
    }
93

    
94
//---------------------------------------------------------------
95
// Member data.
96
//
97

    
98
    transient private EquidistanceCADTool _owner;
99

    
100
//---------------------------------------------------------------
101
// Inner classes.
102
//
103

    
104
    public static abstract class EquidistanceCADToolState
105
        extends statemap.State
106
    {
107
    //-----------------------------------------------------------
108
    // Member methods.
109
    //
110

    
111
        protected EquidistanceCADToolState(String name, int id)
112
        {
113
            super (name, id);
114
        }
115

    
116
        protected void Entry(EquidistanceCADToolContext context) {}
117
        protected void Exit(EquidistanceCADToolContext context) {}
118

    
119
        protected void addOption(EquidistanceCADToolContext context, String s)
120
        {
121
            Default(context);
122
        }
123

    
124
        protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
125
        {
126
            Default(context);
127
        }
128

    
129
        protected void addValue(EquidistanceCADToolContext context, double d)
130
        {
131
            Default(context);
132
        }
133

    
134
        protected void Default(EquidistanceCADToolContext context)
135
        {
136
            throw (
137
                new statemap.TransitionUndefinedException(
138
                    "State: " +
139
                    context.getState().getName() +
140
                    ", Transition: " +
141
                    context.getTransition()));
142
        }
143

    
144
    //-----------------------------------------------------------
145
    // Member data.
146
    //
147
    }
148

    
149
    /* package */ static abstract class Equidistance
150
    {
151
    //-----------------------------------------------------------
152
    // Member methods.
153
    //
154

    
155
    //-----------------------------------------------------------
156
    // Member data.
157
    //
158

    
159
        //-------------------------------------------------------
160
        // Statics.
161
        //
162
        /* package */ static Equidistance_Default.Equidistance_Distance Distance;
163
        /* package */ static Equidistance_Default.Equidistance_SecondPointDistance SecondPointDistance;
164
        /* package */ static Equidistance_Default.Equidistance_Position Position;
165
        private static Equidistance_Default Default;
166

    
167
        static
168
        {
169
            Distance = new Equidistance_Default.Equidistance_Distance("Equidistance.Distance", 0);
170
            SecondPointDistance = new Equidistance_Default.Equidistance_SecondPointDistance("Equidistance.SecondPointDistance", 1);
171
            Position = new Equidistance_Default.Equidistance_Position("Equidistance.Position", 2);
172
            Default = new Equidistance_Default("Equidistance.Default", -1);
173
        }
174

    
175
    }
176

    
177
    protected static class Equidistance_Default
178
        extends EquidistanceCADToolState
179
    {
180
    //-----------------------------------------------------------
181
    // Member methods.
182
    //
183

    
184
        protected Equidistance_Default(String name, int id)
185
        {
186
            super (name, id);
187
        }
188

    
189
        protected void addOption(EquidistanceCADToolContext context, String s)
190
        {
191
            EquidistanceCADTool ctxt = context.getOwner();
192

    
193
            if (s.equals(PluginServices.getText(this,"cancel")))
194
            {
195
                boolean loopbackFlag =
196
                    context.getState().getName().equals(
197
                        Equidistance.Distance.getName());
198

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

    
204
                context.clearState();
205
                try
206
                {
207
                    ctxt.end();
208
                }
209
                finally
210
                {
211
                    context.setState(Equidistance.Distance);
212

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

    
218
                }
219
            }
220
            else
221
            {
222
                boolean loopbackFlag =
223
                    context.getState().getName().equals(
224
                        Equidistance.Distance.getName());
225

    
226
                if (loopbackFlag == false)
227
                {
228
                    (context.getState()).Exit(context);
229
                }
230

    
231
                context.clearState();
232
                try
233
                {
234
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
235
                }
236
                finally
237
                {
238
                    context.setState(Equidistance.Distance);
239

    
240
                    if (loopbackFlag == false)
241
                    {
242
                        (context.getState()).Entry(context);
243
                    }
244

    
245
                }
246
            }
247

    
248
            return;
249
        }
250

    
251
        protected void addValue(EquidistanceCADToolContext context, double d)
252
        {
253
            EquidistanceCADTool ctxt = context.getOwner();
254

    
255
            boolean loopbackFlag =
256
                context.getState().getName().equals(
257
                    Equidistance.Distance.getName());
258

    
259
            if (loopbackFlag == false)
260
            {
261
                (context.getState()).Exit(context);
262
            }
263

    
264
            context.clearState();
265
            try
266
            {
267
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
268
            }
269
            finally
270
            {
271
                context.setState(Equidistance.Distance);
272

    
273
                if (loopbackFlag == false)
274
                {
275
                    (context.getState()).Entry(context);
276
                }
277

    
278
            }
279
            return;
280
        }
281

    
282
        protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
283
        {
284
            EquidistanceCADTool ctxt = context.getOwner();
285

    
286
            boolean loopbackFlag =
287
                context.getState().getName().equals(
288
                    Equidistance.Distance.getName());
289

    
290
            if (loopbackFlag == false)
291
            {
292
                (context.getState()).Exit(context);
293
            }
294

    
295
            context.clearState();
296
            try
297
            {
298
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
299
            }
300
            finally
301
            {
302
                context.setState(Equidistance.Distance);
303

    
304
                if (loopbackFlag == false)
305
                {
306
                    (context.getState()).Entry(context);
307
                }
308

    
309
            }
310
            return;
311
        }
312

    
313
    //-----------------------------------------------------------
314
    // Inner classse.
315
    //
316

    
317

    
318
        private static final class Equidistance_Distance
319
            extends Equidistance_Default
320
        {
321
        //-------------------------------------------------------
322
        // Member methods.
323
        //
324

    
325
            private Equidistance_Distance(String name, int id)
326
            {
327
                super (name, id);
328
            }
329

    
330
            protected void Entry(EquidistanceCADToolContext context)
331
            {
332
                EquidistanceCADTool ctxt = context.getOwner();
333

    
334
                ctxt.selection();
335
                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point_or_distance"));
336
                ctxt.setDescription(new String[]{"cancel"});
337
                return;
338
            }
339

    
340
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
341
            {
342
                EquidistanceCADTool ctxt = context.getOwner();
343

    
344

    
345
                (context.getState()).Exit(context);
346
                context.clearState();
347
                try
348
                {
349
                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
350
                    ctxt.setDescription(new String[]{"cancel"});
351
                    ctxt.addPoint(pointX, pointY, event);
352
                }
353
                finally
354
                {
355
                    context.setState(Equidistance.SecondPointDistance);
356
                    (context.getState()).Entry(context);
357
                }
358
                return;
359
            }
360

    
361
            protected void addValue(EquidistanceCADToolContext context, double d)
362
            {
363
                EquidistanceCADTool ctxt = context.getOwner();
364

    
365

    
366
                (context.getState()).Exit(context);
367
                context.clearState();
368
                try
369
                {
370
                    ctxt.setQuestion(PluginServices.getText(this,"position"));
371
                    ctxt.setDescription(new String[]{"cancel"});
372
                    ctxt.addValue(d);
373
                }
374
                finally
375
                {
376
                    context.setState(Equidistance.Position);
377
                    (context.getState()).Entry(context);
378
                }
379
                return;
380
            }
381

    
382
        //-------------------------------------------------------
383
        // Member data.
384
        //
385
        }
386

    
387
        private static final class Equidistance_SecondPointDistance
388
            extends Equidistance_Default
389
        {
390
        //-------------------------------------------------------
391
        // Member methods.
392
        //
393

    
394
            private Equidistance_SecondPointDistance(String name, int id)
395
            {
396
                super (name, id);
397
            }
398

    
399
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
400
            {
401
                EquidistanceCADTool ctxt = context.getOwner();
402

    
403

    
404
                (context.getState()).Exit(context);
405
                context.clearState();
406
                try
407
                {
408
                    ctxt.setQuestion(PluginServices.getText(this,"position"));
409
                    ctxt.setDescription(new String[]{"cancel"});
410
                    ctxt.addPoint(pointX, pointY, event);
411
                }
412
                finally
413
                {
414
                    context.setState(Equidistance.Position);
415
                    (context.getState()).Entry(context);
416
                }
417
                return;
418
            }
419

    
420
        //-------------------------------------------------------
421
        // Member data.
422
        //
423
        }
424

    
425
        private static final class Equidistance_Position
426
            extends Equidistance_Default
427
        {
428
        //-------------------------------------------------------
429
        // Member methods.
430
        //
431

    
432
            private Equidistance_Position(String name, int id)
433
            {
434
                super (name, id);
435
            }
436

    
437
            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
438
            {
439
                EquidistanceCADTool ctxt = context.getOwner();
440

    
441

    
442
                (context.getState()).Exit(context);
443
                context.clearState();
444
                try
445
                {
446
                    ctxt.setDescription(new String[]{"cancel"});
447
                    ctxt.addPoint(pointX, pointY, event);
448
                    ctxt.end();
449
                }
450
                finally
451
                {
452
                    context.setState(Equidistance.Distance);
453
                    (context.getState()).Entry(context);
454
                }
455
                return;
456
            }
457

    
458
        //-------------------------------------------------------
459
        // Member data.
460
        //
461
        }
462

    
463
    //-----------------------------------------------------------
464
    // Member data.
465
    //
466
    }
467
}