Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / geolocation / ui / GeoLocationPanel.java @ 14135

History | View | Annotate | Download (11.8 KB)

1 12825 nacho
/* 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.ui;
20
21 13310 bsanchez
import java.awt.Dimension;
22 12825 nacho
import java.awt.FlowLayout;
23 12853 nacho
import java.awt.GridBagConstraints;
24
import java.awt.GridBagLayout;
25 12825 nacho
import java.awt.GridLayout;
26 12853 nacho
import java.awt.geom.AffineTransform;
27 12825 nacho
28
import javax.swing.ImageIcon;
29
import javax.swing.JButton;
30
import javax.swing.JPanel;
31
32 12853 nacho
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
33 12825 nacho
import org.gvsig.gui.beans.datainput.DataInputContainer;
34 12853 nacho
import org.gvsig.raster.util.Historical;
35
import org.gvsig.raster.util.MathUtils;
36
import org.gvsig.rastertools.geolocation.listener.GeoLocationPanelListener;
37 12825 nacho
38
import com.iver.andami.PluginServices;
39 12853 nacho
import com.iver.cit.gvsig.fmap.MapControl;
40 12825 nacho
41
/**
42 12853 nacho
 * Panel de geolocalizaci?n. Este muestra los par?metros de la matriz de transformaci?n
43
 * que est? aplicandose en esos momentos al raster. Los par?metros son variados en
44
 * tiempo real a medida que modificamos la georreferenciaci?n con las herramientas.
45 12825 nacho
 *
46
 * @version 30/07/2007
47
 * @author Nacho Brodin (nachobrodin@gmail.com)
48
 *
49
 */
