Statistics
| Revision:

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

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