Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / branches / org.gvsig.raster.tools_dataaccess_refactoring / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / geolocation / ui / GeoLocationDialog.java @ 2340

History | View | Annotate | Download (7.1 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.tools.app.basic.tool.geolocation.ui;
23

    
24
import java.awt.BorderLayout;
25
import java.awt.Dimension;
26
import java.awt.geom.AffineTransform;
27

    
28
import javax.swing.JPanel;
29

    
30
import org.gvsig.andami.PluginServices;
31
import org.gvsig.andami.ui.mdiManager.IWindow;
32
import org.gvsig.andami.ui.mdiManager.IWindowListener;
33
import org.gvsig.andami.ui.mdiManager.WindowInfo;
34
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
35
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
36
import org.gvsig.fmap.mapcontext.ViewPort;
37
import org.gvsig.fmap.mapcontext.layers.FLayer;
38
import org.gvsig.fmap.mapcontext.layers.FLayers;
39
import org.gvsig.fmap.mapcontrol.MapControl;
40
import org.gvsig.raster.fmap.layers.FLyrRaster;
41
import org.gvsig.raster.swing.RasterSwingLibrary;
42
import org.gvsig.raster.tools.app.basic.tool.geolocation.behavior.ITransformIO;
43

    
44

    
45
/**
46
 * Dialogo de geolocalizaci?n de raster.
47
 * 
48
 * @version 30/07/2007
49
 * @author Nacho Brodin (nachobrodin@gmail.com)
50
 *
51
 */
52
public class GeoLocationDialog extends JPanel implements IWindow, IWindowListener, ITransformIO {
53
        private static final long serialVersionUID = 7362459094802955247L;
54
        private GeoLocationPanel  geolocationPanel = null;
55

    
56
        /**
57
         * Posici?n de la ventana en X y en Y
58
         */
59
        private int               posWindowX       = 0;
60
        private int               posWindowY       = 0;
61

    
62
        private int               widthWindow      = 272;
63
        private int               heightWindow     = 155;
64

    
65
        private String            lastTool         = null;
66
        private AbstractViewPanel          view             = null;
67

    
68
        /**
69
         * Constructor
70
         */
71
        public GeoLocationDialog() {
72
                BorderLayout bl = new BorderLayout(5, 5);
73
                this.setLayout(bl);
74
                
75
                this.add(getGeoLocationPanel());
76
        }
77
        
78
        /**
79
         * Constructor. Asigna la capa raster.
80
         *
81
         */
82
        public GeoLocationDialog(FLyrRaster lyr, ViewPort vp, AbstractViewPanel view) {
83
                this.view = view;
84
                BorderLayout bl = new BorderLayout(5, 5);
85
                this.setLayout(bl);
86

    
87
                this.add(getGeoLocationPanel());
88
                getGeoLocationPanel().setParams(lyr, vp);
89
        }
90
        
91
        /**
92
         * Obtiene la vista asociada a este dialogo
93
         * @return BaseView
94
         */
95
        public AbstractViewPanel getAssociateView() {
96
                return view;
97
        }
98
        
99
        /**
100
         * Asigna la posici?n de la ventana
101
         * @param x Posici?n en X
102
         * @param y Posici?n en Y
103
         */
104
        public void setPosition(int x, int y) {
105
                this.posWindowX = x;
106
                this.posWindowY = y;
107
        }
108
        
109
        /**
110
         * Obtiene el tama?o de la ventana
111
         * @return
112
         */
113
        public Dimension getSizeWindow() {
114
                return new Dimension(widthWindow, heightWindow);
115
        }
116
        
117
        /**
118
         * Referencia la capa que est? seleccionada
119
         *
120
         */
121
        private void loadLayer(ViewPort vp) {
122
                if(getGeoLocationPanel().getLayer() != null)
123
                        return;
124
                //Este c?digo es para poder lanzar la funcionalidad desde la barra de herramientas y no desde el TOC
125
                FLayers flyrs = getGeoLocationPanel().getMapCtrl().getMapContext().getLayers();
126
                FLayer[] actives = flyrs.getActives();
127
                for (int i = 0; i < actives.length; i++) {
128
                        if(actives[i] instanceof FLyrRaster) {
129
                                getGeoLocationPanel().setParams(((FLyrRaster)actives[i]), vp);
130
                                break;
131
                        }
132
                }
133
        }
134
        
135
        /**
136
         * Acciones de inicializaci?n
137
         *
138
         */
139
        public void init(MapControl mapCtrl) {
140
                geolocationPanel.setMapCtrl(mapCtrl);
141
                lastTool = mapCtrl.getCurrentTool();
142
                loadLayer(mapCtrl.getViewPort());
143
                FLyrRaster lyr = getGeoLocationPanel().getLayer();
144
                if(lyr != null) {
145
                        lyr.getAffineTransformHistorical().clear();
146
                        lyr.getAffineTransformHistorical().add(lyr.getDataStore().getAffineTransform());
147
                        loadTransform(lyr.getDataStore().getAffineTransform());
148
                }
149
                activeButtons();
150
        }
151
        
152
        /**
153
         * Carga los par?metros en el dialogo a partir de la capa
154
         * @param lyr Capa raster
155
         */
156
        public void loadTransform(AffineTransform at) {
157
                geolocationPanel.loadTransform(at);
158
        }
159
        
160
        /**
161
         * Activa o desactiva los botones de transformaci?n anterior y siguiente dependiendo
162
         * del estado de la lista de transformaciones.
163
         * @return
164
         */
165
        public void applyTransformation() {
166
                geolocationPanel.setModify(true);
167
                geolocationPanel.activeButtons();        
168
        }
169
        /**
170
         * Obtiene el panel con el histograma
171
         * @return HistogramPanel
172
         */
173
        public GeoLocationPanel getGeoLocationPanel(){
174
                if (geolocationPanel == null) 
175
                        geolocationPanel = new GeoLocationPanel(this);
176
                
177
                return geolocationPanel;
178
        }
179

    
180
        /**
181
         * Activa o desactiva los botones de transformaci?n anterior y siguiente dependiendo
182
         * del estado de la lista de transformaciones.
183
         * @return
184
         */
185
        public void activeButtons() {
186
                getGeoLocationPanel().activeButtons();
187
        }
188
        
189
        /*
190
         * (non-Javadoc)
191
         * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
192
         */
193
        public WindowInfo getWindowInfo() {
194
                WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE);
195
                m_viewinfo.setHeight(heightWindow);
196
                m_viewinfo.setWidth(widthWindow);
197
                m_viewinfo.setX(posWindowX);
198
                m_viewinfo.setY(posWindowY);
199
                return m_viewinfo;
200
        }
201

    
202
        /**
203
         * Asigna el ?ltimo tool seleccionado antes de abrir el di?logo para 
204
         * restaurarlo cuando se cierre este.
205
         * @param tool
206
         */
207
        public void setLastTool(String tool) {
208
                this.lastTool = tool;
209
        }
210
        
211
        /*
212
         * (non-Javadoc)
213
         * @see com.iver.andami.ui.mdiManager.IWindowListener#windowActivated()
214
         */
215
        public void windowActivated() {
216
        }
217

    
218
        /*
219
         * (non-Javadoc)
220
         * @see com.iver.andami.ui.mdiManager.IWindowListener#windowClosed()
221
         */
222
        public void windowClosed() {
223
                //Se consulta si se desean salvar los cambios
224
                if(geolocationPanel.getModify()) {
225
                        if(RasterSwingLibrary.messageBoxYesOrNot(PluginServices.getText(this,"aviso_salir_salvando"), geolocationPanel)) {
226
                                try {
227
                                        geolocationPanel.getLayer().saveGeoToRmf();
228
                                } catch (RmfSerializerException e1) {
229
                                        RasterSwingLibrary.messageBoxError(PluginServices.getText(this,"error_salvando_rmf"), geolocationPanel, e1);
230
                                }
231
                        }
232
                        geolocationPanel.setModify(false);
233
                }
234
                
235
                //Restauramos la tool que hab?a antes de de activar la actual
236
                if(lastTool != null)
237
                        getGeoLocationPanel().getMapCtrl().setTool(lastTool);
238
                
239
                //TODO: Si queremos usar la funcionalidad de geolocalizaci?n desde la barra de herramientas deberemos 
240
                //, al cerrar la ventana, asignar la capa raster de GeoRasterBehevior a null ya que sino se aplicar?n las
241
                //transformaciones sobre la ?ltima capa que se abri? desde el men? del TOC
242
        }
243

    
244
        public Object getWindowProfile() {
245
                return WindowInfo.PROPERTIES_PROFILE;
246
        }
247
}