Revision 54

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingBehavior.java
13 13
import java.awt.event.MouseEvent;
14 14
import java.awt.geom.Point2D;
15 15
import java.awt.image.BufferedImage;
16
import java.util.ArrayList;
17 16
import java.util.HashMap;
18 17
import java.util.Iterator;
19 18
import java.util.List;
......
54 53
import org.gvsig.vectorediting.lib.api.EditingService;
55 54
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
56 55
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
57
import org.gvsig.vectorediting.lib.prov.circlecr.CircleCREditingProvider;
58 56
import org.gvsig.vectorediting.swing.api.EditingBehavior;
59 57
import org.slf4j.Logger;
60 58
import org.slf4j.LoggerFactory;
61 59

  
62
import com.vividsolutions.jts.geomgraph.Position;
63

  
64 60
public class DefaultEditingBehavior extends Behavior implements EditingBehavior {
65 61

  
66 62
	private static final Logger logger = LoggerFactory.getLogger(DefaultEditingBehavior.class);
......
114 110
					changeCurrentLayer((FLyrVect) layer);
115 111
					hideConsole();
116 112
					getMapControl().setTool("zoomIn");
117
					PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
118 113
				}
119 114
				changeCurrentLayer((FLyrVect) layer);
120 115

  
......
181 176

  
182 177
	public void activateTool(String name) {
183 178

  
184
		EditingManager manager = EditingLocator.getManager();
179
    EditingManager manager = EditingLocator.getManager();
185 180

  
186
		if (currentLayer != null) {
187
			EditingService service = serviceRegistration.get(currentLayer);
188
			if (service == null) {
189
				service = (EditingService) manager.getEditingService(name,
190
						currentLayer.getFeatureStore());
191
				serviceRegistration.put(currentLayer, service);
192
			}
193
			if (service != null) {
194
				this.activeService = service;
195
				service.start();
196
				getNextParameter();
197
			}
198
		}
199
	}
181
    if (currentLayer != null) {
182
      EditingService service = serviceRegistration.get(currentLayer);
183
      if(service == null || !service.getName().equals(name)){
184
        service = (EditingService) manager.getEditingService(name,
185
            currentLayer.getFeatureStore());
186
        serviceRegistration.put(currentLayer, service);
187
      }
188
      if (service != null) {
189
        this.activeService = service;
190
        service.start();
191
        getNextParameter();
192
      }
193
    }
194
  }
