Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / View.java @ 3718

History | View | Annotate | Download (15.6 KB)

1 1103 fjp
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41 312 fernando
package com.iver.cit.gvsig.gui;
42
43
import java.awt.BorderLayout;
44
import java.awt.Color;
45
import java.awt.Dimension;
46 596 fernando
import java.awt.image.BufferedImage;
47 644 fernando
import java.beans.PropertyChangeEvent;
48
import java.beans.PropertyChangeListener;
49 3714 caballero
import java.util.HashMap;
50
import java.util.Iterator;
51 312 fernando
52 3714 caballero
import javax.swing.FocusManager;
53 312 fernando
import javax.swing.JPanel;
54
import javax.swing.JSplitPane;
55
56 904 fjp
import org.cresques.cts.IProjection;
57
58 596 fernando
import com.iver.andami.PluginServices;
59 755 fernando
import com.iver.andami.messages.NotificationManager;
60 596 fernando
import com.iver.andami.ui.mdiManager.SingletonView;
61
import com.iver.andami.ui.mdiManager.ViewInfo;
62 960 vcaballero
import com.iver.andami.ui.mdiManager.ViewListener;
63 1062 fernando
import com.iver.cit.gvsig.fmap.ColorEvent;
64
import com.iver.cit.gvsig.fmap.ExtentEvent;
65 312 fernando
import com.iver.cit.gvsig.fmap.FMap;
66 1223 fernando
import com.iver.cit.gvsig.fmap.MapControl;
67 1062 fernando
import com.iver.cit.gvsig.fmap.ViewPortListener;
68 899 vcaballero
import com.iver.cit.gvsig.fmap.core.v02.FConstant;
69 3714 caballero
import com.iver.cit.gvsig.fmap.layers.FLayers;
70
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
71 1115 fjp
import com.iver.cit.gvsig.fmap.tools.ZoomOutRightButtonListener;
72 1221 fernando
import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
73
import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
74
import com.iver.cit.gvsig.fmap.tools.Behavior.MoveBehavior;
75
import com.iver.cit.gvsig.fmap.tools.Behavior.PointBehavior;
76 2209 vcaballero
import com.iver.cit.gvsig.fmap.tools.Behavior.PolygonBehavior;
77
import com.iver.cit.gvsig.fmap.tools.Behavior.PolylineBehavior;
78 1221 fernando
import com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior;
79 480 fjp
import com.iver.cit.gvsig.gui.toc.TOC;
80 775 vcaballero
import com.iver.cit.gvsig.gui.toolListeners.AreaListener;
81
import com.iver.cit.gvsig.gui.toolListeners.InfoListener;
82
import com.iver.cit.gvsig.gui.toolListeners.LinkListener;
83 666 fernando
import com.iver.cit.gvsig.gui.toolListeners.MeasureListener;
84 842 vcaballero
import com.iver.cit.gvsig.gui.toolListeners.PanListener;
85
import com.iver.cit.gvsig.gui.toolListeners.PointSelectListener;
86
import com.iver.cit.gvsig.gui.toolListeners.RectangleSelectListener;
87 2183 fernando
import com.iver.cit.gvsig.gui.toolListeners.SaveRasterListener;
88
import com.iver.cit.gvsig.gui.toolListeners.SelectImageListener;
89 1009 vcaballero
import com.iver.cit.gvsig.gui.toolListeners.StatusBarListener;
90 842 vcaballero
import com.iver.cit.gvsig.gui.toolListeners.ZoomInListener;
91
import com.iver.cit.gvsig.gui.toolListeners.ZoomOutListener;
92 2359 igbrotru
import com.iver.cit.gvsig.gui.toolListeners.ZoomPixelCursorListener;
93 1221 fernando
import com.iver.cit.gvsig.project.ProjectView;
94 3714 caballero
import com.iver.utiles.console.JConsole;
95
import com.iver.utiles.console.ResponseListener;
96 862 fjp
import com.iver.utiles.exceptionHandling.ExceptionListener;
97 312 fernando
98
99
/**
100
 * DOCUMENT ME!
101
 *
102
 * @author vcn
103
 */
