Statistics
| Revision:

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

History | View | Annotate | Download (7.49 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.MoveCADTool;
9
import java.awt.event.InputEvent;
10

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

    
18
    public MoveCADToolContext(MoveCADTool owner)
19
    {
20
        super();
21

    
22
        _owner = owner;
23
        setState(Move.FirstPointToMove);
24
        Move.FirstPointToMove.Entry(this);
25
    }
26

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

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

    
43
    public MoveCADToolState getState()
44
        throws statemap.StateUndefinedException
45
    {
46
        if (_state == null)
47
        {
48
            throw(
49
                new statemap.StateUndefinedException());
50
        }
51

    
52
        return ((MoveCADToolState) _state);
53
    }
54

    
55
    protected MoveCADTool getOwner()
56
    {
57
        return (_owner);
58
    }
59

    
60
//---------------------------------------------------------------
61
// Member data.
62
//
63

    
64
    transient private MoveCADTool _owner;
65

    
66
//---------------------------------------------------------------
67
// Inner classes.
68
//
69

    
70
    public static abstract class MoveCADToolState
71
        extends statemap.State
72
    {
73
    //-----------------------------------------------------------
74
    // Member methods.
75
    //
76

    
77
        protected MoveCADToolState(String name, int id)
78
        {
79
            super (name, id);
80
        }
81

    
82
        protected void Entry(MoveCADToolContext context) {}
83
        protected void Exit(MoveCADToolContext context) {}
84

    
85
        protected void addOption(MoveCADToolContext context, String s)
86
        {
87
            Default(context);
88
        }
89

    
90
        protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
91
        {
92
            Default(context);
93
        }
94

    
95
        protected void Default(MoveCADToolContext context)
96
        {
97
            throw (
98
                new statemap.TransitionUndefinedException(
99
                    "State: " +
100
                    context.getState().getName() +
101
                    ", Transition: " +
102
                    context.getTransition()));
103
        }
104

    
105
    //-----------------------------------------------------------
106
    // Member data.
107
    //
108
    }
109

    
110
    /* package */ static abstract class Move
111
    {
112
    //-----------------------------------------------------------
113
    // Member methods.
114
    //
115

    
116
    //-----------------------------------------------------------
117
    // Member data.
118
    //
119

    
120
        //-------------------------------------------------------
121
        // Statics.
122
        //
123
        /* package */ static Move_Default.Move_FirstPointToMove FirstPointToMove;
124
        /* package */ static Move_Default.Move_SecondPointToMove SecondPointToMove;
125
        private static Move_Default Default;
126

    
127
        static
128
        {
129
            FirstPointToMove = new Move_Default.Move_FirstPointToMove("Move.FirstPointToMove", 0);
130
            SecondPointToMove = new Move_Default.Move_SecondPointToMove("Move.SecondPointToMove", 1);
131
            Default = new Move_Default("Move.Default", -1);
132
        }
133

    
134
    }
135

    
136
    protected static class Move_Default
137
        extends MoveCADToolState
138
    {
139
    //-----------------------------------------------------------
140
    // Member methods.
141
    //
142

    
143
        protected Move_Default(String name, int id)
144
        {
145
            super (name, id);
146
        }
147

    
148
        protected void addOption(MoveCADToolContext context, String s)
149
        {
150
            MoveCADTool ctxt = context.getOwner();
151

    
152
            if (s.equals("Cancelar"))
153
            {
154
                boolean loopbackFlag =
155
                    context.getState().getName().equals(
156
                        Move.FirstPointToMove.getName());
157

    
158
                if (loopbackFlag == false)
159
                {
160
                    (context.getState()).Exit(context);
161
                }
162

    
163
                context.clearState();
164
                try
165
                {
166
                    ctxt.end();
167
                }
168
                finally
169
                {
170
                    context.setState(Move.FirstPointToMove);
171

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

    
177
                }
178
            }
179
            else
180
            {
181
                super.addOption(context, s);
182
            }
183

    
184
            return;
185
        }
186

    
187
    //-----------------------------------------------------------
188
    // Inner classse.
189
    //
190

    
191

    
192
        private static final class Move_FirstPointToMove
193
            extends Move_Default
194
        {
195
        //-------------------------------------------------------
196
        // Member methods.
197
        //
198

    
199
            private Move_FirstPointToMove(String name, int id)
200
            {
201
                super (name, id);
202
            }
203

    
204
            protected void Entry(MoveCADToolContext context)
205
            {
206
                MoveCADTool ctxt = context.getOwner();
207

    
208
                ctxt.selection();
209
                ctxt.setQuestion("DESPLAZAR" + "\n" +
210
                "Precisar punto de desplazamiento");
211
                ctxt.setDescription(new String[]{"Cancelar"});
212
                return;
213
            }
214

    
215
            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
216
            {
217
                MoveCADTool ctxt = context.getOwner();
218

    
219

    
220
                (context.getState()).Exit(context);
221
                context.clearState();
222
                try
223
                {
224
                    ctxt.setQuestion("Precisar segundo punto del desplazamiento");
225
                    ctxt.setDescription(new String[]{"Cancelar"});
226
                    ctxt.addPoint(pointX, pointY, event);
227
                }
228
                finally
229
                {
230
                    context.setState(Move.SecondPointToMove);
231
                    (context.getState()).Entry(context);
232
                }
233
                return;
234
            }
235

    
236
        //-------------------------------------------------------
237
        // Member data.
238
        //
239
        }
240

    
241
        private static final class Move_SecondPointToMove
242
            extends Move_Default
243
        {
244
        //-------------------------------------------------------
245
        // Member methods.
246
        //
247

    
248
            private Move_SecondPointToMove(String name, int id)
249
            {
250
                super (name, id);
251
            }
252

    
253
            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
254
            {
255
                MoveCADTool ctxt = context.getOwner();
256

    
257

    
258
                (context.getState()).Exit(context);
259
                context.clearState();
260
                try
261
                {
262
                    ctxt.setDescription(new String[]{"Cancelar"});
263
                    ctxt.addPoint(pointX, pointY, event);
264
                    ctxt.end();
265
                    ctxt.refresh();
266
                }
267
                finally
268
                {
269
                    context.setState(Move.FirstPointToMove);
270
                    (context.getState()).Entry(context);
271
                }
272
                return;
273
            }
274

    
275
        //-------------------------------------------------------
276
        // Member data.
277
        //
278
        }
279

    
280
    //-----------------------------------------------------------
281
    // Member data.
282
    //
283
    }
284
}