Statistics
| Revision:

gvsig-raster / org.gvsig.raster.georeferencing / trunk / org.gvsig.raster.georeferencing / org.gvsig.raster.georeferencing.swing / org.gvsig.raster.georeferencing.swing.impl / src / main / java / org / gvsig / raster / georeferencing / swing / impl / view / ViewControl.java @ 1712

History | View | Annotate | Download (23.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.georeferencing.swing.impl.view;
23

    
24
import java.awt.BorderLayout;
25
import java.awt.GridBagConstraints;
26
import java.awt.GridBagLayout;
27
import java.awt.Insets;
28
import java.awt.event.ActionEvent;
29
import java.awt.event.ActionListener;
30
import java.awt.geom.Point2D;
31
import java.awt.geom.Rectangle2D;
32
import java.awt.image.BufferedImage;
33
import java.util.ArrayList;
34
import java.util.List;
35

    
36
import javax.swing.JButton;
37
import javax.swing.JPanel;
38
import javax.swing.JToggleButton;
39

    
40
import org.gvsig.andami.IconThemeHelper;
41
import org.gvsig.i18n.Messages;
42
import org.gvsig.raster.georeferencing.swing.exception.InvalidRequestException;
43
import org.gvsig.raster.georeferencing.swing.impl.GeoreferencingSwingImplLibrary;
44
import org.gvsig.raster.georeferencing.swing.impl.layer.ZoomCursorGraphicLayer;
45
import org.gvsig.raster.georeferencing.swing.impl.tool.BaseViewTool;
46
import org.gvsig.raster.georeferencing.swing.impl.tool.PanTool;
47
import org.gvsig.raster.georeferencing.swing.impl.tool.ZoomRectangleTool;
48
import org.gvsig.raster.georeferencing.swing.view.IViewRequestManager;
49
import org.gvsig.raster.georeferencing.swing.view.IGraphicLayer;
50
import org.gvsig.raster.georeferencing.swing.view.ToolEvent;
51
import org.gvsig.raster.georeferencing.swing.view.ToolListener;
52
import org.gvsig.raster.georeferencing.swing.view.ViewEvent;
53
import org.gvsig.raster.georeferencing.swing.view.ViewListener;
54

    
55
/**
56
 * <P>
57
 * Control de zoom. Muestra una imagen contenida en un buffer con controles de aumento
58
 * y disminuci?n del zoom de la misma. 
59
 * </P><P>
60
 * El visualizador mostrar? el buffer de datos pasado en <code>setDrawParams</code>. 
61
 * En esta llamada asignamos tambi?n el Extent del ?rea de datos, tama?o de pixel y punto
62
 * del buffer que coincidir? con el centro del control de zoom. De esta forma la imagen 
63
 * visualizada se centra sobre este punto. En caso de no tener informaci?n geogr?fica del
64
 * buffer de datos a visualizar el Extent coincidir? con su tama?o en p?xeles y el tama?o
65
 * de pixel ser? de 1. El punto donde queramos centrar en este caso se dar? tambi?n en 
66
 * coordenadas pixel.
67
 * </P><P>
68
 * Hay dos usos posibles en este control al accionar el bot?n de zoom: el primero de ellos, en
69
 * caso de que no haya ning?n listener del control de zoom registrado. En este caso se
70
 * aplicar? un escalado sobre los datos del buffer pasado por par?metro. En el caso de que
71
 * haya un listener registrado (IExtensionBuffer) no se aplicar? un escalado sobre el buffer
72
 * sino que se aplicar? una escala de 1.0 y se ejecutar? el m?todo request del interfaz 
73
 * registrado para que el cliente reciba notificaci?n del nuevo extent. 
74
 * </P>
75
 * <P>
76
 * En la inicializaci?n podemos solicitar que los controles de zoom est?n a la izquierda, 
77
 * a la derecha o no esten.
78
 * </p>
79
 *                 
80
 * 21/12/2007
81
 * @author Nacho Brodin nachobrodin@gmail.com
82
 */
83
public class ViewControl extends JPanel  implements ActionListener, ToolListener {
84
        private static final long        serialVersionUID    = 1L;
85
        //Lista de controles
86
        public static final int          ZOOM_INCREASE       = 0;
87
        public static final int          ZOOM_DECREASE       = 1;
88
        public static final int          SELECT_ZOOM_AREA    = 2;
89
        public static final int          FULL_VIEW           = 3;
90
        public static final int          PREV_ZOOM           = 4;
91
        public static final int          PAN                 = 5;
92
        public static final int          LOCATOR             = 6;
93
        
94
        public static final int          RIGHT_CONTROL       = 1;
95
        public static final int          LEFT_CONTROL        = 2;
96
        public static final int          NOCONTROL           = 0;
97
        
98
        private final double             SCALE               = 0.5;
99
        
100
        private int                      control;
101
        private CanvasZone               canvas              = null;
102
        private JPanel                   buttons             = null;
103
        private JButton                                  bZoomMas            = null;
104
        private JButton                                  bZoomMenos          = null;
105
        private JToggleButton            bSelectZoomArea     = null;
106
        private JToggleButton            bMove               = null;
107
        private JButton                                  bFullView           = null;
108
        private JButton                                  bPrevZoom           = null;
109
        private JButton                                  bCenterLocator      = null;
110
        private double                   stepScale           = 2;
111
        private IViewRequestManager        extReq              = null;
112
        private ViewRecord               zoomRecord          = null;
113
        private List<BaseViewTool>       toolList            = null;
114
    private ViewListener             viewListener        = null;
115
    private ViewEvent                viewEvent           = null;
116
        
117
        /**
118
         * Constructor. Crea el panel y asigna el lado donde se crear?n los botones
119
         * @param right true para los botones a derecha y false para la izquierda
120
         */
121
        public ViewControl(int control) {
122
                this.control = control;
123
                toolList = new ArrayList<BaseViewTool>();
124
                
125
                init();
126
                
127
                //Tools predefinidas
128
                addTool(new ZoomRectangleTool(getCanvas(), this));
129
                addTool(new PanTool(getCanvas(), this));
130
        }
131
        
132
        /**
133
         * Asigna el listener de eventos de la vista
134
         * @param listener
135
         */
136
        public void setViewListener(ViewListener listener) {
137
                this.viewListener = listener;
138
                viewEvent = new ViewEvent(this);
139
                getCanvas().setViewListener(viewListener);
140
        }
141
                
142
        /**
143
         * A?ade una tool a la vista de zoom
144
         * @param tool
145
         */
146
        public void addTool(BaseViewTool tool) {
147
                if(!toolList.contains(tool)) 
148
                        toolList.add(tool);
149
        }
150
        
151
        /**
152
         * A?ade una tool a la vista de zoom
153
         * @param tool
154
         */
155
        public void replaceTool(BaseViewTool tool) {
156
                for (int i = 0; i < toolList.size(); i++) {
157
                        if(toolList.get(i).getClass().isInstance(tool)) {
158
                                toolList.remove(i);
159
                                break;
160
                        }
161
                        toolList.add(tool);
162
                }
163
        }
164
        
165
        /**
166
         * Obtiene la tool seleccionada
167
         * @return
168
         */
169
        public BaseViewTool getToolSelected() {
170
                return getCanvas().getSelectedTool();
171
        }
172
        
173
        /**
174
         * Selecciona una herramienta a partir de su clase. Si el argumento es null
175
         * elimina cualquier herramienta seleccionada.
176
         * @param tool
177
         */
178
        public void selectTool(Class<?> tool, boolean select) {
179
                //Si tool es null se desactivan todas y ponemos la seleccionada en el canvas a null
180
                if(tool == null) {
181
                        for (int i = 0; i < toolList.size(); i++)
182
                                ((BaseViewTool)toolList.get(i)).setActive(false);
183
                        getCanvas().setSelectedTool(null);
184
                        return;
185
                }
186
                
187
                //Si seleccionamos una esta se activa, se asigna al canvas y las otras se desactivan
188
                if(select) {
189
                        for (int i = 0; i < toolList.size(); i++) {
190
                                if(tool.isInstance(toolList.get(i))) {
191
                                        ((BaseViewTool)toolList.get(i)).setActive(true);
192
                                        getCanvas().setSelectedTool((BaseViewTool)toolList.get(i));
193
                                        if(viewListener != null)
194
                                                viewListener.addingTool(viewEvent);
195
                                } else
196
                                        ((BaseViewTool)toolList.get(i)).setActive(false);
197
                        }
198
                        return;
199
                }
200
                //Si quitamos una esta se desactiva y si es la del canvas se quita tambi?n
201
                for (int i = 0; i < toolList.size(); i++) {
202
                        if(tool.isInstance(toolList.get(i))) {
203
                                ((BaseViewTool)toolList.get(i)).setActive(false);
204
                                if(tool.isInstance(getCanvas().getSelectedTool()))
205
                                        getCanvas().setSelectedTool(null);
206
                        }
207
                }
208
        }
209
        
210
        /**
211
         * Selecciona una herramienta a partir de su clase deseleccionando cualquier
212
         * otra que estuviera activa. Si el argumento es null
213
         * elimina cualquier herramienta seleccionada.
214
         * @param tool
215
         */
216
        public void selectUniqueTool(Class<?> tool) {
217
                if(tool == null) {
218
                        for (int i = 0; i < toolList.size(); i++)
219
                                ((BaseViewTool)toolList.get(i)).setActive(false);
220
                        getCanvas().setSelectedTool(null);
221
                        return;
222
                }
223
                for (int i = 0; i < toolList.size(); i++) {
224
                        if(tool.isInstance(toolList.get(i))) {
225
                                ((BaseViewTool)toolList.get(i)).setActive(true);
226
                                getCanvas().setSelectedTool((BaseViewTool)toolList.get(i));
227
                                if(viewListener != null)
228
                                        viewListener.addingTool(viewEvent);
229
                        } else
230
                                ((BaseViewTool)toolList.get(i)).setActive(false);
231
                }
232
        }
233
        
234
        /**
235
         * Registra un listener a la tool especificada por el par?metro de la llamada.
236
         * @param tool Clase de la tool a la que queremos registrar el listener
237
         * @return true si se ha registrado con ?xito y false si no se ha hecho
238
         */
239
        public boolean registerToolListener(Class<?> tool, ToolListener listener) {
240
                if(tool == null)
241
                        return false;
242
                for (int i = 0; i < toolList.size(); i++) {
243
                        if(tool.isInstance(toolList.get(i))) {
244
                                ((BaseViewTool)toolList.get(i)).addToolListener(listener);
245
                                return true;
246
                        }
247
                }
248
                return false;
249
        }
250
        
251
        /**
252
         * Desactiva las herramientas temporalmente. Guarda el estado en el que estaban
253
         * para restaurarlo cuando se invoque a awake
254
         */
255
        public void sleepTools() {
256
                for (int i = 0; i < toolList.size(); i++) 
257
                        ((BaseViewTool)toolList.get(i)).sleep();
258
        }
259
        
260
        /**
261
         * Recupera el estado de activaci?n que ten?a antes de la ?ltima invocaci?n 
262
         * de sleep
263
         */
264
        public void awakeTools() {
265
                for (int i = 0; i < toolList.size(); i++) 
266
                        ((BaseViewTool)toolList.get(i)).awake();
267
        }
268
        
269
        /**
270
         * Inicializaci?n de los componetes
271
         */
272
        private void init() {
273
                BorderLayout layout = new BorderLayout();
274
                setLayout(layout); 
275
                
276
                if(control == LEFT_CONTROL)
277
                        add(getButtonsPanel(), BorderLayout.WEST);
278
                if(control == RIGHT_CONTROL)
279
                        add(getButtonsPanel(), BorderLayout.EAST);
280
                
281
                add(getCanvas(), BorderLayout.CENTER);
282
        }
283
        
284
        /**
285
         * Oculta el bot?n indicado en el par?metro
286
         * @param b Constante definida en ZoomControl
287
         */
288
        public void hideButton(int b) {
289
                switch (b) {
290
                case ZOOM_INCREASE: this.getBZoomMas().setVisible(false);
291
                        break;
292
                case ZOOM_DECREASE: this.getBZoomMenos().setVisible(false);
293
                        break;
294
                case SELECT_ZOOM_AREA: this.getBSelectZoomArea().setVisible(false);
295
                        break;
296
                case FULL_VIEW: this.getBFullView().setVisible(false);
297
                        break;
298
                case PREV_ZOOM: this.getBPrevZoom().setVisible(false);
299
                        break;
300
                case PAN: this.getBMove().setVisible(false);
301
                        break;
302
                case LOCATOR: this.getBCenterLocator().setVisible(false);
303
                        break;
304
                default:
305
                        break;
306
                }
307
        }
308
        
309
        /**
310
         * Muestra el bot?n indicado en el par?metro
311
         * @param b Constante definida en ZoomControl
312
         */
313
        public void showButton(int b) {
314
                switch (b) {
315
                case ZOOM_INCREASE: this.getBZoomMas().setVisible(true);
316
                        break;
317
                case ZOOM_DECREASE: this.getBZoomMenos().setVisible(true);
318
                        break;
319
                case SELECT_ZOOM_AREA: this.getBSelectZoomArea().setVisible(true);
320
                        break;
321
                case FULL_VIEW: this.getBFullView().setVisible(true);
322
                        break;
323
                case PREV_ZOOM: this.getBPrevZoom().setVisible(true);
324
                        break;
325
                case PAN: this.getBMove().setVisible(true);
326
                        break;
327
                case LOCATOR: this.getBCenterLocator().setVisible(true);
328
                        break;
329
                default:
330
                        break;
331
                }
332
        }
333
        
334
        /**
335
         * Asigna una capa gr?fica
336
         * @param layer IGraphicLayer
337
         */
338
        public void setGraphicLayer(IGraphicLayer layer) {
339
                getCanvas().setGraphicLayer(layer);
340
        }
341
        
342
        /**
343
         * Obtiene el panel de dibujado del zoom
344
         * @return Canvas Zone
345
         */
346
        public CanvasZone getCanvas() {
347
                if(canvas == null) {
348
                        canvas = new CanvasZone();
349
                        canvas.setViewListener(viewListener);
350
                        canvas.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
351
                }
352
                return canvas;
353
        }
354
        
355
        /**
356
         * Obtiene el panel con los botones de zoom
357
         * @return 
358
         */
359
        public JPanel getButtonsPanel() {
360
                if(buttons == null) {
361
                        buttons = new JPanel();
362
                        GridBagLayout l = new GridBagLayout();
363
                        GridBagConstraints gbc = new GridBagConstraints();
364
                        gbc.insets = new Insets(5, 0, 3, 3);
365
                        buttons.setLayout(l);
366
                        
367
                        buttons.add(getBZoomMas(), gbc);
368
                        gbc.gridy = 1;
369
                        buttons.add(getBZoomMenos(), gbc);
370
                        gbc.gridy = 2;
371
                        buttons.add(getBSelectZoomArea(), gbc);
372
                        gbc.gridy = 3;
373
                        buttons.add(getBFullView(), gbc);
374
                        gbc.gridy = 4;
375
                        buttons.add(getBPrevZoom(), gbc);
376
                        gbc.gridy = 5;
377
                        buttons.add(getBMove(), gbc);
378
                        gbc.gridy = 6;
379
                        buttons.add(getBCenterLocator(), gbc);
380
                }
381
                return buttons;
382
        }
383
        
384
        /**
385
         * Crea el bot?n de zoom m?s
386
         * @return JButton
387
         */
388
        public JButton getBZoomMas() {
389
                if (bZoomMas == null) {
390
                        bZoomMas = new JButton();
391
                        bZoomMas.setToolTipText(Messages.getText("zoom_mas"));
392
                        bZoomMas.setPreferredSize(new java.awt.Dimension(25,25));
393
                        try{
394
                                bZoomMas.setIcon(IconThemeHelper.getImageIcon("increase-icon"));
395
                        }catch(NullPointerException e){
396
                                //Sin icono
397
                        }
398
                        bZoomMas.addActionListener(this);
399
                }
400
                return bZoomMas;
401
        }
402
        
403
        /**
404
         * Crea el bot?n de centrar el localizador
405
         * @return JButton
406
         */
407
        public JButton getBCenterLocator() {
408
                if (bCenterLocator == null) {
409
                        bCenterLocator = new JButton();
410
                        bCenterLocator.setToolTipText(Messages.getText("center_locator"));
411
                        bCenterLocator.setPreferredSize(new java.awt.Dimension(25,25));
412
                        try{
413
                                bCenterLocator.setIcon(IconThemeHelper.getImageIcon("centerlocator-icon"));
414
                        }catch(NullPointerException e){
415
                                //Sin icono
416
                        }
417
                        bCenterLocator.addActionListener(this);
418
                }
419
                return bCenterLocator;
420
        }
421

    
422
        /**
423
         * Crea el bot?n de zoom menos
424
         * @return JButton
425
         */
426
        public JButton getBZoomMenos() {
427
                if (bZoomMenos == null) {
428
                        bZoomMenos = new JButton();
429
                        bZoomMenos.setToolTipText(Messages.getText("zoom_menos"));
430
                        bZoomMenos.setPreferredSize(new java.awt.Dimension(25,25));
431
                        try{
432
                                bZoomMenos.setIcon(IconThemeHelper.getImageIcon("decrease-icon"));
433
                        }catch(NullPointerException e){
434
                                //Sin icono
435
                        }
436
                        bZoomMenos.addActionListener(this);
437
                }
438
                return bZoomMenos;
439
        }
440
        
441
        /**
442
         * Crea el bot?n de selecci?n de zoom por ?rea
443
         * @return JButton
444
         */
445
        public JToggleButton getBSelectZoomArea() {
446
                if (bSelectZoomArea == null) {
447
                        bSelectZoomArea = new JToggleButton();
448
                        bSelectZoomArea.setToolTipText(Messages.getText("select_zoom_area"));
449
                        bSelectZoomArea.setPreferredSize(new java.awt.Dimension(25,25));
450
                        try{
451
                                bSelectZoomArea.setIcon(IconThemeHelper.getImageIcon("selectzoomarea-icon"));
452
                        }catch(NullPointerException e){
453
                                //Sin icono
454
                        }
455
                        bSelectZoomArea.addActionListener(this);
456
                }
457
                return bSelectZoomArea;
458
        }
459
        
460
        /**
461
         * Crea el bot?n de desplazamiento de imagen
462
         * @return JToggleButton
463
         */
464
        public JToggleButton getBMove() {
465
                if (bMove == null) {
466
                        bMove = new JToggleButton();
467
                        bMove.setToolTipText(Messages.getText("move_image"));
468
                        bMove.setPreferredSize(new java.awt.Dimension(25,25));
469
                        try{
470
                                bMove.setIcon(IconThemeHelper.getImageIcon("hand-icon"));
471
                        }catch(NullPointerException e){
472
                                //Sin icono
473
                        }
474
                        bMove.addActionListener(this);
475
                }
476
                return bMove;
477
        }
478
        
479
        /**
480
         * Crea el bot?n de zoom m?s
481
         * @return
482
         */
483
        public JButton getBPrevZoom() {
484
                if (bPrevZoom == null) {
485
                        bPrevZoom = new JButton();
486
                        bPrevZoom.setToolTipText(Messages.getText("prev_zoom"));
487
                        bPrevZoom.setPreferredSize(new java.awt.Dimension(25,25));
488
                        try{
489
                                bPrevZoom.setIcon(IconThemeHelper.getImageIcon("prevzoom-icon"));
490
                        }catch(NullPointerException e){
491
                                //Sin icono
492
                        }
493
                        bPrevZoom.addActionListener(this);
494
                }
495
                return bPrevZoom;
496
        }
497
        
498
        /**
499
         * Crea el bot?n de zoom completo. El zoom completo inicializa al primer zoom 
500
         * que recibi? en caso de que no se est? usando un IExtensionRequest, ya que no tendr?a conocimiento
501
         * del tama?o total de capa, sino solo del buffer que tiene en ese momento. En caso de usar un 
502
         * IExtensionRequest entonces se har? la petici?n correspondiente al interfaz.  
503
         * @return JButton
504
         */
505
        public JButton getBFullView() {
506
                if (bFullView == null) {
507
                        bFullView = new JButton();
508
                        bFullView.setToolTipText(Messages.getText("full_view"));
509
                        bFullView.setPreferredSize(new java.awt.Dimension(25,25));
510
                        try{
511
                                bFullView.setIcon(IconThemeHelper.getImageIcon("fullview-icon"));
512
                        }catch(NullPointerException e){
513
                                //Sin icono
514
                        }
515
                        bFullView.addActionListener(this);
516
                }
517
                return bFullView;
518
        }
519
        
520
        /**
521
         * Asigna los par?metros de dibujado
522
         * @param img Buffer con un ?rea de datos
523
         * @param ext Rectangle2D del ?rea de datos dada 
524
         * @param pixelSize Tama?o de pixel
525
         * @param center Punto del ?rea de datos donde se quiere centrar el dibujado del buffer
526
         */
527
        public void setDrawParams(BufferedImage img, Rectangle2D ext, double pixelSize, Point2D center) {
528
                getZoomRecord().setRequest(ext);
529
                getCanvas().setDrawParams(img, ext, pixelSize, center) ;
530
        }
531
        
532
        /**
533
         * Asigna un nuevo centro de visualizaci?n. Vuelve a realizar la petici?n
534
         * @param center
535
         */
536
        public void setCenter(Point2D center) {
537
                Rectangle2D ext = getCanvas().getExtent();
538
                double diffX = center.getX() - ext.getCenterX();
539
                double diffY = center.getY() - ext.getCenterY();
540
                ext.setRect(ext.getX() + diffX, ext.getY() + diffY, ext.getWidth(), ext.getHeight());
541
                try {
542
                        getCanvas().setForceRequest(true);
543
                        if(extReq != null)
544
                                extReq.request(ext);
545
                } catch (InvalidRequestException e) {
546
                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
547
                }
548
        }
549
                
550
        /**
551
         * Registra un objeto IExtensionRequest para que no se aplique un escalado sobre
552
         * el buffer pasado por par?metro. Alternativamente a la aplicaci?n de este escalado
553
         * se ejecutar? el m?todo request del interfaz para que el cliente pueda pasar un 
554
         * nuevo buffer con escala 1:1 y con la extensi?n correspondiente al zoom, Es decir, se 
555
         * deja en manos del cliente la aplicaci?n del zoom.
556
         * @param er
557
         */
558
        public void setExtensionRequest(IViewRequestManager er) {
559
                this.extReq = er;
560
        }
561
        
562
        /**
563
         * Obtiene el objeto IExtensionRequest
564
         * @param er
565
         */
566
        public IViewRequestManager getExtensionRequest() {
567
                return extReq;
568
        }
569
        
570
        /**
571
         * Obtiene el historico de zooms
572
         * @return ZoomRecord
573
         */
574
        public ViewRecord getZoomRecord() {
575
                if(zoomRecord == null) {
576
                        zoomRecord = new ViewRecord();
577
                        //zoomRecord.setRequest(new Integer(FULL_VIEW));
578
                }
579
                return zoomRecord;
580
        }
581

    
582
        /**
583
         * Eventos de los botones zoom m?s y zoom menos.
584
         */
585
        public void actionPerformed(ActionEvent e) {
586
                //Centrar el localizador
587
                if(e.getSource() == bCenterLocator) {
588
                        List<IGraphicLayer> graphicLayers = getCanvas().getGraphicLayers();
589
                        for (int i = 0; i < graphicLayers.size(); i++) {
590
                                if(graphicLayers.get(i) instanceof ZoomCursorGraphicLayer) { 
591
                                        ((ZoomCursorGraphicLayer)graphicLayers.get(i)).setCursorPosition(getCanvas().getWidth() / 2, canvas.getHeight() / 2);
592
                                        ((ZoomCursorGraphicLayer)graphicLayers.get(i)).resetCursorSize();
593
                                }
594
                        }
595
                }
596
                
597
                if(extReq == null) {
598
                        if(e.getSource() == bZoomMas)
599
                                getCanvas().setZoom(canvas.getZoom() * stepScale);
600

    
601
                        if(e.getSource() == bZoomMenos)
602
                                getCanvas().setZoom(canvas.getZoom() / stepScale);
603
                        
604
                        if(e.getSource() == bFullView) 
605
                                getCanvas().setZoom(1);
606

    
607
                } else {
608
                        double width = 0, height = 0;
609
                        getCanvas().setZoom(1);
610
                        
611
                        //Zoom Todo
612
                        if(e.getSource() == bFullView) {
613
                                try {
614
                                        extReq.fullExtent();
615
                                } catch (InvalidRequestException e1) {
616
                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
617
                                }
618
                                return;
619
                        }
620
                        
621
                        //Zoom Anterior
622
                        if(e.getSource() == bPrevZoom) {
623
                                Object request = getZoomRecord().getRequest();
624
                                if(request != null) {
625
                                        if(request instanceof Rectangle2D) {
626
                                                try {
627
                                                        extReq.request((Rectangle2D)request);
628
                                                } catch (InvalidRequestException e1) {
629
                                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
630
                                                }
631
                                        }
632
                                        if(request instanceof Integer && ((Integer)request).intValue() == FULL_VIEW) {
633
                                                try {
634
                                                        extReq.fullExtent();
635
                                                } catch (InvalidRequestException e1) {
636
                                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
637
                                                }
638
                                        }
639
                                        getZoomRecord().getRequest(); //El que hemos metido al hacer zoom previo no sirve por lo que hay que sacarlo
640
                                }
641
                                return;
642
                        }
643
                        
644
                        width = getCanvas().getCanvasExtent().getWidth();
645
                        height = getCanvas().getCanvasExtent().getHeight();
646
                        
647
                        //Desplazamiento
648
                        if(e.getSource() == bMove) {
649
                                if(getBMove().isSelected())
650
                                        selectTool(PanTool.class, true);
651
                                else
652
                                        selectTool(PanTool.class, false);
653
                        }
654
                        
655
                        //Zoom por selecci?n de ?rea
656
                        if(e.getSource() == bSelectZoomArea) {
657
                                if(getBSelectZoomArea().isSelected())
658
                                        selectTool(ZoomRectangleTool.class, true);
659
                                else
660
                                        selectTool(ZoomRectangleTool.class, false);
661
                        }
662
                        
663
                        //Zoom m?s
664
                        if(e.getSource() == bZoomMas) {
665
                                width = getCanvas().getCanvasExtent().getWidth() * SCALE;
666
                                height = getCanvas().getCanvasExtent().getHeight() * SCALE;
667
                        }
668
                        
669
                        //Zoom menos
670
                        if(e.getSource() == bZoomMenos) {
671
                                width = getCanvas().getCanvasExtent().getWidth() / SCALE;
672
                                height = getCanvas().getCanvasExtent().getHeight() / SCALE;
673
                        }
674
                        //C?digo com?n a bZoomMas y bZoomMenos
675
                        double x = getCanvas().getCenter().getX() - (width / 2);
676
                        double y = getCanvas().getCenter().getY() - (height / 2);
677
                        Rectangle2D request = new Rectangle2D.Double(x, y, width, height);
678
                        try {
679
                                extReq.request(request);
680
                        } catch (InvalidRequestException e1) {
681
                                GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
682
                        }
683
                }
684
        }
685
        
686
        /**
687
         * Recarga la vista con los par?metros de tama?o y
688
         * extensi?n actuales
689
         */
690
        public void reload() {
691
                double width = getCanvas().getCanvasExtent().getWidth();
692
                double height = getCanvas().getCanvasExtent().getHeight();
693
                double x = getCanvas().getCenter().getX() - (width / 2);
694
                double y = getCanvas().getCenter().getY() - (height / 2);
695
                Rectangle2D request = new Rectangle2D.Double(x, y, width, height);
696
                try {
697
                        getCanvas().setForceRequest(true);
698
                        if(extReq != null)
699
                                extReq.request(request);
700
                } catch (InvalidRequestException e1) {
701
                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
702
                }
703
        }
704
        
705
        /** 
706
         * Obtiene el ancho del canvas
707
         * @return 
708
         */
709
        public int getCanvasWith() {
710
                return getCanvas().getVisibleRect().width;
711
        }
712
        
713
        /**
714
         * Obtiene el alto del canvas
715
         * @return
716
         */
717
        public int getCanvasHeight() {
718
                return getCanvas().getVisibleRect().height;
719
        }
720

    
721
        /**
722
         * Evento de finalizaci?n de la tool que maneja el viewControl y de la capa con el 
723
         * cursor gr?fico que controla el ?rea de la miniimagen asociada
724
         */
725
        public void endAction(ToolEvent ev) {
726
                if(ev.getSource() instanceof ZoomRectangleTool || ev.getSource() instanceof PanTool) {
727
                        Rectangle2D extent = (Rectangle2D)getCanvas().getSelectedTool().getResult();
728
                        try {
729
                                if(extReq != null)
730
                                        extReq.request(extent);
731
                        } catch (InvalidRequestException e1) {
732
                                GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
733
                        }
734
                }
735
        }
736
        
737
        /*
738
         * (non-Javadoc)
739
         * @see org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolListener#activeTool(org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolEvent)
740
         */
741
        public void onTool(ToolEvent ev) {}
742
        
743
        /*
744
         * (non-Javadoc)
745
         * @see org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolListener#offTool(org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolEvent)
746
         */
747
        public void offTool(ToolEvent ev) {}
748

    
749
}