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 / PolylineCADToolContext.java @ 41221

History | View | Annotate | Download (27 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.PolylineCADTool;
35

    
36

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

    
44
    public PolylineCADToolContext(PolylineCADTool owner)
45
    {
46
        super();
47

    
48
        _owner = owner;
49
        setState(Polyline.FirstPoint);
50
        Polyline.FirstPoint.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 void endPoint(double pointX, double pointY, InputEvent event)
78
    {
79
        _transition = "endPoint";
80
        getState().endPoint(this, pointX, pointY, event);
81
        _transition = "";
82
        return;
83
    }
84

    
85
    public PolylineCADToolState getState()
86
        throws statemap.StateUndefinedException
87
    {
88
        if (_state == null)
89
        {
90
            throw(
91
                new statemap.StateUndefinedException());
92
        }
93

    
94
        return ((PolylineCADToolState) _state);
95
    }
96

    
97
    protected PolylineCADTool getOwner()
98
    {
99
        return (_owner);
100
    }
101

    
102
//---------------------------------------------------------------
103
// Member data.
104
//
105

    
106
    transient private PolylineCADTool _owner;
107

    
108
//---------------------------------------------------------------
109
// Inner classes.
110
//
111

    
112
    public static abstract class PolylineCADToolState
113
        extends statemap.State
114
    {
115
    //-----------------------------------------------------------
116
    // Member methods.
117
    //
118

    
119
        protected PolylineCADToolState(String name, int id)
120
        {
121
            super (name, id);
122
        }
123

    
124
        protected void Entry(PolylineCADToolContext context) {}
125
        protected void Exit(PolylineCADToolContext context) {}
126

    
127
        protected void addOption(PolylineCADToolContext context, String s)
128
        {
129
            Default(context);
130
        }
131

    
132
        protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
133
        {
134
            Default(context);
135
        }
136

    
137
        protected void addValue(PolylineCADToolContext context, double d)
138
        {
139
            Default(context);
140
        }
141

    
142
        protected void endPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
143
        {
144
            Default(context);
145
        }
146

    
147
        protected void Default(PolylineCADToolContext context)
148
        {
149
            throw (
150
                new statemap.TransitionUndefinedException(
151
                    "State: " +
152
                    context.getState().getName() +
153
                    ", Transition: " +
154
                    context.getTransition()));
155
        }
156

    
157
    //-----------------------------------------------------------
158
    // Member data.
159
    //
160
    }
161

    
162
    /* package */ static abstract class Polyline
163
    {
164
    //-----------------------------------------------------------
165
    // Member methods.
166
    //
167

    
168
    //-----------------------------------------------------------
169
    // Member data.
170
    //
171

    
172
        //-------------------------------------------------------
173
        // Statics.
174
        //
175
        /* package */ static Polyline_Default.Polyline_FirstPoint FirstPoint;
176
        /* package */ static Polyline_Default.Polyline_NextPointOrArcOrClose NextPointOrArcOrClose;
177
        /* package */ static Polyline_Default.Polyline_NextPointOrLineOrClose NextPointOrLineOrClose;
178
        private static Polyline_Default Default;
179

    
180
        static
181
        {
182
            FirstPoint = new Polyline_Default.Polyline_FirstPoint("Polyline.FirstPoint", 0);
183
            NextPointOrArcOrClose = new Polyline_Default.Polyline_NextPointOrArcOrClose("Polyline.NextPointOrArcOrClose", 1);
184
            NextPointOrLineOrClose = new Polyline_Default.Polyline_NextPointOrLineOrClose("Polyline.NextPointOrLineOrClose", 2);
185
            Default = new Polyline_Default("Polyline.Default", -1);
186
        }
187

    
188
    }
189

    
190
    protected static class Polyline_Default
191
        extends PolylineCADToolState
192
    {
193
    //-----------------------------------------------------------
194
    // Member methods.
195
    //
196

    
197
        protected Polyline_Default(String name, int id)
198
        {
199
            super (name, id);
200
        }
201

    
202
        protected void addOption(PolylineCADToolContext context, String s)
203
        {
204
            PolylineCADTool ctxt = context.getOwner();
205

    
206
            if (s.equals(PluginServices.getText(this,"cancel")))
207
            {
208
                boolean loopbackFlag =
209
                    context.getState().getName().equals(
210
                        Polyline.FirstPoint.getName());
211

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

    
217
                context.clearState();
218
                try
219
                {
220
                    ctxt.cancel();
221
                }
222
                finally
223
                {
224
                    context.setState(Polyline.FirstPoint);
225

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

    
231
                }
232
            }
233
            else if (s.equals(""))
234
            {
235
                boolean loopbackFlag =
236
                    context.getState().getName().equals(
237
                        Polyline.FirstPoint.getName());
238

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

    
244
                context.clearState();
245
                try
246
                {
247
                    ctxt.endGeometry();
248
                }
249
                finally
250
                {
251
                    context.setState(Polyline.FirstPoint);
252

    
253
                    if (loopbackFlag == false)
254
                    {
255
                        (context.getState()).Entry(context);
256
                    }
257

    
258
                }
259
            }
260
            else
261
            {
262
                boolean loopbackFlag =
263
                    context.getState().getName().equals(
264
                        Polyline.FirstPoint.getName());
265

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

    
271
                context.clearState();
272
                try
273
                {
274
                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
275
                }
276
                finally
277
                {
278
                    context.setState(Polyline.FirstPoint);
279

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

    
285
                }
286
            }
287

    
288
            return;
289
        }
290

    
291
        protected void addValue(PolylineCADToolContext context, double d)
292
        {
293
            PolylineCADTool ctxt = context.getOwner();
294

    
295
            boolean loopbackFlag =
296
                context.getState().getName().equals(
297
                    Polyline.FirstPoint.getName());
298

    
299
            if (loopbackFlag == false)
300
            {
301
                (context.getState()).Exit(context);
302
            }
303

    
304
            context.clearState();
305
            try
306
            {
307
                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
308
            }
309
            finally
310
            {
311
                context.setState(Polyline.FirstPoint);
312

    
313
                if (loopbackFlag == false)
314
                {
315
                    (context.getState()).Entry(context);
316
                }
317

    
318
            }
319
            return;
320
        }
321

    
322
        protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
323
        {
324
            PolylineCADTool ctxt = context.getOwner();
325

    
326
            boolean loopbackFlag =
327
                context.getState().getName().equals(
328
                    Polyline.FirstPoint.getName());
329

    
330
            if (loopbackFlag == false)
331
            {
332
                (context.getState()).Exit(context);
333
            }
334

    
335
            context.clearState();
336
            try
337
            {
338
                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
339
            }
340
            finally
341
            {
342
                context.setState(Polyline.FirstPoint);
343

    
344
                if (loopbackFlag == false)
345
                {
346
                    (context.getState()).Entry(context);
347
                }
348

    
349
            }
350
            return;
351
        }
352

    
353
        protected void endPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
354
        {
355
            PolylineCADTool ctxt = context.getOwner();
356

    
357
            boolean loopbackFlag =
358
                context.getState().getName().equals(
359
                    Polyline.FirstPoint.getName());
360

    
361
            if (loopbackFlag == false)
362
            {
363
                (context.getState()).Exit(context);
364
            }
365

    
366
            context.clearState();
367
            try
368
            {
369
                ctxt.addPoint(pointX, pointY, event);
370
                ctxt.endGeometry();
371
            }
372
            finally
373
            {
374
                context.setState(Polyline.FirstPoint);
375

    
376
                if (loopbackFlag == false)
377
                {
378
                    (context.getState()).Entry(context);
379
                }
380

    
381
            }
382
            return;
383
        }
384

    
385
    //-----------------------------------------------------------
386
    // Inner classse.
387
    //
388

    
389

    
390
        private static final class Polyline_FirstPoint
391
            extends Polyline_Default
392
        {
393
        //-------------------------------------------------------
394
        // Member methods.
395
        //
396

    
397
            private Polyline_FirstPoint(String name, int id)
398
            {
399
                super (name, id);
400
            }
401

    
402
            protected void Entry(PolylineCADToolContext context)
403
            {
404
                PolylineCADTool ctxt = context.getOwner();
405

    
406
                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
407
                ctxt.setDescription(new String[]{"cancel"});
408
                return;
409
            }
410

    
411
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
412
            {
413
                PolylineCADTool ctxt = context.getOwner();
414
                
415
                if (ctxt.isPolygonLayer())
416
                {
417

    
418
                    (context.getState()).Exit(context);
419
                    context.clearState();
420
                    try
421
                    {
422
                        /*
423
                         * Less options if first point
424
                         */
425
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
426
                            PluginServices.getText(this,"arc")+
427
                            "["+PluginServices.getText(this,"PolylineCADTool.arc")+"]");
428
                        ctxt.setDescription(new String[]{"inter_arc", "cancel"});
429
                        ctxt.addPoint(pointX, pointY, event);
430
                    }
431
                    finally
432
                    {
433
                        context.setState(Polyline.NextPointOrArcOrClose);
434
                        (context.getState()).Entry(context);
435
                    }
436
                }
437
                else
438
                {
439

    
440
                    (context.getState()).Exit(context);
441
                    context.clearState();
442
                    try
443
                    {
444
                        /*
445
                         * First point, less options
446
                         */
447
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
448
                            PluginServices.getText(this,"arc")+
449
                            "["+PluginServices.getText(this,"PolylineCADTool.arc")+"]");
450
                        ctxt.setDescription(new String[]{"inter_arc", "cancel"});
451
                        ctxt.addPoint(pointX, pointY, event);
452
                    }
453
                    finally
454
                    {
455
                        context.setState(Polyline.NextPointOrArcOrClose);
456
                        (context.getState()).Entry(context);
457
                    }
458
                }
459

    
460
                return;
461
            }
462

    
463
            
464

    
465
        //-------------------------------------------------------
466
        // Member data.
467
        //
468
        }
469

    
470
        private static final class Polyline_NextPointOrArcOrClose
471
            extends Polyline_Default
472
        {
473
        //-------------------------------------------------------
474
        // Member methods.
475
        //
476

    
477
            private Polyline_NextPointOrArcOrClose(String name, int id)
478
            {
479
                super (name, id);
480
            }
481

    
482
            protected void addOption(PolylineCADToolContext context, String s)
483
            {
484
                PolylineCADTool ctxt = context.getOwner();
485
                
486

    
487
                if (ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc"))))
488
                {
489

    
490
                    (context.getState()).Exit(context);
491
                    context.clearState();
492
                    try
493
                    {
494
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
495
                                PluginServices.getText(this,"line")+
496
                                "["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
497
                                PluginServices.getText(this,"cad.or")+" "+
498
                                PluginServices.getText(this,"end")+
499
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
500
                        ctxt.setDescription(new String[]{"inter_line", "terminate", "cancel"});
501
                        ctxt.addOption(s);
502
                    }
503
                    finally
504
                    {
505
                        context.setState(Polyline.NextPointOrLineOrClose);
506
                        (context.getState()).Entry(context);
507
                    }
508
                }
509
                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc")))
510
                {
511

    
512
                    (context.getState()).Exit(context);
513
                    context.clearState();
514
                    try
515
                    {
516
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
517
                                PluginServices.getText(this,"line")+
518
                                "["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
519
                                PluginServices.getText(this,"close_polyline")+
520
                                "["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
521
                                PluginServices.getText(this,"cad.or")+" "+
522
                                PluginServices.getText(this,"end")+
523
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
524
                        ctxt.setDescription(new String[]{"inter_line", "close_polyline", "terminate", "cancel"});
525
                        ctxt.addOption(s);
526
                    }
527
                    finally
528
                    {
529
                        context.setState(Polyline.NextPointOrLineOrClose);
530
                        (context.getState()).Entry(context);
531
                    }
532
                }
533
                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline")))
534
                {
535

    
536
                    (context.getState()).Exit(context);
537
                    context.clearState();
538
                    try
539
                    {
540
                        ctxt.addOption(s);
541
                        ctxt.closeGeometry();
542
                        ctxt.endGeometry();
543
                        ctxt.end();
544
                    }
545
                    finally
546
                    {
547
                        context.setState(Polyline.FirstPoint);
548
                        (context.getState()).Entry(context);
549
                    }
550
                }
551
                else if ((s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0 )
552
                {
553

    
554
                    (context.getState()).Exit(context);
555
                    context.clearState();
556
                    try
557
                    {
558
                        ctxt.addOption(s);
559
                        ctxt.endGeometry();
560
                        ctxt.end();
561
                    }
562
                    finally
563
                    {
564
                        context.setState(Polyline.FirstPoint);
565
                        (context.getState()).Entry(context);
566
                    }
567
                }
568
                else if (!s.equals(PluginServices.getText(this,"cancel")))
569
                {
570

    
571
                    // No actions.
572
                }                else
573
                {
574
                    super.addOption(context, s);
575
                }
576

    
577
                return;
578
            }
579

    
580
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
581
            {
582
                PolylineCADTool ctxt = context.getOwner();
583

    
584
                if (ctxt.isPolygonLayer())
585
                {
586
                    PolylineCADToolState endState = context.getState();
587

    
588
                    context.clearState();
589
                    try
590
                    {
591
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
592
                                PluginServices.getText(this,"arc")+
593
                                "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
594
                                PluginServices.getText(this,"cad.or")+" "+
595
                                PluginServices.getText(this,"end")+
596
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
597
                        ctxt.setDescription(new String[]{"inter_arc", "terminate", "cancel"});
598
                        ctxt.addPoint(pointX, pointY, event);
599
                    }
600
                    finally
601
                    {
602
                        context.setState(endState);
603
                    }
604
                }
605
                else
606
                {
607
                    PolylineCADToolState endState = context.getState();
608

    
609
                    context.clearState();
610
                    try
611
                    {
612
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
613
                                PluginServices.getText(this,"arc")+
614
                                "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
615
                                PluginServices.getText(this,"close_polyline")+
616
                                "["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
617
                                PluginServices.getText(this,"cad.or")+" "+
618
                                PluginServices.getText(this,"end")+
619
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
620
                        ctxt.setDescription(new String[]{"inter_arc", "close_polyline", "terminate", "cancel"});
621
                        ctxt.addPoint(pointX, pointY, event);
622
                    }
623
                    finally
624
                    {
625
                        context.setState(endState);
626
                    }
627
                }
628

    
629
                return;
630
            }
631

    
632
        //-------------------------------------------------------
633
        // Member data.
634
        //
635
        }
636

    
637
        private static final class Polyline_NextPointOrLineOrClose
638
            extends Polyline_Default
639
        {
640
        //-------------------------------------------------------
641
        // Member methods.
642
        //
643

    
644
            private Polyline_NextPointOrLineOrClose(String name, int id)
645
            {
646
                super (name, id);
647
            }
648

    
649
            protected void addOption(PolylineCADToolContext context, String s)
650
            {
651
                PolylineCADTool ctxt = context.getOwner();
652

    
653
                if (ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line"))))
654
                {
655

    
656
                    (context.getState()).Exit(context);
657
                    context.clearState();
658
                    try
659
                    {
660
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
661
                                PluginServices.getText(this,"arc")+
662
                                "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
663
                                PluginServices.getText(this,"cad.or")+" "+
664
                                PluginServices.getText(this,"end")+
665
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
666
                        ctxt.setDescription(new String[]{"inter_arc", "terminate", "cancel"});
667
                        ctxt.addOption(s);
668
                    }
669
                    finally
670
                    {
671
                        context.setState(Polyline.NextPointOrArcOrClose);
672
                        (context.getState()).Entry(context);
673
                    }
674
                }
675
                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line")))
676
                {
677

    
678
                    (context.getState()).Exit(context);
679
                    context.clearState();
680
                    try
681
                    {
682
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
683
                                PluginServices.getText(this,"arc")+
684
                                "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
685
                                PluginServices.getText(this,"close_polyline")+
686
                                "["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
687
                                PluginServices.getText(this,"cad.or")+" "+
688
                                PluginServices.getText(this,"end")+
689
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
690
                        ctxt.setDescription(new String[]{"inter_arc", "close_polyline", "terminate", "cancel"});
691
                        ctxt.addOption(s);
692
                    }
693
                    finally
694
                    {
695
                        context.setState(Polyline.NextPointOrArcOrClose);
696
                        (context.getState()).Entry(context);
697
                    }
698
                }
699
                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline")))
700
                {
701

    
702
                    (context.getState()).Exit(context);
703
                    context.clearState();
704
                    try
705
                    {
706
                        ctxt.addOption(s);
707
                        ctxt.closeGeometry();
708
                        ctxt.endGeometry();
709
                        ctxt.end();
710
                    }
711
                    finally
712
                    {
713
                        context.setState(Polyline.FirstPoint);
714
                        (context.getState()).Entry(context);
715
                    }
716
                }
717
                else if ((s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0)
718
                {
719

    
720
                    (context.getState()).Exit(context);
721
                    context.clearState();
722
                    try
723
                    {
724
                        ctxt.addOption(s);
725
                        ctxt.endGeometry();
726
                        ctxt.end();
727
                    }
728
                    finally
729
                    {
730
                        context.setState(Polyline.FirstPoint);
731
                        (context.getState()).Entry(context);
732
                    }
733
                }
734
                else if (!s.equals(PluginServices.getText(this,"cancel")))
735
                {
736

    
737
                    // No actions.
738
                }                else
739
                {
740
                    super.addOption(context, s);
741
                }
742

    
743
                return;
744
            }
745

    
746
            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
747
            {
748
                PolylineCADTool ctxt = context.getOwner();
749

    
750
                if (ctxt.isPolygonLayer())
751
                {
752
                    PolylineCADToolState endState = context.getState();
753

    
754
                    context.clearState();
755
                    try
756
                    {
757
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
758
                                PluginServices.getText(this,"line")+
759
                                "["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
760
                                PluginServices.getText(this,"cad.or")+" "+
761
                                PluginServices.getText(this,"end")+
762
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
763
                        ctxt.setDescription(new String[]{"inter_line", "terminate", "cancel"});
764
                        ctxt.addPoint(pointX, pointY, event);
765
                    }
766
                    finally
767
                    {
768
                        context.setState(endState);
769
                    }
770
                }
771
                else
772
                {
773
                    PolylineCADToolState endState = context.getState();
774

    
775
                    context.clearState();
776
                    try
777
                    {
778
                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
779
                                PluginServices.getText(this,"line")+
780
                                "["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
781
                                PluginServices.getText(this,"close_polyline")+
782
                                "["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
783
                                PluginServices.getText(this,"cad.or")+" "+
784
                                PluginServices.getText(this,"end")+
785
                                "["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
786
                        ctxt.setDescription(new String[]{"inter_line", "close_polyline", "terminate", "cancel"});
787
                        ctxt.addPoint(pointX, pointY, event);
788
                    }
789
                    finally
790
                    {
791
                        context.setState(endState);
792
                    }
793
                }
794

    
795
                return;
796
            }
797

    
798
        //-------------------------------------------------------
799
        // Member data.
800
        //
801
        }
802

    
803
    //-----------------------------------------------------------
804
    // Member data.
805
    //
806
    }
807
    
808

    
809
}