Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / geolocation / GeoLocationTocMenuEntry.java @ 20646

History | View | Annotate | Download (6.81 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 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
package org.gvsig.rastertools.geolocation;
20

    
21
import java.awt.Point;
22
import java.beans.PropertyChangeEvent;
23
import java.beans.PropertyChangeListener;
24

    
25
import javax.swing.Icon;
26

    
27
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
28
import org.gvsig.fmap.raster.layers.IRasterLayerActions;
29
import org.gvsig.raster.gui.IGenericToolBarMenuItem;
30
import org.gvsig.raster.util.RasterToolsUtil;
31
import org.gvsig.rastertools.geolocation.behavior.GeoRasterBehavior;
32
import org.gvsig.rastertools.geolocation.listener.GeorefPanListener;
33
import org.gvsig.rastertools.geolocation.ui.GeoLocationDialog;
34

    
35
import com.iver.andami.PluginServices;
36
import com.iver.andami.ui.mdiManager.IWindow;
37
import com.iver.cit.gvsig.fmap.MapControl;
38
import com.iver.cit.gvsig.fmap.layers.FLayer;
39
import com.iver.cit.gvsig.fmap.layers.FLayers;
40
import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
41
import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
42
import com.iver.cit.gvsig.project.documents.view.gui.IView;
43
import com.iver.cit.gvsig.project.documents.view.gui.View;
44
import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
45
import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
46
import com.iver.cit.gvsig.project.documents.view.toolListeners.StatusBarListener;
47

    
48
/**
49
 * Herramienta del men? contextual que carga el raster en el localizador para tener una visi?n general de
50
 * esta y carga el zoom del cursor para tener una selecci?n de precisi?n.
51
 *
52
 * 16-jun-2007
53
 * @author Nacho Brodin (nachobrodin@gmail.com)
54
 */
55
public class GeoLocationTocMenuEntry extends AbstractTocContextMenuAction implements PropertyChangeListener, IGenericToolBarMenuItem {
56
        static private GeoLocationTocMenuEntry singleton  = null;
57
        private GeoRasterBehavior mb = null;
58

    
59
        /**
60
         * Nadie puede crear una instancia a esta clase ?nica, hay que usar el
61
         * getSingleton()
62
         */
63
        private GeoLocationTocMenuEntry() {}
64

    
65
        /**
66
         * Devuelve un objeto unico a dicha clase
67
         * @return
68
         */
69
        static public GeoLocationTocMenuEntry getSingleton() {
70
                if (singleton == null)
71
                        singleton = new GeoLocationTocMenuEntry();
72
                return singleton;
73
        }
74
        
75
        /*
76
         * (non-Javadoc)
77
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroup()
78
         */
79
        public String getGroup() {
80
                return "GeoRaster";
81
        }
82

    
83
        /*
84
         * (non-Javadoc)
85
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroupOrder()
86
         */
87
        public int getGroupOrder() {
88
                return 55;
89
        }
90

    
91
        /*
92
         * (non-Javadoc)
93
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getOrder()
94
         */
95
        public int getOrder() {
96
                return 4;
97
        }
98

    
99
        /*
100
         * (non-Javadoc)
101
         * @see com.iver.cit.gvsig.project.documents.IContextMenuAction#getText()
102
         */
103
        public String getText() {
104
                return RasterToolsUtil.getText(this, "geolocation");
105
        }
106
        
107
        /*
108
         * (non-Javadoc)
109
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isEnabled(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
110
         */
111
        public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
112
                return true;
113
        }
114

    
115
        /*
116
         * (non-Javadoc)
117
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isVisible(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
118
         */
119
        public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
120
                if ((selectedItems == null) || (selectedItems.length != 1))
121
                        return false;
122

    
123
                if (!(selectedItems[0] instanceof FLyrRasterSE))
124
                        return false;
125

    
126
                return ((FLyrRasterSE) selectedItems[0]).isActionEnabled(IRasterLayerActions.GEOLOCATION);
127
        }
128

    
129
        /*
130
         * (non-Javadoc)
131
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#execute(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
132
         */
133
        public void execute(ITocItem item, FLayer[] selectedItems) {                
134
                boolean isOpen = false;
135
                
136
                View theView = (View) PluginServices.getMDIManager().getActiveWindow();
137
                MapControl mapCtrl = theView.getMapControl();
138

    
139
                // Listener de eventos de movimiento que pone las coordenadas del rat?n en
140
                // la barra de estado
141
                StatusBarListener sbl = new StatusBarListener(mapCtrl);
142
                
143
                //Comprobamos si no hay capas activas. En este caso no lanzamos la ventana ni activamos la tool
144
                IWindow[] win = PluginServices.getMDIManager().getAllWindows();
145
                for (int i = 0; i < win.length; i++) {
146
                        if (win[i] instanceof IView) {
147
                                FLayers lyrs = ((IView) win[i]).getMapControl().getMapContext().getLayers();
148
                                FLayer[] actives = lyrs.getActives();
149
                                if (actives == null || actives.length == 0)
150
                                        return;
151
                        }
152
                        if (win[i] instanceof GeoLocationDialog)
153
                                isOpen = true;
154
                }
155
                
156
                if (selectedItems == null || selectedItems.length != 1 || !(selectedItems[0] instanceof FLyrRasterSE))
157
                        return;
158
                
159
                FLyrRasterSE lyr = (FLyrRasterSE)selectedItems[0];
160
                GeoLocationDialog gld = new GeoLocationDialog(lyr, mapCtrl.getViewPort());
161
                if(!isOpen) {
162
                        Point posit = RasterToolsUtil.iwindowPosition((int)gld.getSizeWindow().getWidth(), (int)gld.getSizeWindow().getHeight());
163
                        gld.setPosition((int)posit.getX(), (int)posit.getY());
164
                        RasterToolsUtil.addWindow(gld);
165
                }
166
                
167
                gld.init(mapCtrl);
168
                loadGeoPanListener(mapCtrl, sbl, gld, lyr);
169
                mapCtrl.setTool("geoPan");
170
        }
171

    
172
        /**
173
         * Carga el listener de selecci?n de raster en el MapControl.
174
         */
175
        private void loadGeoPanListener(MapControl mapCtrl, StatusBarListener sbl, GeoLocationDialog gld, FLyrRasterSE lyr) {
176
                if (mapCtrl.getNamesMapTools().get("geoPan") == null) {
177
                        GeorefPanListener pl = new GeorefPanListener(mapCtrl);
178
                        mb = new GeoRasterBehavior(pl, gld, lyr);
179
                        mapCtrl.addMapTool("geoPan", new Behavior[]{mb, new MouseMovementBehavior(sbl)});
180

    
181
                }
182
                
183
                if(mb != null) {
184
                        mb.setLayer(lyr);
185
                        mb.setITransformIO(gld);
186
                }
187
        }
188
        
189
        /*
190
         * (non-Javadoc)
191
         * @see org.gvsig.rastertools.generictoolbar.IGenericToolBarMenuItem#getIcon()
192
         */
193
        public Icon getIcon() {
194
                return RasterToolsUtil.getIcon("geolocalization-icon");
195
        }
196

    
197
        public void propertyChange(PropertyChangeEvent evt) {}
198
}