Revision 672

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/EditingExtension.java
25 25

  
26 26
import java.io.File;
27 27
import java.util.ArrayList;
28
import java.util.Iterator;
29 28
import java.util.List;
29
import javax.swing.JOptionPane;
30
import org.apache.commons.io.FileUtils;
30 31

  
31 32
import org.slf4j.Logger;
32 33
import org.slf4j.LoggerFactory;
33 34

  
34 35
import org.gvsig.andami.IconThemeHelper;
35 36
import org.gvsig.andami.PluginServices;
36
import org.gvsig.andami.PluginsLocator;
37
import org.gvsig.andami.actioninfo.ActionInfoManager;
38 37
import org.gvsig.andami.plugins.Extension;
39 38
import org.gvsig.andami.plugins.IExtension;
40 39
import org.gvsig.andami.plugins.status.IExtensionStatus;
......
44 43
import org.gvsig.andami.ui.mdiManager.SingletonWindow;
45 44
import org.gvsig.app.ApplicationLocator;
46 45
import org.gvsig.app.ApplicationManager;
47
import org.gvsig.app.project.DocumentsContainer;
46
import org.gvsig.app.project.Project;
48 47
import org.gvsig.app.project.documents.Document;
49 48
import org.gvsig.app.project.documents.gui.IDocumentWindow;
50 49
import org.gvsig.app.project.documents.view.ViewDocument;
50
import org.gvsig.app.project.documents.view.ViewManager;
51 51
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
52 52
import org.gvsig.app.project.documents.view.gui.IView;
53 53
import org.gvsig.app.project.documents.view.toc.actions.EndEditingTocMenuEntry;
......
82 82

  
83 83
public class EditingExtension extends Extension implements Observer {
84 84

  
85
    private static Logger logger = LoggerFactory.getLogger(EditingExtension.class);
85
    private static final Logger logger = LoggerFactory.getLogger(EditingExtension.class);
86 86

  
87
    @Override
87 88
    public void execute(String actionCommand) {
88 89

  
90
        ApplicationManager application = ApplicationLocator.getManager();
89 91
        IView view = getActiveView();
90
        EditingSwingManager swingManager =
91
            EditingSwingLocator.getSwingManager();
92
        EditingSwingManager swingManager = EditingSwingLocator.getSwingManager();
92 93

  
93 94
        if (view != null) {
94 95

  
95 96
            FLyrVect layer = getActiveLayer(view);
96
            EditingContext editingContext =
97
                swingManager.getEditingContext(view.getMapControl());
97
            MapControl mapControl = view.getMapControl();
98
            EditingContext editingContext = swingManager.getEditingContext(mapControl);
98 99

  
99 100
            if ("start-editing".equals(actionCommand)) {
100 101

  
101 102
                if (canBeEdited(layer)) {
102
                    MapControl mapControl = view.getMapControl();
103
                    StatusBarListener sbl = new StatusBarListener(mapControl);
103
                    if( !mapControl.getProjection().equals(layer.getProjection()) ) {
104
                        String msg = "_The_layer_is_reproyected_on_the_fly" 
105
                                + "_Not_all_editing_tools_work_properly"
106
                                + "_When_you_finish_editing"
107
                                + "_will_only_export_the_changes_to_another_layer";
108
                        application.messageDialog(msg, "_Warning", JOptionPane.WARNING_MESSAGE);
109
                    }
104 110
                    editingContext.beginEdition(layer);
105 111
                    editingContext.addObserver(this);
106 112
                    ApplicationLocator.getManager().refreshMenusAndToolBars();
......
117 123
        }
118 124
    }
119 125

  
126
    @Override
120 127
    public void initialize() {
121 128
        registerIcons();
122 129

  
......
148 155

  
149 156
        MapControlLocator.getMapControlManager().addMapControlCreationListener(new MapControlCreationListener() {
150 157

  
158
            @Override
151 159
            public MapControl mapControlCreated(MapControl mapControl) {
152 160
                EditingContext editingContext = EditingSwingLocator.getSwingManager().getEditingContext(mapControl);
153 161
                StatusBarListener sbl = new StatusBarListener(mapControl);
......
166 174
     */
167 175
    private void registerSymbols() {
168 176

  
169
        EditingProviderManager providerManager =
170
            EditingProviderLocator.getProviderManager();
177
        EditingProviderManager providerManager = EditingProviderLocator.getProviderManager();
171 178

  
172 179
        SymbolManager symbolManager = MapContextLocator.getSymbolManager();
173
        File pluginFolder = getPlugin().getPluginDirectory();
174
        String pathSeparator = System.getProperty("file.separator");
175
        String symbolsPath = pluginFolder.getAbsolutePath()+pathSeparator+"symbols"+pathSeparator+"editing";
176
        File symbolsFolder = new File(symbolsPath);
180
        File symbolsFolder = FileUtils.getFile(getPlugin().getPluginDirectory(), "symbols","editing");
177 181
        ISymbol[] symbols = null;
178 182
        try {
179 183
            symbols = symbolManager.loadSymbols(symbolsFolder);
180 184
        } catch (SymbolException e) {
181
            logger.warn("No symbols loaded from "+symbolsPath, e);
185
            logger.warn("No symbols loaded from "+symbolsFolder.getAbsolutePath(), e);
182 186
        }
183 187

  
184 188
        if (symbols != null) {
185
            for (int i = 0; i < symbols.length; i++) {
186
                ISymbol symbol = symbols[i];
189
            for (ISymbol symbol : symbols) {
187 190
                String description = symbol.getDescription();
188 191
                providerManager.registerSymbol(description, symbol);
189 192
            }
190 193
        }
191 194
    }
192 195

  
196
    @Override
193 197
    public boolean isEnabled() {
194 198
        return true;
195 199
    }
196 200

  
201
    @Override
197 202
    public boolean isVisible() {
198 203
        return true;
199 204
    }
......
269 274
        return null;
270 275
    }
271 276

  
277
    @Override
272 278
    public void update(Observable observable, Object notification) {
273 279

  
274 280
        if (notification instanceof Notification){
......
277 283
            Notification n = (Notification)notification;
278 284
            if (n.getType().equalsIgnoreCase(EditingContext.CHANGE_SELECTED_TOOL_NOTIFICATION)){
279 285
                String name = (String)n.getValue();
280
                logger.info("Changed selected tool to '{}'", name);
286
                logger.trace("Changed selected tool to '{}'", name);
281 287
                PluginServices.getMainFrame().setSelectedTool(name);
282 288
                appManager.refreshMenusAndToolBars();
283 289

  
......
288 294
    }
289 295

  
290 296
    private List<FLyrVect> getEditedLayers(){
291
        List<FLyrVect> editedLayers = new ArrayList<FLyrVect>();
292

  
293 297
        ApplicationManager application = ApplicationLocator.getManager();
294
        IWindow[] windows = application.getUIManager().getOrderedWindows();
295
        for (int i = 0; i < windows.length; i++) {
296
            IWindow window = windows[i];
297
            if (window instanceof SingletonWindow && window instanceof IDocumentWindow) {
298
                // Recorremos las ventanas.
299
                // Cogemos el model de aquellas que sea de tipo Document.
300
                // Si el model es de tipo View,
301
                // comprobamos que adem?s sean de tipo View.
302
                // Le pedimos al mapContext de la View las layers
303
                // y a?adimos a editedLayers aquellas layers vectoriales que est?n en edici?n.
304
                Document document;
305
                try {
306
                    document = (Document) ((SingletonWindow) window).getWindowModel();
307
                } catch (ClassCastException e) {
308
                    // Do nothing, skip this window
309
                    continue;
310
                }
311
                if (ViewDocument.class.isAssignableFrom(document.getClass())) {
312
                    ViewDocument view = (ViewDocument) document;
313
                    MapContext mapContext = view.getMapContext();
314
                    if (mapContext != null) {
315
                        FLayers layers = mapContext.getLayers();
316
                        for (int j = 0; j < layers.getLayersCount(); j++) {
317
                            FLayer lyr = layers.getLayer(j);
318
                            if (lyr instanceof FLyrVect) {
319
                                FLyrVect layerVect = (FLyrVect) lyr;
320
                                if (layerVect.isEditing()) {
321
                                    editedLayers.add(layerVect);
322
                                }
323
                            }
298
        List<FLyrVect> editedLayers = new ArrayList<>();
299
        
300
        Project project = application.getCurrentProject();
301
        for( Document document : project.getDocuments(ViewManager.TYPENAME) ) {
302
            ViewDocument view = (ViewDocument) document;
303
            MapContext mapContext = view.getMapContext();
304
            if (mapContext != null) {
305
                FLayers layers = mapContext.getLayers();
306
                for (int j = 0; j < layers.getLayersCount(); j++) {
307
                    FLayer lyr = layers.getLayer(j);
308
                    if (lyr instanceof FLyrVect) {
309
                        FLyrVect layerVect = (FLyrVect) lyr;
310
                        if (layerVect.isEditing()) {
311
                            editedLayers.add(layerVect);
324 312
                        }
325 313
                    }
326 314
                }
......
330 318
    }
331 319

  
332 320
    private List<IUnsavedData> getUnsavedData(List<FLyrVect> editedLayers){
333
        List<IUnsavedData> unsavedData = new ArrayList<IUnsavedData>();
334
        for (Iterator iterator = editedLayers.iterator(); iterator.hasNext();) {
335
            FLyrVect editedLayer = (FLyrVect) iterator.next();
321
        List<IUnsavedData> unsavedData = new ArrayList<>();
322
        for (FLyrVect editedLayer : editedLayers) {
336 323
            IUnsavedData unsavedDataLayer = new UnsavedLayer(this, editedLayer);
337 324
            unsavedData.add(unsavedDataLayer);
338 325
        }
......
341 328
    }
342 329

  
343 330
    private static class UnsavedLayer extends UnsavedData {
344
        private FLyrVect layer;
331
        private final FLyrVect layer;
345 332

  
346 333
        public UnsavedLayer(IExtension extension, FLyrVect layer) {
347 334
            super(extension);
......
380 367

  
381 368
        return new IExtensionStatus() {
382 369

  
370
            @Override
383 371
            public boolean hasUnsavedData() {
384 372
                if(unsavedData == null){
385 373
                    return false;
......
387 375
                return !unsavedData.isEmpty();
388 376
            }
389 377

  
378
            @Override
390 379
            public boolean hasRunningProcesses() {
391 380
                return false;
392 381
            }
393 382

  
383
            @Override
394 384
            public IUnsavedData[] getUnsavedData() {
395 385
                if(unsavedData == null){
396 386
                    return null;
......
398 388
                return unsavedData.toArray(new IUnsavedData[0]);
399 389
            }
400 390

  
391
            @Override
401 392
            public IMonitorableTask[] getRunningProcesses() {
402 393
                return null;
403 394
            }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
start_editing = Comenzar edici\u00F3n
2
end_editing = Terminar edici\u00F3n
1
start_editing = Comenzar edici\u00f3n
2
end_editing = Terminar edici\u00f3n
3 3
insert_point = Insertar punto
4 4
insert_multipoint = Insertar MultiPunto
5
insert_line = Insertar l\u00EDnea
5
insert_line = Insertar l\u00ednea
6 6
insert_arc = Insertar arco
7
insert_circle_cr = Insertar c\u00EDrculo (centro y radio)
7
insert_circle_cr = Insertar c\u00edrculo (centro y radio)
8 8
insert_circumference_cr = Insertar circunferencia (centro y radio)
9
insert_circle_3p = Insertar c\u00EDrculo (tres puntos)
9
insert_circle_3p = Insertar c\u00edrculo (tres puntos)
10 10
insert_circumference_3p = Insertar circunferencia (tres puntos)
11 11
insert_ellipse = Insertar elipse
12 12
insert_filled_ellipse = Insertar elipse rellena
13
insert_polyline = Insertar polil\u00EDnea
14
insert_polygon = Insertar pol\u00EDgono
15
insert_regular_polygon = Insertar pol\u00EDgono regular
16
insert_filled_regular_polygon = Insertar pol\u00EDgono regular relleno
17
insert_rectangle = Insertar rect\u00E1ngulo
18
insert_filled_rectangle =  Insertar rect\u00E1ngulo relleno
13
insert_polyline = Insertar polil\u00ednea
14
insert_polygon = Insertar pol\u00edgono
15
insert_regular_polygon = Insertar pol\u00edgono regular
16
insert_filled_regular_polygon = Insertar pol\u00edgono regular relleno
17
insert_rectangle = Insertar rect\u00e1ngulo
18
insert_filled_rectangle =  Insertar rect\u00e1ngulo relleno
19 19
insert_spline= Insertar curva spline
20 20
insert_filled_spline = Insertar curva spline rellena
21
insert_rectangular_matrix = Matriz rectangular de geometr\u00EDas
22
insert_polar_matrix = Matriz polar de geometr\u00EDas
23
modify_internal_polygon = Pol\u00EDgono interno
24
modify_explode_geometry = Descomponer geometr\u00EDa
25
modify_move = Mover geometr\u00EDa
26
modify_rotate = Rotar geometr\u00EDa
27
modify_duplicate = Duplicar geometr\u00EDa
21
insert_rectangular_matrix = Matriz rectangular de geometr\u00edas
22
insert_polar_matrix = Matriz polar de geometr\u00edas
23
modify_internal_polygon = Pol\u00edgono interno
24
modify_explode_geometry = Descomponer geometr\u00eda
25
modify_move = Mover geometr\u00eda
26
modify_rotate = Rotar geometr\u00eda
27
modify_duplicate = Duplicar geometr\u00eda
28 28
modify_split_line = Partir linea por un punto
29
modify_split = Partir geometr\u00EDa
30
modify_scale = Escalar geometr\u00EDa
31
modify_simplify = Simplificar geometr\u00EDa
32
modify_join = Unir geometr\u00EDas
33
insert_autopolygon = Insertar autopol\u00EDgono
34
modify_stretch = Estirar geometr\u00EDa
35
modify_extend_line = Alargar l\u00EDnea hasta objeto
36
modify_trim_line = Recortar l\u00EDnea por un objeto
37
modify_edit_vertex = Editar v\u00E9rtice
38
modify_convert_to_polyline= Convertir a polil\u00EDnea
39
modify_reverse_direction=Invertir direcci\u00F3n
40
uniqueselection = Seleccione una \u00FAnica geometr\u00EDa
41
selectvertex = Seleccione un v\u00E9rtice
42
new_position = Nueva posici\u00F3n
43
insert_vertex = Insertar v\u00E9rtice
44
remove_vertex = Eliminar v\u00E9rtice
45
selection=Selecci\u00F3n
46
invalid_option=Opci\u00F3n no v\u00E1lida
29
modify_split = Partir geometr\u00eda
30
modify_scale = Escalar geometr\u00eda
31
modify_simplify = Simplificar geometr\u00eda
32
modify_join = Unir geometr\u00edas
33
insert_autopolygon = Insertar autopol\u00edgono
34
modify_stretch = Estirar geometr\u00eda
35
modify_extend_line = Alargar l\u00ednea hasta objeto
36
modify_trim_line = Recortar l\u00ednea por un objeto
37
modify_edit_vertex = Editar v\u00e9rtice
38
modify_convert_to_polyline= Convertir a polil\u00ednea
39
modify_reverse_direction=Invertir direcci\u00f3n
40
uniqueselection = Seleccione una \u00fanica geometr\u00eda
41
selectvertex = Seleccione un v\u00e9rtice
42
new_position = Nueva posici\u00f3n
43
insert_vertex = Insertar v\u00e9rtice
44
remove_vertex = Eliminar v\u00e9rtice
45
selection=Selecci\u00f3n
46
invalid_option=Opci\u00f3n no v\u00e1lida
47 47
center=Centro
48 48
radius=Radio
49 49
save_changes_performed=Guardar cambios realizados
50 50
discard= Descartar
51 51
discard_and_loose_changes= Descartar cambios y perder los cambios
52 52
continue= Continuar
53
do_not_save_yet_stay_in_editing_mode= No guardar los cambios y seguir en modo edici\u00F3n
53
do_not_save_yet_stay_in_editing_mode= No guardar los cambios y seguir en modo edici\u00f3n
54 54
indicate_new_point= Indique un nuevo punto
55 55
arc_mode = Modo arco
56
line_mode = Modo l\u00EDnea
56
line_mode = Modo l\u00ednea
57 57
select_new_tool= Seleccione una nueva herramienta
58
draw_geometry_to_internal_polygon= Seleccione una herramienta para dibujar un pol\u00EDgono interno
59
draw_geometry_to_autopolygon = Seleccione una herramienta para dibujar un autopol\u00EDgono
60
draw_geometry_to_split = Seleccione una herramienta para partir las geometr\u00EDas
61
draw_geometry_to_select_vertex = Seleccione una herramienta poligonal para seleccionar v\u00E9rtices
58
draw_geometry_to_internal_polygon= Seleccione una herramienta para dibujar un pol\u00edgono interno
59
draw_geometry_to_autopolygon = Seleccione una herramienta para dibujar un autopol\u00edgono
60
draw_geometry_to_split = Seleccione una herramienta para partir las geometr\u00edas
61
draw_geometry_to_select_vertex = Seleccione una herramienta poligonal para seleccionar v\u00e9rtices
62 62
save = Guardar
63 63
discard = Descartar
64 64
continue = Continuar
65 65
export = Exportar
66
ask_save_layer = \u00BFDesea guardar la capa
67
can_not_write_layer =  No existe writer para este formato de capa o no tiene permisos de escritura.\n\u00BFQu\u00E9 desea hacer?
66
ask_save_layer = \u00bfDesea guardar la capa
67
can_not_write_layer =  No existe writer para este formato de capa o no tiene permisos de escritura.\n\u00bfQu\u00e9 desea hacer?
68 68
save_changes_performed = Guardar cambios realizados
69 69
discard_and_loose_changes = Descartar y perder los cambios
70 70
export_to_another_format = Exportar a otro formato
......
81 81
inscribed = Inscrito
82 82
circumscribed = Circunscrito
83 83
sides_of_regular_polygon = Indique los lados del poligono regular
84
center_of_regular_polygon = Centro del pol\u00EDguno regular
85
point_of_circle = Punto del c\u00EDrculo del pol\u00EDgono
84
center_of_regular_polygon = Centro del pol\u00edguno regular
85
point_of_circle = Punto del c\u00edrculo del pol\u00edgono
86 86
sides = Lados
87 87
key_arc_mode = A
88 88
key_line_mode = L
......
91 91
key_inscribed = I
92 92
key_circumscribed = C
93 93
key_remove_last_point = Q
94
remove_last_point = Quitar \u00FAltimo punto
95
close_polyline = Cerrar polil\u00EDnea
94
remove_last_point = Quitar \u00faltimo punto
95
close_polyline = Cerrar polil\u00ednea
96 96
close_spline = Cerrar curva spline
97 97
new_point = Nuevo punto
98 98
new_value = Nuevo valor
99 99
finished = finalizada
100
center_of_rotation = Centro de rotaci\u00F3n
101
angle_of_rotation = \u00C1ngulo de rotaci\u00F3n (grados)
100
center_of_rotation = Centro de rotaci\u00f3n
101
angle_of_rotation = \u00c1ngulo de rotaci\u00f3n (grados)
102 102
origin_point = Origen
103 103
scale_factor_or_reference_point = Factor de escala o punto de referencia
104 104
second_scale_point = Segundo punto para la escala
105 105
tolerance = Tolerancia
106
line_to_extend = Seleccione l\u00EDnea para alargar
107
line_to_trim = Seleccione l\u00EDnea para partir
108
modify_smooth_line = Suavizar l\u00EDnea
106
line_to_extend = Seleccione l\u00ednea para alargar
107
line_to_trim = Seleccione l\u00ednea para partir
108
modify_smooth_line = Suavizar l\u00ednea
109 109
intermediate_steps_1_9 = Pasos intermedios [1,9]
110 110
algorithm = algoritmo
111
natural_cubic_splines = Splines c\u00FAbicos naturales
112
bezier_curves = Curvas B\u00E9zier
111
natural_cubic_splines = Splines c\u00fabicos naturales
112
bezier_curves = Curvas B\u00e9zier
113 113
b_splines = B-splines
114 114
key_natural_cubic_splines = 1
115 115
key_bezier_curves = 2
116 116
key_b_splines = 3
117
columns_number = N\u00FAmero de columnas
118
rows_number = N\u00FAmero de filas
117
columns_number = N\u00famero de columnas
118
rows_number = N\u00famero de filas
119 119
distance_between_columns = Distancia entre columnas
120 120
distance_between_rows = Distancia entre filas
121 121
key_yes= S
122 122
key_no = N
123 123
yes = Si
124 124
no = No
125
number_of_total_elements = N\u00FAmero de elementos totales
125
number_of_total_elements = N\u00famero de elementos totales
126 126
rotate_elements = Rotar elementos?
127 127
angle_between_elements = Angulo entre elementos
128 128
modify = modificar
129 129
insert = insertar
130 130
Modify = Modificar
131
Insert = Insertar
131
Insert = Insertar
132
_The_layer_is_reproyected_on_the_fly_Not_all_editing_tools_work_properly_When_you_finish_editing_will_only_export_the_changes_to_another_layer=The layer is reproyected on the fly.\nNot all editing tools work properly.\nWhen you finish editing will only export the changes to another layer will be allowed.
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
128 128
modify = modify
129 129
insert = insert
130 130
Modify = Modify
131
Insert = Insert
131
Insert = Insert
132
_The_layer_is_reproyected_on_the_fly_Not_all_editing_tools_work_properly_When_you_finish_editing_will_only_export_the_changes_to_another_layer=La capa esta reproyectada el vuelo.\nNo todas las herramientas de edici\u00f3n funcionar\u00e1n correctamente.\nCuando termine edici\u00f3n solo podra extortar los cambios a otra capa.
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingContext.java
587 587
            EditingSwingManager swingManager =
588 588
                EditingSwingLocator.getSwingManager();
589 589

  
590
            if (layer.isWritable()) {
590
            
591
            if (layer.isWritable() && getMapControl().getProjection().equals(layer.getProjection()) ) {
591 592
                option =
592 593
                    swingManager.showPanelSaveOrDiscard(getMapControl(),
593 594
                        layer.getName());

Also available in: Unified diff