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 @ 1752

History | View | Annotate | Download (24.5 KB)

1 1479 nbrodin
/* gvSIG. Geographic Information System of the Valencian Government
2 1475 nbrodin
 *
3 1479 nbrodin
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5 1475 nbrodin
 *
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 1479 nbrodin
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21 1475 nbrodin
 */
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 1728 nbrodin
import org.gvsig.raster.georeferencing.swing.GeoreferencingSwingLibrary;
43 1475 nbrodin
import org.gvsig.raster.georeferencing.swing.exception.InvalidRequestException;
44
import org.gvsig.raster.georeferencing.swing.impl.GeoreferencingSwingImplLibrary;
45
import org.gvsig.raster.georeferencing.swing.impl.layer.ZoomCursorGraphicLayer;
46
import org.gvsig.raster.georeferencing.swing.impl.tool.BaseViewTool;
47
import org.gvsig.raster.georeferencing.swing.impl.tool.PanTool;
48
import org.gvsig.raster.georeferencing.swing.impl.tool.ZoomRectangleTool;
49 1719 nbrodin
import org.gvsig.raster.georeferencing.swing.view.GeoreferencingView;
50 1712 nbrodin
import org.gvsig.raster.georeferencing.swing.view.IViewRequestManager;
51 1475 nbrodin
import org.gvsig.raster.georeferencing.swing.view.IGraphicLayer;
52
import org.gvsig.raster.georeferencing.swing.view.ToolEvent;
53
import org.gvsig.raster.georeferencing.swing.view.ToolListener;
54
import org.gvsig.raster.georeferencing.swing.view.ViewEvent;
55
import org.gvsig.raster.georeferencing.swing.view.ViewListener;
56
57
/**
58
 * <P>
59
 * Control de zoom. Muestra una imagen contenida en un buffer con controles de aumento
60
 * y disminuci?n del zoom de la misma.
61
 * </P><P>
62
 * El visualizador mostrar? el buffer de datos pasado en <code>setDrawParams</code>.
63
 * En esta llamada asignamos tambi?n el Extent del ?rea de datos, tama?o de pixel y punto
64
 * del buffer que coincidir? con el centro del control de zoom. De esta forma la imagen
65
 * visualizada se centra sobre este punto. En caso de no tener informaci?n geogr?fica del
66
 * buffer de datos a visualizar el Extent coincidir? con su tama?o en p?xeles y el tama?o
67
 * de pixel ser? de 1. El punto donde queramos centrar en este caso se dar? tambi?n en
68
 * coordenadas pixel.
69
 * </P><P>
70
 * Hay dos usos posibles en este control al accionar el bot?n de zoom: el primero de ellos, en
71
 * caso de que no haya ning?n listener del control de zoom registrado. En este caso se
72
 * aplicar? un escalado sobre los datos del buffer pasado por par?metro. En el caso de que
73
 * haya un listener registrado (IExtensionBuffer) no se aplicar? un escalado sobre el buffer
74
 * sino que se aplicar? una escala de 1.0 y se ejecutar? el m?todo request del interfaz
75
 * registrado para que el cliente reciba notificaci?n del nuevo extent.
76
 * </P>
77
 * <P>
78
 * En la inicializaci?n podemos solicitar que los controles de zoom est?n a la izquierda,
79
 * a la derecha o no esten.
80
 * </p>
81
 *
82
 * 21/12/2007
83
 * @author Nacho Brodin nachobrodin@gmail.com
84
 */
