Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / EditionManager.java @ 5207

History | View | Annotate | Download (5.06 KB)

1
package com.iver.cit.gvsig;
2

    
3
import java.util.ArrayList;
4
import java.util.logging.Logger;
5

    
6
import com.iver.andami.PluginServices;
7
import com.iver.cit.gvsig.fmap.MapControl;
8
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
9
import com.iver.cit.gvsig.fmap.layers.FLayer;
10
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
11
import com.iver.cit.gvsig.fmap.layers.LayerEvent;
12
import com.iver.cit.gvsig.fmap.layers.LayerListener;
13
import com.iver.cit.gvsig.layers.FactoryLayerEdited;
14
import com.iver.cit.gvsig.layers.ILayerEdited;
15
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
16

    
17
/**
18
 * @author fjp
19
 *
20
 * El prop?sito de esta clase es centralizar el manejo de la
21
 * edici?n. Aqu? podemos encontrar una lista con todas
22
 * los temas en edici?n, y las propiedades que sean globales
23
 * e interesantes a la hora de ponerse a editar.
24
 * Por ejemplo, podemos poner aqu? el Grid que vamos a usar,
25
 * el MapControl que tenemos asociado, etc, etc.
26
 * Tambi?n ser? el responsable de mantener una lista de
27
 * listeners interesados en los eventos de edici?n, y
28
 * de lanzar los eventos que necesitemos.
29
 * Lo principal es una colecci?n de LayerEdited, y cada
30
 * LayerEdited es un wrapper alrededor de un tema que guarda
31
 * las propiedades de la edici?n.
32
 *
33
 * Nuevo: Llevar aqu? el control de las tablas en edici?n tambi?n
34
 * y centralizar los listeners interesados en los eventos de edici?n.
35
 *
36
 * TODO: Poner todo lo referente al EditionManager dentro de una vista.
37
 * para permitir tener varias vistas con temas en edici?n
38
 *
39
 */
40
public class EditionManager implements LayerListener {
41
        private ArrayList editedLayers = new ArrayList();
42
        private ArrayList editedTables = new ArrayList();
43
        //private ArrayList activeLayerEdited = new ArrayList();
44
        private MapControl mapCtrl = null;
45
        private ILayerEdited ile=null;
46
        //private int idActiveLayer=0;
47

    
48

    
49
        /**
50
         * @param lyr
51
         * @return
52
         */
53
        public ILayerEdited getLayerEdited(FLayer lyr)
54
        {
55
                ILayerEdited aux = null;
56
                for (int i=0; i < editedLayers.size(); i++)
57
                {
58
                        aux = (ILayerEdited) editedLayers.get(i);
59
                        if (aux.getLayer() == lyr)
60
                                return aux;
61
                }
62
                return null;
63
        }
64

    
65
        public void visibilityChanged(LayerEvent e) {
66
        }
67

    
68
        public void activationChanged(LayerEvent e) {
69
                if (e.getSource().isActive())
70
                        ile=getLayerEdited(e.getSource());
71
                if (ile.getLayer().equals(e.getSource())){
72

    
73
                        if (ile!=null && !ile.getLayer().isActive()) {
74
                        VectorialLayerEdited lastVLE = (VectorialLayerEdited)ile;
75
                        lastVLE.activationLost(e);
76
                }
77
                if (e.getSource() instanceof FLyrVect) {
78
                        VectorialLayerEdited vle = null;
79
                        vle=(VectorialLayerEdited)getLayerEdited(e.getSource());
80
                        // for (int i = 0; i < editedLayers.size(); i++) {
81
                        // vle = (VectorialLayerEdited) editedLayers.get(i);
82
                        // if (vle.getLayer().equals(e.getSource())) {
83
                                        // idActiveLayer = i;
84
                        ile=vle;
85
                        if (getMapControl()!=null && vle!=null && vle.getLayer().isActive()){
86
                                getMapControl().setTool("cadtooladapter");
87
                                vle.activationGained(e);
88
                                return;
89
                        }
90
                }
91
                // }
92
                // idActiveLayer=-1;
93
                //ile=null;
94
                if (getMapControl()!=null){
95
                        getMapControl().setTool("zoomIn");
96
                        PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
97
                }
98
                }
99
        }
100

    
101
        public void nameChanged(LayerEvent e) {
102
        }
103

    
104
        public void editionChanged(LayerEvent e) {
105
                Logger.global.info(e.toString());
106
                ILayerEdited lyrEdit = getLayerEdited(e.getSource());
107

    
108
                // Si no est? en la lista, comprobamos que est? en edici?n
109
                // y lo a?adimos
110
                if ((lyrEdit == null) && e.getSource().isEditing())
111
                {
112
                        lyrEdit = FactoryLayerEdited.createLayerEdited(e.getSource());
113
                        editedLayers.add(lyrEdit);
114
                        if (getMapControl()!=null){
115
                                getMapControl().setTool("cadtooladapter");
116
                                CADExtension.setCADTool("_selection",true);
117
                        }
118
                        PluginServices.getMainFrame().setSelectedTool("_selection");
119
                        //idActiveLayer = editedLayers.size() - 1;
120
                        ile=getLayerEdited(e.getSource());
121
                        System.out.println("NUEVA CAPA EN EDICION: " + lyrEdit.getLayer().getName());
122
                        //activationChanged(e);
123

    
124
                        // Ponemos el resto de temas desactivados
125
                        if (mapCtrl != null)
126
                                mapCtrl.getMapContext().getLayers().setActive(false);
127
                        // y activamos el nuevo.
128
                        e.getSource().setActive(true);
129

    
130
                        if (e.getSource() instanceof FLyrVect){
131
                                FLyrVect fLyrVect = (FLyrVect)e.getSource();
132
                                VectorialEditableAdapter vea =
133
                                        (VectorialEditableAdapter)fLyrVect.getSource();
134
                                vea.addEditionListener(new EditionChangeManager(fLyrVect));
135
                        }
136
                }else{
137
                        for (int i = 0; i < editedLayers.size(); i++) {
138
                                VectorialLayerEdited vle = (VectorialLayerEdited) editedLayers.get(i);
139
                                if (vle.equals(lyrEdit)) {
140
                                        editedLayers.remove(i);
141
                                        ile=null;
142
                                        //idActiveLayer=-1;
143
                                        return;
144
                                }
145
                        }
146
                }
147

    
148

    
149

    
150
        }
151

    
152
        /**
153
         * @return Returns the activeLayerEdited. Null if there isn't any active AND edited
154
         */
155
        public ILayerEdited getActiveLayerEdited() {
156
                return ile;
157
        }
158

    
159
        /**
160
         * @return Returns the mapCtrl.
161
         */
162
        public MapControl getMapControl() {
163
                return mapCtrl;
164
        }
165

    
166
        /**
167
         * @param mapCtrl The mapCtrl to set.
168
         */
169
        public void setMapControl(MapControl mapCtrl) {
170
                if (mapCtrl != null)
171
                {
172
                        this.mapCtrl = mapCtrl;
173
                        mapCtrl.getMapContext().getLayers().addLayerListener(this);
174
                }
175
        }
176

    
177

    
178
}