50
public class GeoLocationPanel extends JPanel {
51 13127 nacho
        private static final long         serialVersionUID = -7797379892312214949L;
52 12853 nacho
        private DataInputContainer               ulx = null;
53
        private DataInputContainer               uly = null;
54
        private DataInputContainer               psx = null;
55
        private DataInputContainer               psy = null;
56
        private DataInputContainer               rotx = null;
57
        private DataInputContainer               roty = null;
58 13127 nacho
        private JButton                    first = null;
59
        private JButton                    save = null;
60
        private JButton                    back = null;
61
        private JButton                    next = null;
62
        private JButton                    apply = null;
63 14135 nbrodin
        private JButton                    reset = null;
64 12825 nacho
65 12853 nacho
        private JPanel                                   coordsPanel = null;
66
        private JPanel                                   paramsPanel = null;
67
        private JPanel                                   buttonsPanel = null;
68
        private GeoLocationPanelListener   listener = null;
69
        private FLyrRasterSE               lyr = null;
70
        /**
71
     * N?mero de decimales a mostrar
72
     */
73
    private int                        tailValue = 2;
74
    private MapControl                 mapCtrl = null;
75 13127 nacho
    private boolean                    geolocModify = false;
76 12825 nacho
77
        /**
78
         * Constructor
79
         */
80 13127 nacho
        public GeoLocationPanel() {
81 12825 nacho
                ImageIcon backIcon = null;
82
                ImageIcon nextIcon = null;
83
                ImageIcon saveIcon = null;
84
                ImageIcon firstIcon = null;
85 14135 nbrodin
                ImageIcon resetIcon = null;
86 12825 nacho
                try {
87
                        backIcon = new ImageIcon(getClass().getClassLoader().getResource("images/back.png"));
88
                        nextIcon = new ImageIcon(getClass().getClassLoader().getResource("images/next.png"));
89
                        saveIcon = new ImageIcon(getClass().getClassLoader().getResource("images/save.png"));
90
                        firstIcon = new ImageIcon(getClass().getClassLoader().getResource("images/undo.png"));
91 14135 nbrodin
                        resetIcon = new ImageIcon(getClass().getClassLoader().getResource("images/reset.png"));
92 12825 nacho
                } catch(NullPointerException e) {
93
94
                }
95
96 12853 nacho
                listener = new GeoLocationPanelListener(this);
97
98
                GridBagLayout gl = new GridBagLayout();
99 12825 nacho
                this.setLayout(gl);
100
                setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "geolocation"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
101
                ulx = new DataInputContainer();
102
                ulx.setLabelText(PluginServices.getText(this,"ux"));
103
                uly = new DataInputContainer();
104
                uly.setLabelText(PluginServices.getText(this,"uy"));
105
                psx = new DataInputContainer();
106
                psx.setLabelText(PluginServices.getText(this,"px"));
107
                psy = new DataInputContainer();
108
                psy.setLabelText(PluginServices.getText(this,"py"));
109
                rotx = new DataInputContainer();
110
                rotx.setLabelText(PluginServices.getText(this,"rx"));
111
                roty = new DataInputContainer();
112
                roty.setLabelText(PluginServices.getText(this,"ry"));
113 14135 nbrodin
114 12825 nacho
                first = new JButton(firstIcon);
115
                save = new JButton(saveIcon);
116 14135 nbrodin
                back = new JButton(backIcon);
117
                next = new JButton(nextIcon);
118
                apply = new JButton(PluginServices.getText(this,"apply"));
119
                reset = new JButton(resetIcon);
120
121 12853 nacho
                save.setToolTipText(PluginServices.getText(this,"salvar_transf"));
122
                back.setToolTipText(PluginServices.getText(this,"back_transf"));
123
                next.setToolTipText(PluginServices.getText(this,"next_transf"));
124
                apply.setToolTipText(PluginServices.getText(this,"aplicar_transf"));
125
                first.setToolTipText(PluginServices.getText(this,"first_transf"));
126 14135 nbrodin
                reset.setToolTipText(PluginServices.getText(this,"reset_transf"));
127 13310 bsanchez
128
                save.setPreferredSize(new Dimension(28, 24));
129
                first.setPreferredSize(new Dimension(28, 24));
130
                back.setPreferredSize(new Dimension(28, 24));
131
                next.setPreferredSize(new Dimension(28, 24));
132
                apply.setPreferredSize(new Dimension(64,24));
133 14135 nbrodin
                reset.setPreferredSize(new Dimension(28,24));
134 13310 bsanchez
135 14135 nbrodin
                first.addActionListener(listener);
136 12853 nacho
                save.addActionListener(listener);
137
                back.addActionListener(listener);
138
                next.addActionListener(listener);
139
                apply.addActionListener(listener);
140 14135 nbrodin
                reset.addActionListener(listener);
141
142 12853 nacho
                save.setEnabled(false);
143
                back.setEnabled(false);
144
                next.setEnabled(false);
145
                first.setEnabled(false);
146 14135 nbrodin
                reset.setEnabled(true);
147 12825 nacho
148
                coordsPanel = new JPanel();
149 12853 nacho
                GridLayout l = new GridLayout(2, 1);
150
                l.setVgap(2);
151
                coordsPanel.setLayout(l);
152
153 12825 nacho
                paramsPanel = new JPanel();
154 12853 nacho
                GridLayout l1 = new GridLayout(2, 2);
155
                l1.setVgap(2);
156
                paramsPanel.setLayout(l1);
157
158 12825 nacho
                buttonsPanel = new JPanel();
159
                FlowLayout ly = new FlowLayout();
160
                ly.setVgap(0);
161
                ly.setAlignment(FlowLayout.RIGHT);
162
                buttonsPanel.setLayout(ly);
163
164
                init();
165
        }
166
167
        private void init() {
168
                coordsPanel.add(ulx);
169
                coordsPanel.add(uly);
170
                paramsPanel.add(psx);
171
                paramsPanel.add(psy);
172
                paramsPanel.add(rotx);
173
                paramsPanel.add(roty);
174 14135 nbrodin
                buttonsPanel.add(reset);
175 12825 nacho
                buttonsPanel.add(back);
176
                buttonsPanel.add(next);
177
                buttonsPanel.add(first);
178
                buttonsPanel.add(save);
179 12853 nacho
                buttonsPanel.add(apply);
180 14135 nbrodin
181 12825 nacho
182 12853 nacho
                GridBagConstraints gbc = new GridBagConstraints();
183
                gbc.gridx = 0;
184
                gbc.gridy = 0;
185
                gbc.fill = java.awt.GridBagConstraints.HORIZONTAL;
186
                gbc.weightx = 1.0;
187
                gbc.insets = new java.awt.Insets(1, 1, 1, 1);
188
                GridBagConstraints gbc1 = new GridBagConstraints();
189
                gbc1.gridx = 0;
190
                gbc1.gridy = 1;
191
                gbc1.fill = java.awt.GridBagConstraints.HORIZONTAL;
192
                gbc1.weightx = 1.0;
193
                gbc1.insets = new java.awt.Insets(1, 1, 1, 1);
194
                GridBagConstraints gbc2 = new GridBagConstraints();
195
                gbc2.gridx = 0;
196
                gbc2.gridy = 2;
197
                gbc2.fill = java.awt.GridBagConstraints.HORIZONTAL;
198
                gbc2.weightx = 1.0;
199
                gbc2.insets = new java.awt.Insets(1, 1, 1, 1);
200
                this.add(coordsPanel, gbc);
201
                this.add(paramsPanel, gbc1);
202
                this.add(buttonsPanel, gbc2);
203 12825 nacho
        }
204
205
        /**
206 12853 nacho
         * Activa o desactiva los botones de transformaci?n anterior y siguiente dependiendo
207
         * del estado de la lista de transformaciones.
208
         * @return
209
         */
210
        public void activeButtons() {
211
                Historical affineTransformHist = lyr.getAffineTransformHistorical();
212
                if(!affineTransformHist.existNext())
213
                        next.setEnabled(false);
214
                else
215
                        next.setEnabled(true);
216
                if(!affineTransformHist.existBack())
217
                        back.setEnabled(false);
218
                else
219
                        back.setEnabled(true);
220 13127 nacho
                if(affineTransformHist.getElementsCount() <= 1)
221 12853 nacho
                        first.setEnabled(false);
222
                else
223
                        first.setEnabled(true);
224
                if(affineTransformHist.getElementsCount() == 0)
225
                        save.setEnabled(false);
226
                else
227
                        save.setEnabled(true);
228
        }
229
230
        /**
231
         * Obtiene el MapControl
232
         * @return MapControl
233
         */
234
        public MapControl getMapCtrl() {
235
                return mapCtrl;
236
        }
237
238
        /**
239 13127 nacho
         * Asigna el MapControl
240
         * @param mapCtrl
241
         */
242
        public void setMapCtrl(MapControl mapCtrl) {
243
                this.mapCtrl = mapCtrl;
244
        }
245
246
        /**
247 12853 nacho
         * Obtiene la capa raster asociada
248
         * @return
249
         */
250
        public FLyrRasterSE getLayer() {
251
                return this.lyr;
252
        }
253
254
        /**
255
         * Asigna la capa raster del raster seleccionado en el TOC en base
256
         * al cual se asigna la georreferenciaci?n al dialogo.
257
         * @param lyr
258
         */
259
        public void setLayer(FLyrRasterSE lyr) {
260
                this.lyr = lyr;
261
                loadTransform(lyr.getAffineTransform());
262
        }
263
264
        /**
265
         * Carga los par?metros en el dialogo a partir de la capa
266
         * @param lyr Capa raster
267
         */
268
        public void loadTransform(AffineTransform at) {
269
                setUlx(String.valueOf(MathUtils.format(at.getTranslateX(), tailValue)));
270
                setUly(String.valueOf(MathUtils.format(at.getTranslateY(), tailValue)));
271
                setPsx(String.valueOf(MathUtils.format(at.getScaleX(), tailValue)));
272
                setPsy(String.valueOf(MathUtils.format(at.getScaleY(), tailValue)));
273
                setRotx(String.valueOf(MathUtils.format(at.getShearX(), tailValue)));
274
                setRoty(String.valueOf(MathUtils.format(at.getShearY(), tailValue)));
275
        }
276
277
        /**
278 12825 nacho
         * Asigna el tama?o de pixel en X
279
         * @param psx
280
         */
281
        public void setPsx(String psx) {
282
                this.psx.setValue(psx);
283
        }
284
285
        /**
286
         * Asigna el tama?o de pixel en Y
287
         * @param psy
288
         */
289
        public void setPsy(String psy) {
290
                this.psy.setValue(psy);
291
        }
292
293
        /**
294
         * Asigna la rotaci?n en X
295
         * @param rotx
296
         */
297
        public void setRotx(String rotx) {
298
                this.rotx.setValue(rotx);
299
        }
300
301
        /**
302
         * Asigna la rotaci?n en Y
303
         * @param roty
304
         */
305
        public void setRoty(String roty) {
306
                this.roty.setValue(roty);
307
        }
308
309
        /**
310
         * Asigna la coordenada superior izquierda
311
         * @param ulx
312
         */
313
        public void setUlx(String ulx) {
314
                this.ulx.setValue(ulx);
315
        }
316
317
        /**
318
         * Asigna la coordenada superior derecha
319
         * @param ulx
320
         */
321
        public void setUly(String uly) {
322
                this.uly.setValue(uly);
323
        }
324 12853 nacho
325
        /**
326
         * Obtiene el bot?n de aplicar
327
         * @return JButton
328
         */
329
        public JButton getApplyButton() {
330
                return apply;
331
        }
332
333
        /**
334
         * Obtiene el bot?n de atr?s
335
         * @return JButton
336
         */
337
        public JButton getBackButton() {
338
                return back;
339
        }
340
341
        /**
342
         * Obtiene el bot?n de ir a la primera transformaci?n
343
         * @return JButton
344
         */
345
        public JButton getFirstButton() {
346
                return first;
347
        }
348
349
        /**
350
     * Obtiene el bot?n de salvar
351
         * @return JButton
352
         */
353
        public JButton getSaveButton() {
354
                return save;
355
        }
356 12825 nacho
357 12853 nacho
        /**
358 14135 nbrodin
     * Obtiene el bot?n de reset
359
         * @return JButton
360
         */
361
        public JButton getResetButton() {
362
                return reset;
363
        }
364
365
        /**
366 12853 nacho
         * Obtiene el bot?n de siguiente transformaci?n
367
         * @return JButton
368
         */
369
        public JButton getNextButton() {
370
                return next;
371
        }
372
373
        /**
374
         * Obtiene el tama?o de pixel en X
375
         * @return
376
         */
377
        public DataInputContainer getPsx() {
378
                return psx;
379
        }
380
381
        /**
382
         * Obtiene el tama?o de pixel en Y
383
         * @return
384
         */
385
        public DataInputContainer getPsy() {
386
                return psy;
387
        }
388
389
        /**
390
         * Obtiene la rotaci?n en X
391
         * @return
392
         */
393
        public DataInputContainer getRotx() {
394
                return rotx;
395
        }
396
397
        /**
398
         * Obtiene la rotaci?n en Y
399
         * @return
400
         */
401
        public DataInputContainer getRoty() {
402
                return roty;
403
        }
404
405
        /**
406
         * Obtiene la X de la coordenada superior izquierda
407
         * @return
408
         */
409
        public DataInputContainer getUlx() {
410
                return ulx;
411
        }
412
413
        /**
414
         * Obtiene la Y de la coordenada superior izquierda
415
         * @return
416
         */
417
        public DataInputContainer getUly() {
418
                return uly;
419
        }
420 13127 nacho
421
        /**
422
         * Asigna el flag que dice si se ha modificado la georreferenciaci?n
423
         * y a?n no se ha salvado
424
         * @return true si se ha modificado y false si no se ha hecho
425
         */
426
        public void setModify(boolean modif) {
427
                geolocModify = modif;
428
        }
429
430
        /**
431
         * Obtiene el flag que dice si se ha modificado la georreferenciaci?n
432
         * y a?n no se ha salvado
433
         * @return true si se ha modificado y false si no se ha hecho
434
         */
435
        public boolean getModify() {
436
                return geolocModify;
437
        }
438
439
        /**
440
         * Obtiene el historico de transformaciones
441
         * @return Historical
442
         */
443
        public Historical getHistorical() {
444
                return lyr.getAffineTransformHistorical();
445
        }
446 14135 nbrodin
447 12825 nacho
}