Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / geolocation / GeoLocationTocMenuEntry.java @ 27497

History | View | Annotate | Download (7.19 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.CompoundBehavior;
41
import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
42
import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
43
import com.iver.cit.gvsig.project.documents.view.gui.BaseView;
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
                if (selectedItems == null || selectedItems.length != 1 || !(selectedItems[0] instanceof FLyrRasterSE)) {
135
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this,"layers_not_selected"), null);
136
                        return;
137
                }
138
                
139
                BaseView theView = null;
140
                GeoLocationDialog dialog = null;
141
                
142
                IWindow[] win = PluginServices.getMDIManager().getAllWindows();
143
                for (int i = 0; i < win.length; i++) {
144
                        if (win[i] instanceof BaseView) {
145
                                FLayers lyrs = ((BaseView) win[i]).getMapControl().getMapContext().getLayers();
146
                                for (int j = 0; j < lyrs.getLayersCount(); j++) 
147
                                        if(lyrs.getLayer(j).equals(selectedItems[0])) 
148
                                                theView = (BaseView)win[i];
149
                        }
150
                        if (win[i] instanceof GeoLocationDialog)
151
                                RasterToolsUtil.closeWindow(win[i]);
152
                }
153
                
154
                if(theView == null) {
155
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this,"view_not_found"), null);
156
                        return;
157
                }
158
                
159
                MapControl mapCtrl = theView.getMapControl();
160
                
161
                // Listener de eventos de movimiento que pone las coordenadas del rat?n en
162
                // la barra de estado
163
                StatusBarListener sbl = new StatusBarListener(mapCtrl);
164
                
165
                FLyrRasterSE lyr = (FLyrRasterSE)selectedItems[0];
166
                dialog = new GeoLocationDialog(lyr, mapCtrl.getViewPort(), theView);
167
                Point posit = RasterToolsUtil.iwindowPosition((int)dialog.getSizeWindow().getWidth(), (int)dialog.getSizeWindow().getHeight());
168
                dialog.setPosition((int)posit.getX(), (int)posit.getY());
169
                RasterToolsUtil.addWindow(dialog);
170
                
171
                dialog.init(mapCtrl);
172
                loadGeoPanListener(mapCtrl, sbl, dialog, lyr);
173
                mapCtrl.setTool("geoPan");
174
        }
175

    
176
        /**
177
         * Carga el listener de selecci?n de raster en el MapControl.
178
         */
179
        private void loadGeoPanListener(MapControl mapCtrl, StatusBarListener sbl, GeoLocationDialog gld, FLyrRasterSE lyr) {
180
                if (mapCtrl.getNamesMapTools().get("geoPan") == null) {
181
                        GeorefPanListener pl = new GeorefPanListener(mapCtrl);
182
                        mb = new GeoRasterBehavior(pl, gld, lyr);
183
                        mapCtrl.addMapTool("geoPan", new Behavior[]{mb, new MouseMovementBehavior(sbl)});
184
                } else {
185
                        Behavior b = mapCtrl.getMapTool("geoPan");
186
                        if(        b instanceof CompoundBehavior &&
187
                                ((CompoundBehavior)b).getBehavior(0) instanceof GeoRasterBehavior) {
188
                                GeoRasterBehavior beh = (GeoRasterBehavior)((CompoundBehavior)b).getBehavior(0);
189
                                beh.setLayer(lyr);
190
                                beh.setITransformIO(gld);        
191
                        }                                
192
                }
193
        }
194
        
195
        /*
196
         * (non-Javadoc)
197
         * @see org.gvsig.rastertools.generictoolbar.IGenericToolBarMenuItem#getIcon()
198
         */
199
        public Icon getIcon() {
200
                return RasterToolsUtil.getIcon("geolocalization-icon");
201
        }
202

    
203
        public void propertyChange(PropertyChangeEvent evt) {}
204
}