85
public class ViewControl extends JPanel  implements ActionListener, ToolListener {
86
        private static final long        serialVersionUID    = 1L;
87
        //Lista de controles
88
        public static final int          ZOOM_INCREASE       = 0;
89
        public static final int          ZOOM_DECREASE       = 1;
90
        public static final int          SELECT_ZOOM_AREA    = 2;
91
        public static final int          FULL_VIEW           = 3;
92
        public static final int          PREV_ZOOM           = 4;
93
        public static final int          PAN                 = 5;
94
        public static final int          LOCATOR             = 6;
95
96
        public static final int          RIGHT_CONTROL       = 1;
97
        public static final int          LEFT_CONTROL        = 2;
98
        public static final int          NOCONTROL           = 0;
99
100
        private final double             SCALE               = 0.5;
101
102 1728 nbrodin
        private int                      controlsPosition;
103 1475 nbrodin
        private CanvasZone               canvas              = null;
104
        private JPanel                   buttons             = null;
105
        private JButton                                  bZoomMas            = null;
106
        private JButton                                  bZoomMenos          = null;
107
        private JToggleButton            bSelectZoomArea     = null;
108
        private JToggleButton            bMove               = null;
109
        private JButton                                  bFullView           = null;
110
        private JButton                                  bPrevZoom           = null;
111
        private JButton                                  bCenterLocator      = null;
112
        private double                   stepScale           = 2;
113 1719 nbrodin
        private IViewRequestManager      extReq              = null;
114 1475 nbrodin
        private ViewRecord               zoomRecord          = null;
115
        private List<BaseViewTool>       toolList            = null;
116
    private ViewListener             viewListener        = null;
117
    private ViewEvent                viewEvent           = null;
118
119
        /**
120
         * Constructor. Crea el panel y asigna el lado donde se crear?n los botones
121
         * @param right true para los botones a derecha y false para la izquierda
122
         */
123 1719 nbrodin
        public ViewControl(int control, GeoreferencingView parentView) {
124 1728 nbrodin
                this.controlsPosition = control;
125 1475 nbrodin
                toolList = new ArrayList<BaseViewTool>();
126
127
                init();
128
        }
129
130
        /**
131
         * Asigna el listener de eventos de la vista
132
         * @param listener
133
         */
134
        public void setViewListener(ViewListener listener) {
135
                this.viewListener = listener;
136
                viewEvent = new ViewEvent(this);
137
                getCanvas().setViewListener(viewListener);
138
        }
139
140
        /**
141
         * A?ade una tool a la vista de zoom
142
         * @param tool
143
         */
144
        public void addTool(BaseViewTool tool) {
145
                if(!toolList.contains(tool))
146
                        toolList.add(tool);
147
        }
148
149
        /**
150
         * A?ade una tool a la vista de zoom
151
         * @param tool
152
         */
153
        public void replaceTool(BaseViewTool tool) {
154
                for (int i = 0; i < toolList.size(); i++) {
155
                        if(toolList.get(i).getClass().isInstance(tool)) {
156
                                toolList.remove(i);
157
                                break;
158
                        }
159
                        toolList.add(tool);
160
                }
161
        }
162
163
        /**
164
         * Obtiene la tool seleccionada
165
         * @return
166
         */
167
        public BaseViewTool getToolSelected() {
168 1492 nbrodin
                return getCanvas().getSelectedTool();
169 1475 nbrodin
        }
170
171
        /**
172
         * Selecciona una herramienta a partir de su clase. Si el argumento es null
173
         * elimina cualquier herramienta seleccionada.
174
         * @param tool
175
         */
176 1728 nbrodin
        /*public void selectTool(Class<?> tool, boolean select) {
177 1475 nbrodin
                //Si tool es null se desactivan todas y ponemos la seleccionada en el canvas a null
178
                if(tool == null) {
179
                        for (int i = 0; i < toolList.size(); i++)
180
                                ((BaseViewTool)toolList.get(i)).setActive(false);
181 1492 nbrodin
                        getCanvas().setSelectedTool(null);
182 1475 nbrodin
                        return;
183
                }
184

185
                //Si seleccionamos una esta se activa, se asigna al canvas y las otras se desactivan
186
                if(select) {
187
                        for (int i = 0; i < toolList.size(); i++) {
188
                                if(tool.isInstance(toolList.get(i))) {
189
                                        ((BaseViewTool)toolList.get(i)).setActive(true);
190 1492 nbrodin
                                        getCanvas().setSelectedTool((BaseViewTool)toolList.get(i));
191 1475 nbrodin
                                        if(viewListener != null)
192
                                                viewListener.addingTool(viewEvent);
193
                                } else
194
                                        ((BaseViewTool)toolList.get(i)).setActive(false);
195
                        }
196
                        return;
197
                }
198
                //Si quitamos una esta se desactiva y si es la del canvas se quita tambi?n
199
                for (int i = 0; i < toolList.size(); i++) {
200
                        if(tool.isInstance(toolList.get(i))) {
201
                                ((BaseViewTool)toolList.get(i)).setActive(false);
202 1492 nbrodin
                                if(tool.isInstance(getCanvas().getSelectedTool()))
203
                                        getCanvas().setSelectedTool(null);
204 1475 nbrodin
                        }
205
                }
206 1728 nbrodin
        }*/
207
208
        public void enableTool(int tool) {
209
                if(tool < 0) {
210
                        disableAllTools();
211
                        return;
212
                }
213
214
                for (int i = 0; i < toolList.size(); i++) {
215
                        if(toolList.get(i).getToolType() == tool) {
216
                                ((BaseViewTool)toolList.get(i)).setActive(true);
217
                                getCanvas().setSelectedTool((BaseViewTool)toolList.get(i));
218
                                if(viewListener != null)
219
                                        viewListener.addingTool(viewEvent);
220
                        }
221
                }
222
                return;
223 1475 nbrodin
        }
224 1728 nbrodin
225 1475 nbrodin
        /**
226
         * Selecciona una herramienta a partir de su clase deseleccionando cualquier
227
         * otra que estuviera activa. Si el argumento es null
228
         * elimina cualquier herramienta seleccionada.
229
         * @param tool
230
         */
231
        public void selectUniqueTool(Class<?> tool) {
232
                if(tool == null) {
233
                        for (int i = 0; i < toolList.size(); i++)
234
                                ((BaseViewTool)toolList.get(i)).setActive(false);
235 1492 nbrodin
                        getCanvas().setSelectedTool(null);
236 1475 nbrodin
                        return;
237
                }
238
                for (int i = 0; i < toolList.size(); i++) {
239
                        if(tool.isInstance(toolList.get(i))) {
240
                                ((BaseViewTool)toolList.get(i)).setActive(true);
241 1492 nbrodin
                                getCanvas().setSelectedTool((BaseViewTool)toolList.get(i));
242 1475 nbrodin
                                if(viewListener != null)
243
                                        viewListener.addingTool(viewEvent);
244
                        } else
245
                                ((BaseViewTool)toolList.get(i)).setActive(false);
246
                }
247
        }
248
249
        /**
250
         * Registra un listener a la tool especificada por el par?metro de la llamada.
251
         * @param tool Clase de la tool a la que queremos registrar el listener
252
         * @return true si se ha registrado con ?xito y false si no se ha hecho
253
         */
254
        public boolean registerToolListener(Class<?> tool, ToolListener listener) {
255
                if(tool == null)
256
                        return false;
257
                for (int i = 0; i < toolList.size(); i++) {
258
                        if(tool.isInstance(toolList.get(i))) {
259
                                ((BaseViewTool)toolList.get(i)).addToolListener(listener);
260
                                return true;
261
                        }
262
                }
263
                return false;
264
        }
265
266
        /**
267
         * Desactiva las herramientas temporalmente. Guarda el estado en el que estaban
268
         * para restaurarlo cuando se invoque a awake
269
         */
270
        public void sleepTools() {
271
                for (int i = 0; i < toolList.size(); i++)
272
                        ((BaseViewTool)toolList.get(i)).sleep();
273
        }
274
275 1728 nbrodin
        public void disableAllTools() {
276
                for (int i = 0; i < toolList.size(); i++) {
277
                        ((BaseViewTool)toolList.get(i)).setActive(false);
278
                }
279
                getBMove().setSelected(false);
280
                getBSelectZoomArea().setSelected(false);
281
                getCanvas().setSelectedTool(null);
282
        }
283
284 1475 nbrodin
        /**
285 1728 nbrodin
         * Disables a tool in this view
286
         * @param enable
287
         */
288
        public void disableTool(int tool) {
289
                for (int i = 0; i < toolList.size(); i++) {
290
                        if(toolList.get(i).getToolType() == tool) {
291
                                ((BaseViewTool)toolList.get(i)).setActive(false);
292
                        }
293
                }
294
        }
295
296
        /**
297 1475 nbrodin
         * Recupera el estado de activaci?n que ten?a antes de la ?ltima invocaci?n
298
         * de sleep
299
         */
300
        public void awakeTools() {
301
                for (int i = 0; i < toolList.size(); i++)
302
                        ((BaseViewTool)toolList.get(i)).awake();
303
        }
304
305
        /**
306
         * Inicializaci?n de los componetes
307
         */
308
        private void init() {
309
                BorderLayout layout = new BorderLayout();
310
                setLayout(layout);
311
312 1728 nbrodin
                if(controlsPosition == LEFT_CONTROL)
313 1475 nbrodin
                        add(getButtonsPanel(), BorderLayout.WEST);
314 1728 nbrodin
                if(controlsPosition == RIGHT_CONTROL)
315 1475 nbrodin
                        add(getButtonsPanel(), BorderLayout.EAST);
316
317
                add(getCanvas(), BorderLayout.CENTER);
318
        }
319
320
        /**
321
         * Oculta el bot?n indicado en el par?metro
322
         * @param b Constante definida en ZoomControl
323
         */
324
        public void hideButton(int b) {
325
                switch (b) {
326
                case ZOOM_INCREASE: this.getBZoomMas().setVisible(false);
327
                        break;
328
                case ZOOM_DECREASE: this.getBZoomMenos().setVisible(false);
329
                        break;
330
                case SELECT_ZOOM_AREA: this.getBSelectZoomArea().setVisible(false);
331
                        break;
332
                case FULL_VIEW: this.getBFullView().setVisible(false);
333
                        break;
334
                case PREV_ZOOM: this.getBPrevZoom().setVisible(false);
335
                        break;
336
                case PAN: this.getBMove().setVisible(false);
337
                        break;
338
                case LOCATOR: this.getBCenterLocator().setVisible(false);
339
                        break;
340
                default:
341
                        break;
342
                }
343
        }
344
345
        /**
346
         * Muestra el bot?n indicado en el par?metro
347
         * @param b Constante definida en ZoomControl
348
         */
349
        public void showButton(int b) {
350
                switch (b) {
351
                case ZOOM_INCREASE: this.getBZoomMas().setVisible(true);
352
                        break;
353
                case ZOOM_DECREASE: this.getBZoomMenos().setVisible(true);
354
                        break;
355
                case SELECT_ZOOM_AREA: this.getBSelectZoomArea().setVisible(true);
356
                        break;
357
                case FULL_VIEW: this.getBFullView().setVisible(true);
358
                        break;
359
                case PREV_ZOOM: this.getBPrevZoom().setVisible(true);
360
                        break;
361
                case PAN: this.getBMove().setVisible(true);
362
                        break;
363
                case LOCATOR: this.getBCenterLocator().setVisible(true);
364
                        break;
365
                default:
366
                        break;
367
                }
368
        }
369
370
        /**
371
         * Asigna una capa gr?fica
372
         * @param layer IGraphicLayer
373
         */
374
        public void setGraphicLayer(IGraphicLayer layer) {
375 1492 nbrodin
                getCanvas().setGraphicLayer(layer);
376 1475 nbrodin
        }
377
378
        /**
379
         * Obtiene el panel de dibujado del zoom
380
         * @return Canvas Zone
381
         */
382
        public CanvasZone getCanvas() {
383
                if(canvas == null) {
384
                        canvas = new CanvasZone();
385
                        canvas.setViewListener(viewListener);
386
                        canvas.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
387
                }
388
                return canvas;
389
        }
390
391
        /**
392
         * Obtiene el panel con los botones de zoom
393
         * @return
394
         */
395
        public JPanel getButtonsPanel() {
396
                if(buttons == null) {
397
                        buttons = new JPanel();
398
                        GridBagLayout l = new GridBagLayout();
399
                        GridBagConstraints gbc = new GridBagConstraints();
400
                        gbc.insets = new Insets(5, 0, 3, 3);
401
                        buttons.setLayout(l);
402
403
                        buttons.add(getBZoomMas(), gbc);
404
                        gbc.gridy = 1;
405
                        buttons.add(getBZoomMenos(), gbc);
406
                        gbc.gridy = 2;
407
                        buttons.add(getBSelectZoomArea(), gbc);
408
                        gbc.gridy = 3;
409
                        buttons.add(getBFullView(), gbc);
410
                        gbc.gridy = 4;
411
                        buttons.add(getBPrevZoom(), gbc);
412
                        gbc.gridy = 5;
413
                        buttons.add(getBMove(), gbc);
414
                        gbc.gridy = 6;
415
                        buttons.add(getBCenterLocator(), gbc);
416
                }
417
                return buttons;
418
        }
419
420
        /**
421
         * Crea el bot?n de zoom m?s
422
         * @return JButton
423
         */
424
        public JButton getBZoomMas() {
425
                if (bZoomMas == null) {
426
                        bZoomMas = new JButton();
427
                        bZoomMas.setToolTipText(Messages.getText("zoom_mas"));
428
                        bZoomMas.setPreferredSize(new java.awt.Dimension(25,25));
429
                        try{
430
                                bZoomMas.setIcon(IconThemeHelper.getImageIcon("increase-icon"));
431
                        }catch(NullPointerException e){
432
                                //Sin icono
433
                        }
434
                        bZoomMas.addActionListener(this);
435
                }
436
                return bZoomMas;
437
        }
438
439
        /**
440
         * Crea el bot?n de centrar el localizador
441
         * @return JButton
442
         */
443
        public JButton getBCenterLocator() {
444
                if (bCenterLocator == null) {
445
                        bCenterLocator = new JButton();
446
                        bCenterLocator.setToolTipText(Messages.getText("center_locator"));
447
                        bCenterLocator.setPreferredSize(new java.awt.Dimension(25,25));
448
                        try{
449
                                bCenterLocator.setIcon(IconThemeHelper.getImageIcon("centerlocator-icon"));
450
                        }catch(NullPointerException e){
451
                                //Sin icono
452
                        }
453
                        bCenterLocator.addActionListener(this);
454
                }
455
                return bCenterLocator;
456
        }
457
458
        /**
459
         * Crea el bot?n de zoom menos
460
         * @return JButton
461
         */
462
        public JButton getBZoomMenos() {
463
                if (bZoomMenos == null) {
464
                        bZoomMenos = new JButton();
465
                        bZoomMenos.setToolTipText(Messages.getText("zoom_menos"));
466
                        bZoomMenos.setPreferredSize(new java.awt.Dimension(25,25));
467
                        try{
468
                                bZoomMenos.setIcon(IconThemeHelper.getImageIcon("decrease-icon"));
469
                        }catch(NullPointerException e){
470
                                //Sin icono
471
                        }
472
                        bZoomMenos.addActionListener(this);
473
                }
474
                return bZoomMenos;
475
        }
476
477
        /**
478
         * Crea el bot?n de selecci?n de zoom por ?rea
479
         * @return JButton
480
         */
481
        public JToggleButton getBSelectZoomArea() {
482
                if (bSelectZoomArea == null) {
483
                        bSelectZoomArea = new JToggleButton();
484
                        bSelectZoomArea.setToolTipText(Messages.getText("select_zoom_area"));
485
                        bSelectZoomArea.setPreferredSize(new java.awt.Dimension(25,25));
486
                        try{
487
                                bSelectZoomArea.setIcon(IconThemeHelper.getImageIcon("selectzoomarea-icon"));
488
                        }catch(NullPointerException e){
489
                                //Sin icono
490
                        }
491
                        bSelectZoomArea.addActionListener(this);
492
                }
493
                return bSelectZoomArea;
494
        }
495
496
        /**
497
         * Crea el bot?n de desplazamiento de imagen
498
         * @return JToggleButton
499
         */
500
        public JToggleButton getBMove() {
501
                if (bMove == null) {
502
                        bMove = new JToggleButton();
503
                        bMove.setToolTipText(Messages.getText("move_image"));
504
                        bMove.setPreferredSize(new java.awt.Dimension(25,25));
505
                        try{
506
                                bMove.setIcon(IconThemeHelper.getImageIcon("hand-icon"));
507
                        }catch(NullPointerException e){
508
                                //Sin icono
509
                        }
510
                        bMove.addActionListener(this);
511
                }
512
                return bMove;
513
        }
514
515
        /**
516
         * Crea el bot?n de zoom m?s
517
         * @return
518
         */
519
        public JButton getBPrevZoom() {
520
                if (bPrevZoom == null) {
521
                        bPrevZoom = new JButton();
522
                        bPrevZoom.setToolTipText(Messages.getText("prev_zoom"));
523
                        bPrevZoom.setPreferredSize(new java.awt.Dimension(25,25));
524
                        try{
525
                                bPrevZoom.setIcon(IconThemeHelper.getImageIcon("prevzoom-icon"));
526
                        }catch(NullPointerException e){
527
                                //Sin icono
528
                        }
529
                        bPrevZoom.addActionListener(this);
530
                }
531
                return bPrevZoom;
532
        }
533
534
        /**
535
         * Crea el bot?n de zoom completo. El zoom completo inicializa al primer zoom
536
         * que recibi? en caso de que no se est? usando un IExtensionRequest, ya que no tendr?a conocimiento
537
         * del tama?o total de capa, sino solo del buffer que tiene en ese momento. En caso de usar un
538
         * IExtensionRequest entonces se har? la petici?n correspondiente al interfaz.
539
         * @return JButton
540
         */
541
        public JButton getBFullView() {
542
                if (bFullView == null) {
543
                        bFullView = new JButton();
544
                        bFullView.setToolTipText(Messages.getText("full_view"));
545
                        bFullView.setPreferredSize(new java.awt.Dimension(25,25));
546
                        try{
547
                                bFullView.setIcon(IconThemeHelper.getImageIcon("fullview-icon"));
548
                        }catch(NullPointerException e){
549
                                //Sin icono
550
                        }
551
                        bFullView.addActionListener(this);
552
                }
553
                return bFullView;
554
        }
555
556
        /**
557
         * Asigna los par?metros de dibujado
558
         * @param img Buffer con un ?rea de datos
559
         * @param ext Rectangle2D del ?rea de datos dada
560
         * @param pixelSize Tama?o de pixel
561
         * @param center Punto del ?rea de datos donde se quiere centrar el dibujado del buffer
562
         */
563
        public void setDrawParams(BufferedImage img, Rectangle2D ext, double pixelSize, Point2D center) {
564
                getZoomRecord().setRequest(ext);
565 1492 nbrodin
                getCanvas().setDrawParams(img, ext, pixelSize, center) ;
566 1475 nbrodin
        }
567
568
        /**
569
         * Asigna un nuevo centro de visualizaci?n. Vuelve a realizar la petici?n
570
         * @param center
571
         */
572
        public void setCenter(Point2D center) {
573 1492 nbrodin
                Rectangle2D ext = getCanvas().getExtent();
574 1475 nbrodin
                double diffX = center.getX() - ext.getCenterX();
575
                double diffY = center.getY() - ext.getCenterY();
576
                ext.setRect(ext.getX() + diffX, ext.getY() + diffY, ext.getWidth(), ext.getHeight());
577
                try {
578 1492 nbrodin
                        getCanvas().setForceRequest(true);
579 1491 nbrodin
                        if(extReq != null)
580
                                extReq.request(ext);
581 1475 nbrodin
                } catch (InvalidRequestException e) {
582
                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
583
                }
584
        }
585
586
        /**
587
         * Registra un objeto IExtensionRequest para que no se aplique un escalado sobre
588
         * el buffer pasado por par?metro. Alternativamente a la aplicaci?n de este escalado
589
         * se ejecutar? el m?todo request del interfaz para que el cliente pueda pasar un
590
         * nuevo buffer con escala 1:1 y con la extensi?n correspondiente al zoom, Es decir, se
591
         * deja en manos del cliente la aplicaci?n del zoom.
592
         * @param er
593
         */
594 1712 nbrodin
        public void setExtensionRequest(IViewRequestManager er) {
595 1475 nbrodin
                this.extReq = er;
596
        }
597
598
        /**
599
         * Obtiene el objeto IExtensionRequest
600
         * @param er
601
         */
602 1712 nbrodin
        public IViewRequestManager getExtensionRequest() {
603 1475 nbrodin
                return extReq;
604
        }
605
606
        /**
607
         * Obtiene el historico de zooms
608
         * @return ZoomRecord
609
         */
610
        public ViewRecord getZoomRecord() {
611
                if(zoomRecord == null) {
612
                        zoomRecord = new ViewRecord();
613
                        //zoomRecord.setRequest(new Integer(FULL_VIEW));
614
                }
615
                return zoomRecord;
616
        }
617
618
        /**
619
         * Eventos de los botones zoom m?s y zoom menos.
620
         */
621
        public void actionPerformed(ActionEvent e) {
622
                //Centrar el localizador
623
                if(e.getSource() == bCenterLocator) {
624 1492 nbrodin
                        List<IGraphicLayer> graphicLayers = getCanvas().getGraphicLayers();
625 1475 nbrodin
                        for (int i = 0; i < graphicLayers.size(); i++) {
626
                                if(graphicLayers.get(i) instanceof ZoomCursorGraphicLayer) {
627 1492 nbrodin
                                        ((ZoomCursorGraphicLayer)graphicLayers.get(i)).setCursorPosition(getCanvas().getWidth() / 2, canvas.getHeight() / 2);
628 1475 nbrodin
                                        ((ZoomCursorGraphicLayer)graphicLayers.get(i)).resetCursorSize();
629
                                }
630
                        }
631
                }
632
633
                if(extReq == null) {
634
                        if(e.getSource() == bZoomMas)
635 1492 nbrodin
                                getCanvas().setZoom(canvas.getZoom() * stepScale);
636 1475 nbrodin
637
                        if(e.getSource() == bZoomMenos)
638 1492 nbrodin
                                getCanvas().setZoom(canvas.getZoom() / stepScale);
639 1475 nbrodin
640
                        if(e.getSource() == bFullView)
641 1492 nbrodin
                                getCanvas().setZoom(1);
642 1475 nbrodin
643
                } else {
644
                        double width = 0, height = 0;
645 1492 nbrodin
                        getCanvas().setZoom(1);
646 1475 nbrodin
647
                        //Zoom Todo
648
                        if(e.getSource() == bFullView) {
649
                                try {
650
                                        extReq.fullExtent();
651
                                } catch (InvalidRequestException e1) {
652
                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
653
                                }
654
                                return;
655
                        }
656
657
                        //Zoom Anterior
658
                        if(e.getSource() == bPrevZoom) {
659
                                Object request = getZoomRecord().getRequest();
660
                                if(request != null) {
661
                                        if(request instanceof Rectangle2D) {
662
                                                try {
663
                                                        extReq.request((Rectangle2D)request);
664
                                                } catch (InvalidRequestException e1) {
665
                                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
666
                                                }
667
                                        }
668
                                        if(request instanceof Integer && ((Integer)request).intValue() == FULL_VIEW) {
669
                                                try {
670
                                                        extReq.fullExtent();
671
                                                } catch (InvalidRequestException e1) {
672
                                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
673
                                                }
674
                                        }
675
                                        getZoomRecord().getRequest(); //El que hemos metido al hacer zoom previo no sirve por lo que hay que sacarlo
676
                                }
677
                                return;
678
                        }
679
680 1492 nbrodin
                        width = getCanvas().getCanvasExtent().getWidth();
681
                        height = getCanvas().getCanvasExtent().getHeight();
682 1475 nbrodin
683
                        //Desplazamiento
684
                        if(e.getSource() == bMove) {
685 1728 nbrodin
                                if(getBMove().isSelected()) {
686
                                        for (int i = 0; i < toolList.size(); i++)
687
                                                ((BaseViewTool)toolList.get(i)).setActive(false);
688
                                        getBSelectZoomArea().setSelected(false);
689
                                        enableTool(GeoreferencingSwingLibrary.PAN_TOOL);
690
                                } else
691
                                        disableTool(GeoreferencingSwingLibrary.PAN_TOOL);
692 1475 nbrodin
                        }
693
694
                        //Zoom por selecci?n de ?rea
695
                        if(e.getSource() == bSelectZoomArea) {
696 1728 nbrodin
                                if(getBSelectZoomArea().isSelected()) {
697
                                        for (int i = 0; i < toolList.size(); i++)
698
                                                ((BaseViewTool)toolList.get(i)).setActive(false);
699
                                        getBMove().setSelected(false);
700
                                        enableTool(GeoreferencingSwingLibrary.ZOOM_RECTANGLE_TOOL);
701
                                } else
702
                                        disableTool(GeoreferencingSwingLibrary.ZOOM_RECTANGLE_TOOL);
703 1475 nbrodin
                        }
704
705
                        //Zoom m?s
706
                        if(e.getSource() == bZoomMas) {
707 1492 nbrodin
                                width = getCanvas().getCanvasExtent().getWidth() * SCALE;
708
                                height = getCanvas().getCanvasExtent().getHeight() * SCALE;
709 1475 nbrodin
                        }
710
711
                        //Zoom menos
712
                        if(e.getSource() == bZoomMenos) {
713 1492 nbrodin
                                width = getCanvas().getCanvasExtent().getWidth() / SCALE;
714
                                height = getCanvas().getCanvasExtent().getHeight() / SCALE;
715 1475 nbrodin
                        }
716
                        //C?digo com?n a bZoomMas y bZoomMenos
717 1492 nbrodin
                        double x = getCanvas().getCenter().getX() - (width / 2);
718
                        double y = getCanvas().getCenter().getY() - (height / 2);
719 1475 nbrodin
                        Rectangle2D request = new Rectangle2D.Double(x, y, width, height);
720
                        try {
721
                                extReq.request(request);
722
                        } catch (InvalidRequestException e1) {
723
                                GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
724
                        }
725
                }
726
        }
727
728
        /**
729
         * Recarga la vista con los par?metros de tama?o y
730
         * extensi?n actuales
731
         */
732
        public void reload() {
733 1492 nbrodin
                double width = getCanvas().getCanvasExtent().getWidth();
734
                double height = getCanvas().getCanvasExtent().getHeight();
735
                double x = getCanvas().getCenter().getX() - (width / 2);
736
                double y = getCanvas().getCenter().getY() - (height / 2);
737 1475 nbrodin
                Rectangle2D request = new Rectangle2D.Double(x, y, width, height);
738
                try {
739 1492 nbrodin
                        getCanvas().setForceRequest(true);
740 1491 nbrodin
                        if(extReq != null)
741
                                extReq.request(request);
742 1475 nbrodin
                } catch (InvalidRequestException e1) {
743
                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
744
                }
745
        }
746
747
        /**
748
         * Obtiene el ancho del canvas
749
         * @return
750
         */
751
        public int getCanvasWith() {
752 1492 nbrodin
                return getCanvas().getVisibleRect().width;
753 1475 nbrodin
        }
754
755
        /**
756
         * Obtiene el alto del canvas
757
         * @return
758
         */
759
        public int getCanvasHeight() {
760 1492 nbrodin
                return getCanvas().getVisibleRect().height;
761 1475 nbrodin
        }
762
763
        /**
764
         * Evento de finalizaci?n de la tool que maneja el viewControl y de la capa con el
765
         * cursor gr?fico que controla el ?rea de la miniimagen asociada
766
         */
767
        public void endAction(ToolEvent ev) {
768
                if(ev.getSource() instanceof ZoomRectangleTool || ev.getSource() instanceof PanTool) {
769 1734 nbrodin
                        if(getCanvas().getSelectedTool().getResult() instanceof Rectangle2D) {
770
                                Rectangle2D extent = (Rectangle2D)getCanvas().getSelectedTool().getResult();
771
                                try {
772
                                        if(extReq != null)
773
                                                extReq.request(extent);
774
                                } catch (InvalidRequestException e1) {
775
                                        GeoreferencingSwingImplLibrary.messageBoxError("error_setview_preview", this);
776
                                }
777 1475 nbrodin
                        }
778
                }
779
        }
780
781
        /*
782
         * (non-Javadoc)
783
         * @see org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolListener#activeTool(org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolEvent)
784
         */
785
        public void onTool(ToolEvent ev) {}
786
787
        /*
788
         * (non-Javadoc)
789
         * @see org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolListener#offTool(org.gvsig.rastertools.georeferencing.ui.zoom.tools.ToolEvent)
790
         */
791
        public void offTool(ToolEvent ev) {}
792
793
}