Revision 28 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingBehavior.java

View differences:

DefaultEditingBehavior.java
19 19
import org.gvsig.andami.ui.mdiFrame.MainFrame;
20 20
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
21 21
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
22
import org.gvsig.fmap.geom.Geometry;
22 23
import org.gvsig.fmap.mapcontext.MapContext;
23 24
import org.gvsig.fmap.mapcontext.ViewPort;
24 25
import org.gvsig.fmap.mapcontext.layers.CancelationException;
......
31 32
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
32 33
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
33 34
import org.gvsig.fmap.mapcontrol.MapControl;
35
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
36
import org.gvsig.fmap.mapcontrol.MapControlLocator;
34 37
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
35 38
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
36 39
import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
......
51 54
  private EditingService activatedTool;
52 55

  
53 56
  private EditingServiceParameter currentParam;
57
  
58
  private Point adjustedPoint;
54 59

  
55 60
  private StatusBarListener sbl = null;
56 61

  
......
68 73
    g.drawRect((x - 3), (y - 3), 6, 6);
69 74
  }
70 75

  
76
  private LayerListener layerListener = new LayerListener() {
77

  
78
    public void activationChanged(LayerEvent e) {
79
      DefaultViewPanel view = getActiveView();
80
      FLayer layer = e.getSource();
81
      if (layer instanceof FLyrVect) {
82

  
83
        if (layer.isActive() && layer.isEditing()) {
84
          view.showConsole();
85
          getMapControl().setTool("VectorEditing");
86
        }
87
        else if (!layer.isEditing() && layer.isActive()) {
88
          setCurrentLayer((FLyrVect) layer);
89
          view.hideConsole();
90
          getMapControl().setTool("zoomIn");
91
          PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
92
        }
93
        setCurrentLayer((FLyrVect) layer);
94
      }
95

  
96
    }
97

  
98
    public void drawValueChanged(LayerEvent e) {}
99

  
100
    public void editionChanged(LayerEvent e) {}
101

  
102
    public void nameChanged(LayerEvent e) {}
103

  
104
    public void visibilityChanged(LayerEvent e) {}
105
  };
106

  
71 107
  public DefaultEditingBehavior(MapControl mapControl) {
72 108
    // TODO Auto-generated constructor stub
73 109
    if (mapControl != null) {
......
76 112
      initMapControlListeners(mapControl);
77 113
      FLayers layers = mapControl.getMapContext().getLayers();
78 114
      for (int i = 0; i < layers.getLayersCount(); i++) {
79
        if (layers.getLayer(i) instanceof FLyrVect)
115
        if (layers.getLayer(i) instanceof FLyrVect
116
            && layers.getLayer(i).isActive())
80 117
          setCurrentLayer((FLyrVect) layers.getLayer(i));
81 118
      }
82 119

  
83 120
    }
84 121
  }
