Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / StartEditing.java @ 9243

History | View | Annotate | Download (7.78 KB)

1 3698 caballero
package com.iver.cit.gvsig;
2
3 6856 fjp
import java.awt.Component;
4
5
import javax.swing.JOptionPane;
6
7 3698 caballero
import com.iver.andami.PluginServices;
8 5152 fjp
import com.iver.andami.messages.NotificationManager;
9 3698 caballero
import com.iver.andami.plugins.Extension;
10 6878 cesar
import com.iver.cit.gvsig.fmap.MapContext;
11 4118 caballero
import com.iver.cit.gvsig.fmap.MapControl;
12 5893 fjp
import com.iver.cit.gvsig.fmap.core.FShape;
13
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
14 6312 caballero
import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver;
15 5152 fjp
import com.iver.cit.gvsig.fmap.edition.EditionException;
16 3698 caballero
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
17 5893 fjp
import com.iver.cit.gvsig.fmap.edition.rules.IRule;
18
import com.iver.cit.gvsig.fmap.edition.rules.RulePolygon;
19 3808 fjp
import com.iver.cit.gvsig.fmap.layers.FLayer;
20 3698 caballero
import com.iver.cit.gvsig.fmap.layers.FLayers;
21
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
22 6312 caballero
import com.iver.cit.gvsig.fmap.layers.XMLException;
23
import com.iver.cit.gvsig.fmap.rendering.Legend;
24 4892 caballero
import com.iver.cit.gvsig.gui.cad.CADTool;
25
import com.iver.cit.gvsig.gui.tokenmarker.ConsoleToken;
26 6312 caballero
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
27 7304 caballero
import com.iver.cit.gvsig.project.documents.table.ProjectTable;
28
import com.iver.cit.gvsig.project.documents.table.gui.Table;
29 7410 caballero
import com.iver.cit.gvsig.project.documents.view.IProjectView;
30 7304 caballero
import com.iver.cit.gvsig.project.documents.view.gui.View;
31 4892 caballero
import com.iver.utiles.console.jedit.KeywordMap;
32
import com.iver.utiles.console.jedit.Token;
33 3698 caballero
34
/**
35
 * DOCUMENT ME!
36 4892 caballero
 *
37 3698 caballero
 * @author Vicente Caballero Navarro
38
 */