104 904 fjp
public class View extends JPanel implements com.iver.andami.ui.mdiManager.View,
105 1367 vcaballero
    SingletonView,ViewListener, IView{
106 312 fernando
107
    /** DOCUMENT ME! */
108 1223 fernando
    private MapControl m_MapControl;
109 655 fjp
    private MapOverview m_MapLoc;
110 312 fernando
111
    /** DOCUMENT ME! */
112
    private TOC m_TOC;
113 359 fjp
    private ProjectView modelo;
114 3714 caballero
    private ViewExceptionListener mapControlExceptionListener = new ViewExceptionListener();
115
        private JConsole console;
116
        private ResponseAdapter consoleResponseAdapter = new ResponseAdapter();
117
        /**
118 312 fernando
     * Creates a new View object.
119
     */
120
    public View() {
121
        //this.setName(Utilities.getMessage(this, "Vista")+ " : "+modelo.getName());
122 3331 fjp
        // this.setPreferredSize(new Dimension(500, 300));
123 312 fernando
        initComponents();
124 3714 caballero
        hideConsole();
125 312 fernando
    }
126
127
    /**
128
     * DOCUMENT ME!
129
     *
130
     * @return DOCUMENT ME!
131
     */
132
    public ProjectView getModel() {
133
        return modelo;
134
    }
135
136
    /**
137
     * DOCUMENT ME!
138
     *
139
     * @param model DOCUMENT ME!
140
     */
141
    public void setModel(ProjectView model) {
142
        this.modelo = model;
143 457 fernando
        //Se registra como listener de cambios en FMap
144 312 fernando
        FMap fmap = modelo.getMapContext();
145
146 3714 caballero
        FLayers layers=fmap.getLayers();
147
                for (int i=0;i<layers.getLayersCount();i++){
148
                        if (layers.getLayer(i).isEditing() && layers.getLayer(i) instanceof FLyrVect){
149
                                this.showConsole();
150
                        }
151
                }
152
153
                //Se configura el mapControl
154 312 fernando
        m_MapControl.setMapContext(fmap);
155 493 fjp
        m_TOC.setMapContext(fmap);
156 312 fernando
        m_MapControl.setBackground(new Color(255, 255, 255));
157 944 vcaballero
        if (modelo.getMapOverViewContext()!=null){
158
                m_MapLoc.setModel(modelo.getMapOverViewContext());
159
        }
160 644 fernando
        model.addPropertyChangeListener(new PropertyChangeListener() {
161
                        public void propertyChange(PropertyChangeEvent evt) {
162
                                if (evt.getPropertyName().equals("name")){
163
                                        PluginServices.getMDIManager().getViewInfo(View.this).setTitle("Vista: " + (String)evt.getNewValue());
164
                                }
165
                        }
166
                });
167 1367 vcaballero
        if (m_MapControl.getViewPort() != null){
168
                m_MapControl.getViewPort().addViewPortListener(new ViewPortListener() {
169
                                public void extentChanged(ExtentEvent e) {
170 3714 caballero
                                        if (PluginServices.getMainFrame() != null){
171 1367 vcaballero
                                                PluginServices.getMainFrame().getStatusBar().setMessage("6", "1:"+m_MapControl.getMapContext().getScaleView());
172
                                                PluginServices.getMainFrame().getStatusBar().setMessage("7", getMapControl().getViewPort().getProjection().getAbrev());
173
                                        }
174 1139 vcaballero
                                }
175 1062 fernando
176 1367 vcaballero
                                public void backColorChanged(ColorEvent e) {
177
                                }
178 3714 caballero
                        });
179 1367 vcaballero
              }
180 312 fernando
    }
181 3714 caballero
    public JConsole getConsolePanel(){
182
            if (console==null){
183
                    console=new JConsole();
184
            }
185
            return console;
186
    }
187 312 fernando
188 3714 caballero
189
    public void addConsoleListener(String prefix, ResponseListener listener) {
190
                consoleResponseAdapter.putSpaceListener(prefix, listener);
191
192
        }
193
194
        public void removeConsoleListener(ResponseListener listener) {
195
                consoleResponseAdapter.deleteListener(listener);
196
197
        }
198
199
        public void focusConsole(String text) {
200
                getConsolePanel().addResponseText(text);
201
                FocusManager fm=FocusManager.getCurrentManager();
202
                fm.focusNextComponent(getConsolePanel());
203
204
        }
205
206
        public void hideConsole() {
207 3718 caballero
                removeAll();
208
                //JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
209
                JSplitPane tempMainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
210
                tempMainSplit.setPreferredSize(new Dimension(500, 300));
211
                JSplitPane tempSplitToc = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
212 3714 caballero
213 3718 caballero
                tempSplitToc.setTopComponent((TOC) m_TOC);
214
                tempSplitToc.setBottomComponent(m_MapLoc);
215
                tempSplitToc.setResizeWeight(0.7);
216
                tempMainSplit.setLeftComponent(tempSplitToc);
217
218
                m_TOC.setVisible(true);
219
                tempMainSplit.setRightComponent(m_MapControl);
220
                //split.setBottomComponent(getConsolePanel());
221
                //split.setTopComponent(tempMainSplit);
222
                // split.setResizeWeight(0.9);
223
                this.setLayout(new BorderLayout());
224
                this.add(tempMainSplit, BorderLayout.CENTER);
225
226 3714 caballero
        }
227
228
        public void showConsole() {
229 3718 caballero
                removeAll();
230
                JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
231
                JSplitPane tempMainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
232
                tempMainSplit.setPreferredSize(new Dimension(500, 300));
233
                JSplitPane tempSplitToc = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
234 3714 caballero
235 3718 caballero
                tempSplitToc.setTopComponent((TOC) m_TOC);
236
                tempSplitToc.setBottomComponent(m_MapLoc);
237
                tempSplitToc.setResizeWeight(0.7);
238
                tempMainSplit.setLeftComponent(tempSplitToc);
239
240
                m_TOC.setVisible(true);
241
                tempMainSplit.setRightComponent(m_MapControl);
242
                split.setBottomComponent(getConsolePanel());
243
                split.setTopComponent(tempMainSplit);
244
                split.setResizeWeight(0.9);
245
                this.setLayout(new BorderLayout());
246
                this.add(split, BorderLayout.CENTER);
247
248 3714 caballero
        }
249
        private class ResponseAdapter implements ResponseListener{
250
251
                private HashMap spaceListener = new HashMap();
252
253
                public void putSpaceListener(String namespace, ResponseListener listener){
254
                        spaceListener.put(namespace, listener);
255
                }
256
257
                /**
258
                 * @see com.iver.utiles.console.ResponseListener#acceptResponse(java.lang.String)
259
                 */
260
                public void acceptResponse(String response) {
261
                        boolean nameSpace = false;
262
                        int n = -1;
263
                        if (response != null){
264
                                if ((n = response.indexOf(':')) != -1){
265
                                        nameSpace = true;
266
                                }
267
                        }
268
269
                        if (nameSpace){
270
                                ResponseListener listener = (ResponseListener) spaceListener.get(response.substring(0, n));
271
                                if (listener != null)
272
                                listener.acceptResponse(response.substring(n+1));
273
                        }else{
274
                                Iterator i = spaceListener.values().iterator();
275
                                while (i.hasNext()) {
276
                                        ResponseListener listener = (ResponseListener) i.next();
277
                                        listener.acceptResponse(response);
278
                                }
279
                        }
280
                }
281
282
                /**
283
                 * @param listener
284
                 */
285
                public void deleteListener(ResponseListener listener) {
286
                        Iterator i = spaceListener.keySet().iterator();
287
                        while (i.hasNext()) {
288
                                String namespace = (String) i.next();
289
                                ResponseListener l = (ResponseListener) spaceListener.get(namespace);
290
                                if (l == listener){
291
                                        spaceListener.remove(namespace);
292
                                }
293
                        }
294
                }
295
296
        }
297
298
299
300
301 312 fernando
    /**
302 3714 caballero
         * DOCUMENT ME!
303
         */
304
    private void initComponents() { // GEN-BEGIN:initComponents
305
        m_MapControl = new MapControl(); // Default is paintEnabled = false.
306
                                                                                        // Remember to activate it
307 755 fernando
        m_MapControl.addExceptionListener(mapControlExceptionListener);
308 359 fjp
        // modelo.setMapContext(m_MapControl.getMapContext());
309 312 fernando
310
        // m_MapControl.setAcceptEvents(true); Lo comento porque ya se hace en el setModel
311 493 fjp
        m_TOC = new TOC();
312 312 fernando
313 3718 caballero
314 312 fernando
        // Ponemos el localizador
315 377 fjp
        m_MapLoc = new MapOverview(m_MapControl);
316 312 fernando
        m_MapLoc.setPreferredSize(new Dimension(150, 200));
317 3718 caballero
        hideConsole();
318 312 fernando
319
320
321 3714 caballero
322 1062 fernando
        //Listener de eventos de movimiento que pone las coordenadas del rat?n en la barra de estado
323
        StatusBarListener sbl = new StatusBarListener(m_MapControl);
324 3714 caballero
325 375 fjp
        // Zoom out (pinchas y el mapa se centra y te muestra m?s).
326
        // No es dibujando un rect?ngulo, es solo pinchando.
327
328 842 vcaballero
        ZoomOutListener zol = new ZoomOutListener(m_MapControl);
329 1221 fernando
        m_MapControl.addMapTool("zoomOut", new Behavior[]{new PointBehavior(zol), new MouseMovementBehavior(sbl)});
330 3714 caballero
331 375 fjp
        // pan
332
333 842 vcaballero
        PanListener pl = new PanListener(m_MapControl);
334 1221 fernando
        m_MapControl.addMapTool("pan", new Behavior[]{new MoveBehavior(pl), new MouseMovementBehavior(sbl)});
335 3714 caballero
336 375 fjp
        // Medir
337
338 666 fernando
        MeasureListener mli = new MeasureListener(m_MapControl);
339 1221 fernando
        m_MapControl.addMapTool("medicion", new Behavior[]{new PolylineBehavior(mli), new MouseMovementBehavior(sbl)});
340 375 fjp
341
        // Area
342
343 775 vcaballero
        AreaListener ali = new AreaListener(m_MapControl);
344 1221 fernando
        m_MapControl.addMapTool("area", new Behavior[]{new PolygonBehavior(ali), new MouseMovementBehavior(sbl)});
345 3714 caballero
346 457 fernando
        //Seleccion por punto
347 842 vcaballero
        PointSelectListener psl = new PointSelectListener(m_MapControl);
348 1221 fernando
        m_MapControl.addMapTool("pointSelection", new Behavior[]{new PointBehavior(psl), new MouseMovementBehavior(sbl)});
349 3714 caballero
350 482 vcaballero
        //Info por punto
351
        InfoListener il = new InfoListener(m_MapControl);
352 1221 fernando
        m_MapControl.addMapTool("info", new Behavior[]{new PointBehavior(il), new MouseMovementBehavior(sbl)});
353 3714 caballero
354 775 vcaballero
//      Link por punto
355
        LinkListener ll = new LinkListener(m_MapControl);
356 1221 fernando
        m_MapControl.addMapTool("link", new Behavior[]{new PointBehavior(ll), new MouseMovementBehavior(sbl)});
357 3714 caballero
358 457 fernando
        //Selecci?n por rect?ngulo
359 842 vcaballero
        RectangleSelectListener rsl = new RectangleSelectListener(m_MapControl);
360 1221 fernando
        m_MapControl.addMapTool("rectSelection", new Behavior[]{new RectangleBehavior(rsl), new MouseMovementBehavior(sbl)});
361 1062 fernando
362
        // Zoom por rect?ngulo
363 1115 fjp
        ZoomOutRightButtonListener zoil = new ZoomOutRightButtonListener(m_MapControl);
364 1062 fernando
        ZoomInListener zil = new ZoomInListener(m_MapControl);
365 1221 fernando
        m_MapControl.addMapTool("zoomIn", new Behavior[]{new RectangleBehavior(zil),
366
                                        new PointBehavior(zoil), new MouseMovementBehavior(sbl)});
367 3714 caballero
368 2183 fernando
        //Salvar a Raster
369
        SaveRasterListener srl = new SaveRasterListener(m_MapControl);
370
        m_MapControl.addMapTool("saveRaster", new Behavior[]{
371
                                        new RectangleBehavior(srl), new MouseMovementBehavior(sbl)});
372 3714 caballero
373 2183 fernando
        SelectImageListener sil = new SelectImageListener(m_MapControl);
374
        m_MapControl.addMapTool("selectImage", new Behavior[]{
375
                                new PointBehavior(sil), new MouseMovementBehavior(sbl)});
376 3714 caballero
377 2359 igbrotru
        ZoomPixelCursorListener zp = new ZoomPixelCursorListener(m_MapControl);
378
        m_MapControl.addMapTool("zoom_pixel_cursor", new Behavior[]{new PointBehavior(zp), new MouseMovementBehavior(sbl)});
379 3714 caballero
380 457 fernando
        m_MapControl.setTool("zoomIn"); // Por defecto
381 3331 fjp
        // m_MapControl.setPaintEnabled(true);
382 312 fernando
    }
383
384
    /**
385
     * DOCUMENT ME!
386
     */
387 960 vcaballero
   /*public void openPropertiesWindow() {
388 312 fernando
    }
389 960 vcaballero
*/
390 312 fernando
    /**
391
     * DOCUMENT ME!
392
     */
393 960 vcaballero
  /*  public void openQueryWindow() {
394 312 fernando
    }
395 960 vcaballero
*/
396 312 fernando
    /**
397
     * DOCUMENT ME!
398
     *
399
     * @return DOCUMENT ME!
400
     */
401 655 fjp
    public MapOverview getMapOverview() {
402 312 fernando
        return m_MapLoc;
403
    }
404
405
    /**
406
     * DOCUMENT ME!
407
     *
408
     * @return DOCUMENT ME!
409
     */
410 1223 fernando
    public MapControl getMapControl() {
411 312 fernando
        return m_MapControl;
412
    }
413
414
    /**
415
     * DOCUMENT ME!
416
     *
417
     * @return DOCUMENT ME!
418
     */
419
    public TOC getTOC() {
420
        return m_TOC;
421
    }
422
423
    /**
424
     * DOCUMENT ME!
425
     */
426
    public void repaintMap() {
427 3422 fjp
        m_MapControl.drawMap(false);
428 312 fernando
    }
429
430
    /* (non-Javadoc)
431
     * @see com.iver.mdiApp.ui.MDIManager.SingletonView#getModel()
432
     */
433
    public Object getViewModel() {
434
        return modelo;
435
    }
436
437
    /**
438
     * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
439
     */
440
    public ViewInfo getViewInfo() {
441 596 fernando
            ViewInfo m_viewInfo = new ViewInfo(ViewInfo.ICONIFIABLE | ViewInfo.RESIZABLE |
442 312 fernando
                        ViewInfo.MAXIMIZABLE);
443
444
                        m_viewInfo.setWidth(500);
445
                        m_viewInfo.setHeight(300);
446 596 fernando
                m_viewInfo.setTitle(PluginServices.getText(this, "Vista") + " : " +
447 312 fernando
                modelo.getName());
448 3714 caballero
449 312 fernando
                return m_viewInfo;
450 3714 caballero
451 312 fernando
    }
452
453
    /**
454
     * @see com.iver.mdiApp.ui.MDIManager.View#viewActivated()
455
     */
456
    public void viewActivated() {
457 899 vcaballero
            PluginServices.getMainFrame().getStatusBar().setMessage("1",
458 2544 caballero
                            FConstant.NAMES[getMapControl().getMapContext().getViewPort().getDistanceUnits()]);
459 1367 vcaballero
            PluginServices.getMainFrame().getStatusBar().setMessage("6", "1:"+m_MapControl.getMapContext().getScaleView());
460 2685 fjp
                PluginServices.getMainFrame().getStatusBar().setMessage("7", getMapControl().getViewPort().getProjection().getAbrev());
461 1367 vcaballero
    }
462 312 fernando
463
        /**
464
         * @return
465
         */
466 596 fernando
        public BufferedImage getImage() {
467 312 fernando
                return m_MapControl.getImage();
468
        }
469 3714 caballero
470 904 fjp
        public void setProjection(IProjection proj)
471
        {
472
                getMapControl().setProjection(proj);
473
        }
474
        public IProjection getProjection()
475
        {
476
                return getMapControl().getProjection();
477
        }
478 3714 caballero
479 755 fernando
        public class ViewExceptionListener implements ExceptionListener {
480
481
                /**
482
                 * @see com.iver.cit.gvsig.fmap.ExceptionListener#exceptionThrown(java.lang.Throwable)
483
                 */
484
                public void exceptionThrown(Throwable t) {
485
                        NotificationManager.addError(t.getMessage(), t);
486
                }
487 3714 caballero
488 755 fernando
        }
489 899 vcaballero
490
        /**
491
         * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
492
         */
493
        public void viewClosed() {
494
                ///PluginServices.getMainFrame().getStatusBar().setMessage("1","");
495
        }
496 3714 caballero
497 312 fernando
}