Statistics
| Revision:

svn-gvsig-desktop / branches / v10 / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / view / toolListeners / MapOverviewChangeZoomListener.java @ 20100

History | View | Annotate | Download (4.63 KB)

1
/**
2
 * 
3
 */
4
package com.iver.cit.gvsig.project.documents.view.toolListeners;
5

    
6
import java.awt.Cursor;
7
import java.awt.Image;
8
import java.awt.Point;
9
import java.awt.Toolkit;
10
import java.awt.event.InputEvent;
11
import java.awt.event.MouseEvent;
12
import java.awt.geom.Rectangle2D;
13

    
14
import javax.swing.ImageIcon;
15

    
16
import com.iver.cit.gvsig.fmap.MapControl;
17
import com.iver.cit.gvsig.fmap.ViewPort;
18
import com.iver.cit.gvsig.fmap.tools.BehaviorException;
19
import com.iver.cit.gvsig.fmap.tools.Events.MoveEvent;
20
import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
21
import com.iver.cit.gvsig.fmap.tools.Listeners.PanListener;
22
import com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener;
23
import com.iver.cit.gvsig.project.documents.view.MapOverview;
24

    
25
/**
26
 * <p>Listener for changes of the zoom caused by selecting a rectangular area on the associated
27
 *  {@link MapOverview MapOverview} object with the first button of the mouse.</p>
28
 *
29
 * <p>If the kind of action was a movement on the associated object,
30
 *  updates the <i>extent</i> of its rectangular area.</p>
31
 * 
32
 * <p>If the kind of action is the selection of a rectangular area, and is bigger than 3x3 pixels,
33
 *  applies a <i>zoom in</i> operation centering its <code>ViewPort</code> according the equivalent <i>extent</i>
34
 *  in map coordinates.</p>
35
 * 
36
 * @see ViewPort
37
 * 
38
 * @author jmvivo
39
 */
40
public class MapOverviewChangeZoomListener implements RectangleListener, PanListener {
41
        /**
42
         * The image to display when the cursor is active.
43
         */
44
        private final Image izoomin = new ImageIcon(MapControl.class.getResource(
45
        "images/ZoomInCursor.gif")).getImage();
46

    
47
        /**
48
         * The cursor used to work with this tool listener.
49
         * 
50
         * @see #getCursor()
51
         */
52
        private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(izoomin,new Point(16, 16), "");
53

    
54
        /**
55
         * Reference to the <code>MapControl</code> object that uses.
56
         */
57
        protected MapControl mapControl;
58

    
59
        /**
60
         * <p>Creates a new listener for changes of zoom at the associated {@link MapOverview MapOverview} object.</p>
61
         *
62
         * @param mapControl the <code>MapControl</code> object which represents the <code>MapOverview</code>  
63
         */
64
        public MapOverviewChangeZoomListener(MapControl mapControl) {
65
                this.mapControl=mapControl;
66
        }
67

    
68
        /*
69
         * (non-Javadoc)
70
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
71
         */
72
        public void rectangle(RectangleEvent event) throws BehaviorException {
73
                
74
                if (!checkModifiers(event.getEvent())){
75
                        return;
76
                }
77
                MapOverview mov=(MapOverview) this.mapControl;
78
                ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
79
                ViewPort vp = mov.getViewPort();
80
                
81
                if (vp.getExtent() != null && vpView.getExtent() != null) {
82
                        
83
                        // Recuperamos las coordenadas del evento en px
84
                        Rectangle2D pxRectangle = event.getPixelCoordRect();
85
                        // Recuperamos las coordenadas del evento en coordenadas de la vista de localizador
86
                        Rectangle2D realRectangle = event.getWorldCoordRect();                        
87
                        
88
                        if ((pxRectangle.getWidth() < 3) && (pxRectangle.getHeight() < 3))
89
                        {
90
                                // rectangulo < 3 px no hacemos nada
91
                                return;
92
        
93
                        } else {
94
                                // Cambiamos la extension de la vista asociada al localizador
95
                                vpView.setExtent(realRectangle);                                
96
                        }
97
                        
98
                }
99

    
100

    
101
        }
102

    
103
        /*
104
         * (non-Javadoc)
105
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
106
         */
107
        public Cursor getCursor() {
108
                return this.cur;
109
        }
110

    
111
        /* (non-Javadoc)
112
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
113
         */
114
        public boolean cancelDrawing() {                
115
                return true; //???
116
        }
117

    
118
        /*
119
         * (non-Javadoc)
120
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.PanListener#move(com.iver.cit.gvsig.fmap.tools.Events.MoveEvent)
121
         */
122
        public void move(MoveEvent event) throws BehaviorException {
123
                
124
                
125
                if (!checkModifiers(event.getEvent())){
126
                        return;
127
                }
128
                System.out.println("mapOvervierChangeZoom");
129
                MapOverview mov=(MapOverview) this.mapControl;
130
                ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
131
                ViewPort vp = mov.getViewPort();        
132
                
133
                if (vp.getExtent() != null && vpView.getExtent() != null) {
134

    
135
                        // Creamos un recuadro con las coordenadas del raton
136
                        // traducidas a la del mapa
137
                        Rectangle2D realRectangle = new Rectangle2D.Double();                        
138
                        realRectangle.setFrameFromDiagonal(vp.toMapPoint(event.getFrom()),vp.toMapPoint(event.getTo()));                        
139
                        
140
                        // Establecemos la forma
141
                        mov.refreshOverView(realRectangle);
142
                }
143
                
144
                
145
                
146
        }
147

    
148
        /** 
149
         * Determines if has pressed the button 1 of the mouse.
150
         */
151
        private boolean checkModifiers(MouseEvent event) {        
152
                int modifiers = event.getModifiers();
153
                int keyPressedMask = InputEvent.BUTTON1_MASK;
154
                return ((modifiers & keyPressedMask) == keyPressedMask);
155
        }
156
        
157
}