39 5005 jorpiell
public class StartEditing extends Extension {
40 6312 caballero
41 6604 caballero
//        private class MyAction extends AbstractAction
42
//        {
43
//
44
//                public void actionPerformed(ActionEvent e) {
45
//                        System.err.println("F3");
46
//                }
47
//
48
//        }
49 5845 fjp
50
        View vista;
51 4727 fjp
        /**
52 5005 jorpiell
         * @see com.iver.andami.plugins.IExtension#initialize()
53 4727 fjp
         */
54 5005 jorpiell
        public void initialize() {
55 4727 fjp
        }
56 3698 caballero
57 4727 fjp
        /**
58 5005 jorpiell
         * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
59 4727 fjp
         */
60
        public void execute(String actionCommand) {
61 5087 caballero
                CADExtension.initFocus();
62 6877 cesar
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
63 6880 cesar
                                .getActiveWindow();
64 3698 caballero
65 4727 fjp
                if (f instanceof View) {
66 5845 fjp
                        vista = (View) f;
67 4892 caballero
68 4727 fjp
                        vista.showConsole();
69 6604 caballero
                        MapControl mapControl = vista.getMapControl();
70 5104 caballero
                        EditionManager editionManager=CADExtension.getEditionManager();
71
                        editionManager.setMapControl(mapControl);
72
73 7410 caballero
                        IProjectView model = vista.getModel();
74 6878 cesar
                        MapContext mapa = model.getMapContext();
75 4727 fjp
                        FLayers layers = mapa.getLayers();
76 6856 fjp
                        boolean bEditingStarted = false;
77 4727 fjp
                        for (int i = 0; i < layers.getLayersCount(); i++) {
78
                                if (layers.getLayer(i) instanceof FLyrVect
79
                                                && layers.getLayer(i).isActive()) {
80
                                        /*
81
                                         * for (int j = 0; j < i; j++) {
82
                                         * layers.getLayer(j).setVisible(false); }
83
                                         */
84 3698 caballero
85 4727 fjp
                                        FLyrVect lv = (FLyrVect) layers.getLayer(i);
86
                                        // lv.setVisible(true);
87 6312 caballero
                                        lv.addLayerListener(editionManager);
88 5152 fjp
                                        try {
89 6312 caballero
                                                Legend legendOriginal=lv.getLegend().cloneLegend();
90
91 6856 fjp
                                    if (!lv.isWritable())
92
                                    {
93
                                                JOptionPane.showMessageDialog(
94 6880 cesar
                                                                (Component) PluginServices.getMDIManager().getActiveWindow(),
95 6856 fjp
                                                                PluginServices.getText(this, "this_layer_is_not_self_editable"),
96 7410 caballero
                                                                PluginServices.getText(this, "warning_title"),
97 6856 fjp
                                                                JOptionPane.WARNING_MESSAGE);
98
                                    }
99 7410 caballero
100 5152 fjp
                                                lv.setEditing(true);
101 5893 fjp
                                                VectorialEditableAdapter vea = (VectorialEditableAdapter) lv
102 6856 fjp
                                                .getSource();
103 7410 caballero
104 5893 fjp
                                                vea.getRules().clear();
105
                                                if (vea.getShapeType() == FShape.POLYGON)
106
                                                {
107
                                                        IRule rulePol = new RulePolygon();
108
                                                        vea.getRules().add(rulePol);
109
                                                }
110 6312 caballero
111
                                                if (!(lv.getSource().getDriver() instanceof IndexedShpDriver)){
112
                                                        VectorialLayerEdited vle=(VectorialLayerEdited)editionManager.getLayerEdited(lv);
113
                                                        vle.setLegend(legendOriginal);
114
                                                }
115 5893 fjp
                                                vea.getCommandRecord().addCommandListener(mapControl);
116
                                                // Si existe una tabla asociada a esta capa se cambia su
117
                                                // modelo por el VectorialEditableAdapter.
118
                                                ProjectExtension pe = (ProjectExtension) PluginServices
119
                                                                .getExtension(ProjectExtension.class);
120
                                                ProjectTable pt = pe.getProject().getTable(lv);
121
                                                if (pt != null){
122
                                                        pt.setModel(vea);
123
                                                        changeModelTable(pt);
124
                                                }
125
                                                startCommandsApplicable(vista,lv);
126 6312 caballero
                                                vista.repaintMap();
127 5152 fjp
                                        } catch (EditionException e) {
128
                                                e.printStackTrace();
129
                                                NotificationManager.addError(e);
130 5893 fjp
                                        } catch (DriverIOException e) {
131
                                                e.printStackTrace();
132
                                                NotificationManager.addError(e);
133 6312 caballero
                                        } catch (XMLException e) {
134
                                                e.printStackTrace();
135 5152 fjp
                                        }
136 6312 caballero
137 5845 fjp
//                                        return;
138 4727 fjp
                                }
139
                        }
140 3698 caballero
141 4727 fjp
                        /*
142
                         * PluginServices.getMDIManager().setWaitCursor(); try { if
143
                         * (((FLyrVect) capa).getSource().getDriver().getClass() ==
144
                         * DXFCadDriver.class) { if (JOptionPane.showConfirmDialog(
145
                         * (Component) PluginServices.getMainFrame(), "Todas las geometr?as
146
                         * del formato DXF no se pueden editar, de momento podemos editar:
147
                         * Line, Point, Polyline, Arc, Circle y Ellipse. \n El resto de
148
                         * geometr?as se perder?n con la edici?n. \n ?Desea continuar?") ==
149
                         * JOptionPane.YES_OPTION) { capa.startEdition();
150
                         * vista.getMapControl().setCadTool("selection"); } else { } } else {
151
                         * capa.startEdition();
152
                         * vista.getMapControl().setCadTool("selection"); } } catch
153
                         * (EditionException e) { // TODO Auto-generated catch block
154
                         * e.printStackTrace(); }
155
                         * PluginServices.getMDIManager().restoreCursor();
156
                         */
157
                        // vista.getMapControl().drawMap(false);
158
                }
159
        }
160 5845 fjp
//         private void registerKeyStrokes() {
161
//                 JComponent theComponent = vista.getConsolePanel().getTxt();
162 6312 caballero
//
163 5845 fjp
//                 // The actions
164
//                 Action F3Action = new AbstractAction("REFENT") {
165
//                        public void actionPerformed(ActionEvent evt) {
166
//                                System.err.println("SOY F3");
167
//                        }
168
//                };
169
//
170
//                 InputMap inputMap = theComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
171
//                 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0), F3Action.getValue(Action.NAME));
172
//
173
//                 ActionMap actionMap = theComponent.getActionMap();
174 6312 caballero
//                 // actionMap.put("REFENT", new MyAction());
175 5845 fjp
//                 actionMap.put(F3Action.getValue(Action.NAME), F3Action);
176 6312 caballero
//
177 5845 fjp
//        }
178
179
        public static void startCommandsApplicable(View vista,FLyrVect lv) {
180 5207 caballero
                if (vista==null)
181 6880 cesar
                        vista=(View)PluginServices.getMDIManager().getActiveWindow();
182 5177 caballero
                CADTool[] cadtools = CADExtension.getCADTools();
183
                KeywordMap keywordMap = new KeywordMap(true);
184
                for (int i = 0; i < cadtools.length; i++) {
185
                        try {
186
                                if (cadtools[i].isApplicable(lv.getShapeType())){
187
                                        keywordMap.add(cadtools[i].getName(), Token.KEYWORD2);
188
                                        keywordMap.add(cadtools[i].toString(), Token.KEYWORD3);
189
                                }
190
                        } catch (com.iver.cit.gvsig.fmap.DriverException e) {
191
                                e.printStackTrace();
192
                        }
193
194
                }
195
                ConsoleToken consoletoken = new ConsoleToken(keywordMap);
196
                vista.getConsolePanel().setTokenMarker(consoletoken);
197
198
        }
199
200
        private void changeModelTable(ProjectTable pt){
201 6880 cesar
             com.iver.andami.ui.mdiManager.IWindow[] views = PluginServices.getMDIManager().getAllWindows();
202 3698 caballero
203 5104 caballero
                 for (int i=0 ; i<views.length ; i++){
204
                         if (views[i] instanceof Table){
205
                                 Table table=(Table)views[i];
206
                                 ProjectTable model =table.getModel();
207
                                 if (model.equals(pt)){
208
                                                 table.setModel(pt);
209
                                 }
210
                         }
211
                 }
212
    }
213 4727 fjp
        /**
214 5005 jorpiell
         * @see com.iver.andami.plugins.IExtension#isEnabled()
215 4727 fjp
         */
216
        public boolean isEnabled() {
217 6880 cesar
                View f = (View) PluginServices.getMDIManager().getActiveWindow();
218 3698 caballero
219 3808 fjp
                if (f == null) {
220
                        return false;
221
                }
222 3698 caballero
223 4727 fjp
                FLayer[] selected = f.getModel().getMapContext().getLayers()
224
                                .getActives();
225 6779 jmvivo
                if (selected.length == 1 && selected[0].isAvailable() && selected[0] instanceof FLyrVect) {
226 3808 fjp
                        if (selected[0].isEditing())
227
                                return false;
228 6604 caballero
                        return true;
229 3808 fjp
                }
230
                return false;
231 4727 fjp
        }
232 3698 caballero
233 4727 fjp
        /**
234 5005 jorpiell
         * @see com.iver.andami.plugins.IExtension#isVisible()
235 4727 fjp
         */
236
        public boolean isVisible() {
237 6877 cesar
                com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
238 6880 cesar
                                .getActiveWindow();
239 3698 caballero
240 4727 fjp
                if (f == null) {
241
                        return false;
242
                }
243 3698 caballero
244 6604 caballero
                if (f instanceof View)
245 4727 fjp
                        return true;
246 6604 caballero
                return false;
247 4727 fjp
        }
248 3698 caballero
}