Statistics
| Revision:

svn-document-layout / trunk / org.gvsig.app.document.layout2.app / org.gvsig.app.document.layout2.app.mainplugin / src / main / java / org / gvsig / app / project / documents / layout / tools / behavior / LayoutRectangleByTwoPointsBehavior.java @ 1738

History | View | Annotate | Download (7.41 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.app.project.documents.layout.tools.behavior;
23

    
24
import java.awt.Color;
25
import java.awt.Graphics;
26
import java.awt.Graphics2D;
27
import java.awt.Point;
28
import java.awt.Rectangle;
29
import java.awt.event.MouseEvent;
30
import java.awt.geom.AffineTransform;
31
import java.awt.geom.Point2D;
32
import java.awt.geom.Rectangle2D;
33
import java.awt.image.BufferedImage;
34
import org.gvsig.app.project.documents.layout.FLayoutUtilities;
35
import org.gvsig.app.project.documents.layout.fframes.IFFrame;
36
import org.gvsig.app.project.documents.layout.tools.listener.LayoutRectangleListener;
37
import org.gvsig.app.project.documents.layout.tools.listener.LayoutToolListener;
38
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
39
import org.gvsig.fmap.geom.GeometryLocator;
40
import org.gvsig.fmap.geom.GeometryManager;
41
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
42
import org.gvsig.fmap.geom.primitive.Envelope;
43
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
44
import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
45
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
47

    
48
/**
49
 * Behaviour que espera un listener de tipo LayoutRectangleListener.
50
 * 
51
 * @author Vicente Caballero Navarro
52
 */
53
public class LayoutRectangleByTwoPointsBehavior extends LayoutBehavior {
54

    
55
    private static final GeometryManager geomManager = GeometryLocator
56
        .getGeometryManager();
57
    private static final Logger logger = LoggerFactory
58
        .getLogger(LayoutRectangleByTwoPointsBehavior.class);
59
    private LayoutRectangleListener listener;
60
    
61
    boolean findingSecondPoint = false;
62
    private Point firstPoint;
63

    
64

    
65
    /**
66
     * Crea un nuevo RectangleBehavior.
67
     * 
68
     * @param zili
69
     *            listener.
70
     */
71
    public LayoutRectangleByTwoPointsBehavior(LayoutRectangleListener lrl) {
72
        listener = lrl;
73
    }
74

    
75
    /**
76
     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
77
     */
78
    @Override
79
    public void paintComponent(Graphics g) {
80
        BufferedImage img = getLayoutControl().getImage();
81
        BufferedImage imgRuler = getLayoutControl().getImgRuler();
82
        g.drawImage(img, 0, 0, getLayoutControl().getComponent());
83
        g.drawImage(imgRuler, 0, 0, getLayoutControl().getComponent());
84
        g.setColor(Color.black);
85
        g.setXORMode(Color.white);
86

    
87
        // Borramos el anterior
88
        Rectangle r = new Rectangle();
89

    
90
        // Dibujamos el actual
91
        if (findingSecondPoint && (getLayoutControl().getFirstPoint() != null)
92
            && (getLayoutControl().getLastPoint() != null)) {
93
            r.setFrameFromDiagonal(getLayoutControl().getFirstPoint(),
94
                getLayoutControl().getLastPoint());
95
            g.drawRect(r.x, r.y, r.width, r.height);
96
        }
97
        IFFrame[] frames =
98
            getLayoutControl().getLayoutContext().getSelectedFFrames();
99
        for (IFFrame frame : frames) {
100
            g.setColor(Color.black);
101
            frame.drawHandlers((Graphics2D) g);
102
        }
103
        g.setPaintMode();
104
    }
105

    
106
    /**
107
     * Reimplementaci?n del m?todo mousePressed de Behavior.
108
     * 
109
     * @param e
110
     *            MouseEvent
111
     * @throws BehaviorException
112
     */
113
    @Override
114
    public void mousePressed(MouseEvent e) throws BehaviorException {
115
    }
116

    
117
    /**
118
     * Reimplementaci?n del m?todo mouseReleased de Behavior.
119
     * 
120
     * @param e
121
     *            MouseEvent
122
     * 
123
     * @throws BehaviorException
124
     *             Excepci?n lanzada cuando el Behavior.
125
     */
126
    @Override
127
    public void mouseReleased(MouseEvent e) throws BehaviorException {
128
    }
129
    
130
    @Override
131
    public void mouseClicked(MouseEvent e) throws BehaviorException {
132

    
133
        if (e.getButton() != MouseEvent.BUTTON1) {
134
            return;
135
        }
136
        
137
        if(!findingSecondPoint) {
138
            getLayoutControl().setPointAnt();
139
            getLayoutControl().setFirstPoint();
140
            this.firstPoint = getLayoutControl().getFirstPoint();
141

    
142
            if (listener.cancelDrawing()) {
143
                // getLayout().cancelDrawing();
144
            }
145
            getLayoutControl().repaint();
146
            this.findingSecondPoint = true;
147
            return;
148
        }
149
        
150
        getLayoutControl().setLastPoint();
151
        getLayoutControl().setPointAnt();
152
        getLayoutControl().setPosition(firstPoint);
153
        getLayoutControl().setFirstPoint();
154

    
155
        Point2D p1;
156
        Point2D p2;
157
        Point pScreen = getLayoutControl().getLastPoint();
158

    
159
        AffineTransform at = getLayoutControl().getAT();
160

    
161
        p1 =
162
            FLayoutUtilities.toSheetPoint(getLayoutControl().getFirstPoint(),
163
                at);
164
        p2 = FLayoutUtilities.toSheetPoint(pScreen, at);
165

    
166
        if (e.getButton() == MouseEvent.BUTTON1) {
167
            // Fijamos el nuevo extent
168
            // Rectangle2D.Double r = new Rectangle2D.Double();
169
            // r.setFrameFromDiagonal(p1, p2);
170
            Envelope r;
171
            try {
172
                r =
173
                    geomManager.createEnvelope(p1.getX(), p1.getY(), p2.getX(),
174
                        p2.getY(), SUBTYPES.GEOM2D);
175
                Rectangle2D rectPixel = new Rectangle();
176
                rectPixel.setFrameFromDiagonal(getLayoutControl()
177
                    .getFirstPoint(), pScreen);
178

    
179
                EnvelopeEvent event = new EnvelopeEvent(r, e, rectPixel);
180
                listener.rectangle(event);
181
            } catch (CreateEnvelopeException e1) {
182
                logger.error("Error creating the envelope", e);
183
            }
184
        }
185
        findingSecondPoint = false;
186
    }
187
    
188
    
189

    
190
    /**
191
     * Reimplementaci?n del m?todo mouseDragged de Behavior.
192
     * 
193
     * @param e
194
     *            MouseEvent
195
     * @throws BehaviorException
196
     */
197
    @Override
198
    public void mouseDragged(MouseEvent e) throws BehaviorException {
199
    }
200

    
201
    @Override
202
    public void mouseMoved(MouseEvent e) throws BehaviorException {
203
        if (e.getButton() != MouseEvent.NOBUTTON) {
204
            return;
205
        }
206
        if (findingSecondPoint) {
207
            getLayoutControl().setLastPoint();
208
            getLayoutControl().repaint();
209
        }
210
    }
211

    
212
    /**
213
     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#setListener(com.iver.cit.gvsig.fmap.tools.ToolListener)
214
     */
215
    public void setListener(LayoutToolListener listener) {
216
        this.listener = (LayoutRectangleListener) listener;
217
    }
218

    
219
    /**
220
     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#getListener()
221
     */
222
    @Override
223
    public LayoutToolListener getListener() {
224
        return listener;
225
    }
226

    
227
    @Override
228
    public boolean isAdjustable() {
229
        return true;
230
    }
231
}