85 122

  
86
  private LayerListener layerListener = new LayerListener() {
123
  public void activateTool(String name) {
87 124

  
88
    public void visibilityChanged(LayerEvent e) {}
125
    EditingManager manager = EditingLocator.getManager();
89 126

  
90
    public void nameChanged(LayerEvent e) {}
127
    if (currentLayer != null) {
128
      EditingService tool = (EditingService) manager.getEditingService(name,
129
          currentLayer);
130
      if (tool != null) {
131
        this.activatedTool = tool;
132
        tool.start();
133
        getNextParameter();
134
      }
135
    }
136
  }
91 137

  
92
    public void editionChanged(LayerEvent e) {}
138
  private void askQuestion(EditingServiceParameter param) {
139
    DefaultViewPanel viewActive = getActiveView();
140
    if (viewActive != null) {
141
      viewActive.getConsolePanel().addText(
142
          "\n" + "#" + param.getConsoleMessage() + " > ", JConsole.MESSAGE);
143
    }
144
  }
93 145

  
94
    public void drawValueChanged(LayerEvent e) {}
146
  private DefaultViewPanel getActiveView() {
147
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
148
        .getMDIManager().getActiveWindow();
95 149

  
96
    public void activationChanged(LayerEvent e) {
97
      FLayer layer = e.getSource();
98
      if (layer.isEditing() && layer instanceof FLyrVect) {
99
        setCurrentLayer((FLyrVect) layer);
150
    if (activeWindow instanceof DefaultViewPanel) {
151
      return (DefaultViewPanel) activeWindow;
152
    }
153
    return null;
154
  }
155

  
156
  @Override
157
  public ToolListener getListener() {
158
    return new ToolListener() {
159

  
160
      /**
161
       * 
162
       */
163
      public boolean cancelDrawing() {
164
        return false;
100 165
      }
166

  
167
      /**
168
       * 
169
       */
170
      public Image getImageCursor() {
171
        return imageCursor;
172
      }
173
    };
174
  }
175

  
176
  private void getNextParameter() {
177
    currentParam = activatedTool.getNextParameter();
178
    if (currentParam == null) {
179
      activatedTool.finishOperation();
180
      mapControl.rePaintDirtyLayers();
181
      activatedTool.start();
182
      getNextParameter();
101 183
    }
102
  };
184
    else {
185
      askQuestion(currentParam);
103 186

  
187
    }
188

  
189
  }
190

  
104 191
  private void initMapControlListeners(MapControl mapControl) {
105 192
    DefaultViewPanel view = getActiveView();
106 193

  
......
129 216

  
130 217
    layers.addLayerCollectionListener(new LayerCollectionListener() {
131 218

  
132
      public void visibilityChanged(LayerCollectionEvent e)
133
          throws CancelationException {}
134

  
135
      public void layerRemoving(LayerCollectionEvent e)
136
          throws CancelationException {}
137

  
138
      public void layerRemoved(LayerCollectionEvent e) {
219
      public void layerAdded(LayerCollectionEvent e) {
139 220
        FLayers layers2 = e.getLayers();
140 221
        for (int i = 0; i < layers2.getLayersCount(); i++) {
141 222
          FLayer layer = layers2.getLayer(i);
142 223
          if (layer instanceof FLyrVect) {
143
            ((FLyrVect) layer).removeLayerListener(layerListener);
224
            ((FLyrVect) layer).addLayerListener(layerListener);
144 225
          }
145 226
        }
146 227
      }
147 228

  
148
      public void layerMoving(LayerPositionEvent e) throws CancelationException {}
229
      public void layerAdding(LayerCollectionEvent e)
230
          throws CancelationException {}
149 231

  
150 232
      public void layerMoved(LayerPositionEvent e) {}
151 233

  
152
      public void layerAdding(LayerCollectionEvent e)
153
          throws CancelationException {}
234
      public void layerMoving(LayerPositionEvent e) throws CancelationException {}
154 235

  
155
      public void layerAdded(LayerCollectionEvent e) {
236
      public void layerRemoved(LayerCollectionEvent e) {
156 237
        FLayers layers2 = e.getLayers();
157 238
        for (int i = 0; i < layers2.getLayersCount(); i++) {
158 239
          FLayer layer = layers2.getLayer(i);
159 240
          if (layer instanceof FLyrVect) {
160
            ((FLyrVect) layer).addLayerListener(layerListener);
241
            ((FLyrVect) layer).removeLayerListener(layerListener);
161 242
          }
162 243
        }
163 244
      }
164
    });
165
  }
166 245

  
167
  private void textEntered(String response) {
168
    int type = currentParam.getType();
169
    try {
170
      switch (type) {
171
        case EditingServiceParameter.TYPE_POINT:
172
          String[] numbers = new String[1];
173
          numbers[0] = response;
174
          numbers = response.split(",");
175
          if (numbers.length == 2) {
176
            if (numbers[0].startsWith("(") && numbers[1].endsWith(")\n")) { // CCS
177
              numbers[0] = numbers[0].replace("(", "");
178
              numbers[1] = numbers[1].replace(")\n", "");
179
            }
180
            double[] values = new double[] { Double.parseDouble(numbers[0]),
181
                Double.parseDouble(numbers[1]) };
182
            Point2D point = new Point2D.Double(values[0], values[1]);
183
            this.activatedTool.setValueParameter(currentParam, point);
246
      public void layerRemoving(LayerCollectionEvent e)
247
          throws CancelationException {}
184 248

  
185
          }
186
          else {
187
            throw new RuntimeException("Datos inv?lidos: " + response);
188
          }
189
        case EditingServiceParameter.TYPE_LIST_POINTS:
190
        case EditingServiceParameter.TYPE_OPTION:
191
        case EditingServiceParameter.TYPE_SELECTION:
192
        case EditingServiceParameter.TYPE_GEOMETRY:
193
        case EditingServiceParameter.TYPE_VALUE:
194
      }
195
      getNextParameter();
196
    }
197
    catch (Exception e) {
198
      throw new RuntimeException("Datos inv?lidos: " + response);
199
    }
249
      public void visibilityChanged(LayerCollectionEvent e)
250
          throws CancelationException {}
251
    });
200 252
  }
201 253

  
202
  public void setCurrentLayer(FLyrVect layer) {
203
    this.currentLayer = layer;
204
  }
205

  
206
  public void activateTool(String name) {
207

  
208
    EditingManager manager = EditingLocator.getManager();
209

  
210
    if (currentLayer != null) {
211
      EditingService tool = (EditingService) manager.getEditingService(name,
212
          currentLayer);
213
      if (tool != null) {
214
        this.activatedTool = tool;
215
        tool.start();
216
        getNextParameter();
217
      }
218
    }
219
  }
220

  
221
  private void getNextParameter() {
222
    currentParam = activatedTool.getNextParameter();
223
    if (currentParam == null) {
224
      activatedTool.finishOperation();
225
      mapControl.rePaintDirtyLayers();
226
      activatedTool.start();
227
      getNextParameter();
228
    }
229
    else {
230
      askQuestion(currentParam);
231

  
232
    }
233

  
234
  }
235

  
236
  private void askQuestion(EditingServiceParameter param) {
237
    DefaultViewPanel viewActive = getActiveView();
238
    if (viewActive != null) {
239
      viewActive.getConsolePanel().addText(
240
          "\n" + "#" + param.getConsoleMessage() + " > ", JConsole.MESSAGE);
241
    }
242
  }
243

  
244
  private DefaultViewPanel getActiveView() {
245
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
246
        .getMDIManager().getActiveWindow();
247

  
248
    if (activeWindow instanceof DefaultViewPanel) {
249
      return (DefaultViewPanel) activeWindow;
250
    }
251
    return null;
252
  }
253

  
254
  @Override
255
  public ToolListener getListener() {
256
    return new ToolListener() {
257

  
258
      /**
259
       * 
260
       */
261
      public Image getImageCursor() {
262
        return imageCursor;
263
      }
264

  
265
      /**
266
       * 
267
       */
268
      public boolean cancelDrawing() {
269
        return false;
270
      }
271
    };
272
  }
273

  
274 254
  public void mouseClicked(MouseEvent e) throws BehaviorException {
275 255
    // TODO Auto-generated method stub
276 256
    if (activatedTool != null) {
......
299 279
  }
300 280

  
301 281
  public void mouseMoved(MouseEvent e) throws BehaviorException {
302
    showCoords(e.getPoint());
282
    adjustedPoint = e.getPoint();
303 283

  
284
    showCoords(adjustedPoint);
285

  
304 286
    getMapControl().repaint();
305 287
  }
306 288

  
289
  public void mousePressed(MouseEvent e) throws BehaviorException {
290
    // TODO Auto-generated method stub
291
  }
292

  
293
  public void mouseReleased(MouseEvent e) throws BehaviorException {
294
    // TODO Auto-generated method stub
295
  }
296

  
297
  @SuppressWarnings("deprecation")
298
  public void paintComponent(MapControlDrawer mapControlDrawer) {
299
    super.paintComponent(mapControlDrawer);
300
    if (activatedTool == null || adjustedPoint == null) {
301
      return;
302
    }
303
    Point2D p = null;
304

  
305
    p = getMapControl().getViewPort().toMapPoint(adjustedPoint);
306
    Geometry helperGeo = activatedTool.drawOperation(p);
307
    if (helperGeo != null) {
308
      mapControl.getMapControlDrawer().draw(helperGeo,
309
          MapControlLocator.getMapControlManager().getAxisReferenceSymbol());
310
    }
311
  }
312

  
313
  public void setCurrentLayer(FLyrVect layer) {
314
    this.currentLayer = layer;
315
  }
316

  
307 317
  private void showCoords(Point point) {
308 318
    String[] axisText = new String[2];
309 319
    axisText[0] = "X = ";
......
338 348

  
339 349
  }
340 350

  
341
  public void mousePressed(MouseEvent e) throws BehaviorException {
342
    // TODO Auto-generated method stub
343
  }
351
  private void textEntered(String response) {
352
    int type = currentParam.getType();
353
    try {
354
      switch (type) {
355
        case EditingServiceParameter.TYPE_POINT:
356
          String[] numbers = new String[1];
357
          numbers[0] = response;
358
          numbers = response.split(",");
359
          if (numbers.length == 2) {
360
            if (numbers[0].startsWith("(") && numbers[1].endsWith(")\n")) { // CCS
361
              numbers[0] = numbers[0].replace("(", "");
362
              numbers[1] = numbers[1].replace(")\n", "");
363
            }
364
            double[] values = new double[] { Double.parseDouble(numbers[0]),
365
                Double.parseDouble(numbers[1]) };
366
            Point2D point = new Point2D.Double(values[0], values[1]);
367
            this.activatedTool.setValueParameter(currentParam, point);
344 368

  
345
  public void mouseReleased(MouseEvent e) throws BehaviorException {
346
    // TODO Auto-generated method stub
369
          }
370
          else {
371
            throw new RuntimeException("Datos inv?lidos: " + response);
372
          }
373
        case EditingServiceParameter.TYPE_LIST_POINTS:
374
        case EditingServiceParameter.TYPE_OPTION:
375
        case EditingServiceParameter.TYPE_SELECTION:
376
        case EditingServiceParameter.TYPE_GEOMETRY:
377
        case EditingServiceParameter.TYPE_VALUE:
378
      }
379
      getNextParameter();
380
    }
381
    catch (Exception e) {
382
      throw new RuntimeException("Datos inv?lidos: " + response);
383
    }
347 384
  }
348 385

  
349 386
}

Also available in: Unified diff