200 195

  
201 196
	private void askQuestion(EditingServiceParameter param) {
202 197
		if (getConsolePanel() != null) {
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.main/src/main/java/org/gvsig/vectorediting/main/Main.java
41 41
import javax.swing.WindowConstants;
42 42

  
43 43
import org.cresques.cts.IProjection;
44
import org.gvsig.editing.EditingNotificationManager;
45 44
import org.gvsig.fmap.crs.CRSFactory;
46 45
import org.gvsig.fmap.dal.DALLocator;
47 46
import org.gvsig.fmap.dal.DataManager;
......
51 50
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
52 51
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
53 52
import org.gvsig.fmap.dal.feature.FeatureStore;
53
import org.gvsig.fmap.geom.primitive.Envelope;
54
import org.gvsig.fmap.mapcontext.MapContext;
54 55
import org.gvsig.fmap.mapcontext.MapContextLocator;
55 56
import org.gvsig.fmap.mapcontext.MapContextManager;
56 57
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
57 58
import org.gvsig.fmap.mapcontext.layers.FLayer;
58
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
59 59
import org.gvsig.fmap.mapcontext.layers.order.impl.TrivialLayerOrderManager;
60
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
60 61
import org.gvsig.fmap.mapcontrol.MapControl;
61 62
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
62 63
import org.gvsig.fmap.mapcontrol.MapControlLocator;
63 64
import org.gvsig.fmap.mapcontrol.MapControlManager;
65
import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
66
import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
67
import org.gvsig.fmap.mapcontrol.tools.ZoomOutRightButtonListener;
64 68
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
69
import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
70
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
71
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
65 72
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
66
import org.gvsig.vectorediting.lib.api.EditingBehavior;
67 73
import org.gvsig.vectorediting.lib.api.EditingLocator;
68 74
import org.gvsig.vectorediting.lib.api.EditingManager;
69
import org.gvsig.vectorediting.lib.impl.DefaultEditingBehavior;
75
import org.gvsig.vectorediting.lib.prov.circlecr.CircleCREditingProviderFactory;
76
import org.gvsig.vectorediting.lib.prov.insertpoint.InsertPointEditingProviderFactory;
70 77
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
71 78
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
79
import org.gvsig.vectorediting.swing.api.EditingBehavior;
80
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
81
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
82
import org.gvsig.vectorediting.swing.impl.DefaultEditingBehavior;
72 83
import org.slf4j.Logger;
73 84
import org.slf4j.LoggerFactory;
74 85

  
......
84 95

  
85 96
  final EditingManager manager;
86 97

  
98
  final EditingSwingManager swingManager;
99

  
87 100
  final EditingProviderManager providerManager;
88 101

  
89 102
  final MapControlManager mapControlManager;
......
98 111

  
99 112
  FeatureStore store;
100 113

  
114
  FLyrVect currentLayer;
115

  
101 116
  final String DEFAULT_CRS_CODE = "EPSG:4326";
102 117

  
103 118
  IProjection defaultProjection;
......
108 123

  
109 124
  JFrame addLayerFrame;
110 125

  
126
  JFrame paletteTools;
127

  
111 128
  JTextField shpField;
112 129

  
113 130
  // Actions
131
  AbstractAction pan;
132

  
133
  AbstractAction zoom;
134

  
135
  AbstractAction zoomall;
136

  
137
  AbstractAction cleanMap;
138

  
139
  AbstractAction openAddLayerDialog;
140

  
141
  AbstractAction openPaletteTools;
142

  
114 143
  AbstractAction editingExtensionAction;
115 144

  
116
  AbstractAction insertPointAction;
145
  AbstractAction insertPoint;
117 146

  
118 147
  AbstractAction exit;
119 148

  
120 149
  AbstractAction addLayer;
121 150

  
122
  AbstractAction openAddLayerDialog;
151
  AbstractAction circleCr;
123 152

  
124 153
  public static void main(String args[]) {
125 154
    new DefaultLibrariesInitializer().fullInitialize();
......
129 158

  
130 159
  public Main() {
131 160
    manager = EditingLocator.getManager();
161
    swingManager = EditingSwingLocator.getSwingManager();
132 162
    providerManager = EditingProviderLocator.getProviderManager();
133 163
    mapControlManager = MapControlLocator.getMapControlManager();
134 164
    dataManager = DALLocator.getDataManager();
......
142 172
    try {
143 173
      mapControl = mapControlManager.createJMapControlPanel();
144 174
      editingBehavior = new DefaultEditingBehavior(mapControl);
145
    }
146
    catch (MapControlCreationException e) {
147
      // TODO Auto-generated catch block
148
      e.printStackTrace();
149
    }
175
      mapControl.addBehavior("zoom", new Behavior[] {
176
          new RectangleBehavior(new ZoomInListenerImpl(mapControl)),
177
          new PointBehavior(new ZoomOutRightButtonListener(mapControl)) });
178
      mapControl.addBehavior("pan", new MoveBehavior(new PanListenerImpl(
179
          mapControl)));
150 180

  
151
    IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
152
    mapControl.getViewPort().setProjection(defaultProjection);
153
    mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
154 181

  
155
    // Create actions
156
    try {
182
      IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
183
      mapControl.getViewPort().setProjection(defaultProjection);
184
      mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
185

  
186
      // Create actions
157 187
      createActions();
158 188
    }
159 189
    catch (MapControlCreationException e) {
160
      // TODO Auto-generated catch block
161
      e.printStackTrace();
190
      logger.error("Can't create mapControl");
162 191
    }
163 192

  
164 193
    // Create JFrame to show data
165 194
    mainFrame = new JFrame("Editing test app");
166 195
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
167
    mainFrame.setPreferredSize(new Dimension(600, 480));
196
    mainFrame.setPreferredSize(new Dimension(800, 680));
168 197
    mainFrame.add(mapControl, BorderLayout.CENTER);
169 198

  
170 199
    // Create JFrame to add layer
171 200
    createAddLayerJFrame();
172 201

  
202
    // create JFrame palette tools
203
    createShowPaletteTools();
204

  
173 205
    // Create menu bar
174 206
    createMenu();
175 207

  
......
178 210

  
179 211
    // Display the window.
180 212
    mainFrame.pack();
181
    mainFrame.setLocation(100, 100);
213
    mainFrame.setLocation(500, 0);
182 214
    mainFrame.setVisible(true);
183 215
  }
184 216

  
......
202 234

  
203 235
  }
204 236

  
237
  private void createShowPaletteTools() {
238
    paletteTools = new JFrame("Palette tools");
239
    paletteTools.setLayout(new GridLayout(20, 1, 1, 5));
240
    paletteTools.setPreferredSize(new Dimension(200, 600));
241
    paletteTools.pack();
242
    paletteTools.setLocation(0, 0);
243
    paletteTools.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
244

  
245
    JButton insertPointButton = new JButton(insertPoint);
246
    JButton circleCrButton = new JButton(circleCr);
247

  
248
    paletteTools.add(new JLabel("Insert tools"));
249
    paletteTools.add(insertPointButton);
250
    paletteTools.add(circleCrButton);
251
  }
252

  
205 253
  private void createToolBar() {
206 254
    JToolBar toolBar = new JToolBar();
207 255

  
208 256
    toolBar.add(new JButton(openAddLayerDialog));
209 257
    toolBar.add(new JButton(editingExtensionAction));
210
    toolBar.add(new JButton(insertPointAction));
258
    toolBar.add(new JButton(pan));
259
    toolBar.add(new JButton(zoom));
260
    toolBar.add(new JButton(zoomall));
261
    toolBar.add(new JButton(cleanMap));
262
    toolBar.add(new JButton(openPaletteTools));
211 263

  
212 264
    mainFrame.add(toolBar, BorderLayout.PAGE_START);
213 265
  }
......
222 274

  
223 275
    JMenu menuLayer = new JMenu("Layer");
224 276
    menuLayer.add(new JMenuItem(openAddLayerDialog));
277
    menuLayer.add(new JMenuItem(pan));
278
    menuLayer.add(new JMenuItem(zoom));
279
    menuLayer.add(new JMenuItem(zoomall));
280
    menuLayer.add(new JMenuItem(cleanMap));
225 281

  
226 282
    JMenu menuTool = new JMenu("Tools");
227 283
    menuTool.add(new JMenuItem(editingExtensionAction));
228 284
    menuTool.addSeparator();
229
    menuTool.add(new JMenuItem(insertPointAction));
285
    menuTool.add(new JMenuItem(insertPoint));
286
    menuTool.add(new JMenuItem(circleCr));
230 287

  
231 288
    menuBar.add(menuFile);
232 289
    menuBar.add(menuTool);
......
237 294
  @SuppressWarnings("serial")
238 295
  private void createActions() throws MapControlCreationException {
239 296

  
297
    pan = new AbstractAction("Pan") {
298

  
299
      public void actionPerformed(ActionEvent e) {
300
        mapControl.setTool("pan");
301
      }
302
    };
303

  
304
    zoom = new AbstractAction("Zoom") {
305

  
306
      public void actionPerformed(ActionEvent e) {
307
        mapControl.setTool("zoom");
308
      }
309
    };
310

  
311
    zoomall = new AbstractAction("Zoom all") {
312

  
313
      public void actionPerformed(ActionEvent e) {
314
        zoomAll();
315
      }
316
    };
317

  
318
    cleanMap = new AbstractAction("Clean Map") {
319

  
320
      public void actionPerformed(ActionEvent e) {
321
        MapContext mapContext = mapControl.getMapContext();
322
        mapContext.beginAtomicEvent();
323
        while (mapContext.getLayers().getLayersCount() > 0) {
324
          mapContext.getLayers().removeLayer(0);
325
        }
326
        mapContext.endAtomicEvent();
327
      }
328
    };
329

  
240 330
    openAddLayerDialog = new AbstractAction("Add layer") {
241 331

  
242 332
      public void actionPerformed(ActionEvent e) {
......
244 334
      }
245 335
    };
246 336

  
337
    openPaletteTools = new AbstractAction("Show palette tools") {
338

  
339
      public void actionPerformed(ActionEvent e) {
340
        paletteTools.setVisible(true);
341
      }
342
    };
343

  
247 344
    addLayer = new AbstractAction("OK") {
248 345

  
249 346
      public void actionPerformed(ActionEvent e) {
......
270 367
    editingExtensionAction = new AbstractAction("EditingExtension") {
271 368

  
272 369
      public void actionPerformed(ActionEvent e) {
273
        mapControl.setTool("VectorEditing");
274 370
        try {
275
          store.edit();
371
          swingManager.beginEdition(currentLayer, mapControl);
276 372
        }
277 373
        catch (DataException e1) {
278
          // TODO Auto-generated catch block
279 374
          e1.printStackTrace();
280 375
        }
281
        
282 376
        updateControls();
283 377
      }
284 378
    };
285 379

  
286
    insertPointAction = new AbstractAction("InsertPointAction") {
380
    insertPoint = new AbstractAction("InsertPointAction") {
287 381

  
288 382
      public void actionPerformed(ActionEvent e) {
289
        activateTool("InsertPoint");
383
        
384
        swingManager.activateTool(
385
            InsertPointEditingProviderFactory.PROVIDER_NAME, mapControl);
290 386
      }
291 387

  
292 388
    };
293
    insertPointAction.setEnabled(false);
294 389

  
390
    circleCr = new AbstractAction("CircleCrAction") {
391

  
392
      public void actionPerformed(ActionEvent e) {
393
        swingManager.activateTool(CircleCREditingProviderFactory.PROVIDER_NAME,
394
            mapControl);
395
      }
396
    };
295 397
  }
296 398

  
297 399
  private void updateControls() {
298
    insertPointAction.setEnabled(true);
400
    editingExtensionAction.setEnabled(false);
401
    insertPoint.setEnabled(true);
402
    circleCr.setEnabled(true);
299 403
  }
300 404

  
301
  private void activateTool(String name) {
302
    manager.activateTool(name, mapControl);
303
  }
304

  
305
  public void addLayer(String shpPath)
306
      throws InitializeException, ProviderNotRegisteredException,
307
      ValidateDataParametersException, LoadLayerException {
405
  public void addLayer(String shpPath) throws InitializeException,
406
      ProviderNotRegisteredException, ValidateDataParametersException,
407
      LoadLayerException {
308 408
    DataStoreParameters params;
309 409
    params = dataManager.createStoreParameters("Shape");
310
    
311
    String dbfPath = shpPath.substring(0, shpPath.length()-3).concat("dbf");
312
    String shxPath = shpPath.substring(0, shpPath.length()-3).concat("shx");
313
    
410

  
411
    String dbfPath = shpPath.substring(0, shpPath.length() - 3).concat("dbf");
412
    String shxPath = shpPath.substring(0, shpPath.length() - 3).concat("shx");
413

  
314 414
    File shpFile = new File(shpPath);
315 415
    File dbFile = new File(dbfPath);
316 416
    File shxFile = new File(shxPath);
......
325 425
    FLayer layer = mapContextManager.createLayer("prueba", store);
326 426
    mapControl.getMapContext().setOrderManager(layerOrderManager);
327 427
    mapControl.getMapContext().getLayers().addLayer(layer);
428
    mapControl.getMapContext().getLayers().setActive(true);
429
    try {
430
      currentLayer = (FLyrVect) layer;
431
    }
432
    catch (Exception e) {
433
      logger.error("Can't load layer " + e.getMessage());
434
    }
435

  
328 436
  }
329 437

  
438
  private void zoomAll() {
439
    MapContext mapContext = mapControl.getMapContext();
440
    Envelope all = mapContext.getLayers().getFullEnvelope();
441
    logger.info("Full extdents " + all.toString());
442
    mapContext.getViewPort().setEnvelope(all);
443
    mapContext.invalidate();
444
  }
445

  
330 446
  public JFrame getJFrame() {
331 447
    return this.addLayerFrame;
332 448
  }

Also available in: Unified diff