Statistics
| Revision:

svn-document-layout / branches / usability_v2 / org.gvsig.app.document.layout.app / org.gvsig.app.document.layout.app.mainplugin / src / main / java / org / gvsig / app / project / documents / layout / tools / behavior / LayoutRectangleBehavior.java @ 140

History | View | Annotate | Download (6.53 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

    
35
import org.slf4j.Logger;
36
import org.slf4j.LoggerFactory;
37

    
38
import org.gvsig.app.project.documents.layout.FLayoutUtilities;
39
import org.gvsig.app.project.documents.layout.fframes.IFFrame;
40
import org.gvsig.app.project.documents.layout.tools.listener.LayoutRectangleListener;
41
import org.gvsig.app.project.documents.layout.tools.listener.LayoutToolListener;
42
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
43
import org.gvsig.fmap.geom.GeometryLocator;
44
import org.gvsig.fmap.geom.GeometryManager;
45
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
46
import org.gvsig.fmap.geom.primitive.Envelope;
47
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
48
import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
49

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

    
57
    private static final GeometryManager geomManager = GeometryLocator
58
        .getGeometryManager();
59
    private static final Logger logger = LoggerFactory
60
        .getLogger(LayoutRectangleBehavior.class);
61
    private LayoutRectangleListener listener;
62
    private boolean dragged = false;
63

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

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

    
85
        // Borramos el anterior
86
        Rectangle r = new Rectangle();
87

    
88
        // Dibujamos el actual
89
        if (dragged && (getLayoutControl().getFirstPoint() != null)
90
            && (getLayoutControl().getLastPoint() != null)) {
91
            r.setFrameFromDiagonal(getLayoutControl().getFirstPoint(),
92
                getLayoutControl().getLastPoint());
93
            g.drawRect(r.x, r.y, r.width, r.height);
94
        }
95
        IFFrame[] frames =
96
            getLayoutControl().getLayoutContext().getSelectedFFrames();
97
        for (int i = 0; i < frames.length; i++) {
98
            g.setColor(Color.black);
99
            frames[i].drawHandlers((Graphics2D) g);
100
        }
101
        g.setPaintMode();
102
    }
103

    
104
    /**
105
     * Reimplementaci?n del m?todo mousePressed de Behavior.
106
     * 
107
     * @param e
108
     *            MouseEvent
109
     * @throws BehaviorException
110
     */
111
    public void mousePressed(MouseEvent e) throws BehaviorException {
112
        super.mousePressed(e);
113
        if (listener.cancelDrawing()) {
114
            // getLayout().cancelDrawing();
115
        }
116
        getLayoutControl().repaint();
117
    }
118

    
119
    /**
120
     * Reimplementaci?n del m?todo mouseReleased de Behavior.
121
     * 
122
     * @param e
123
     *            MouseEvent
124
     * 
125
     * @throws BehaviorException
126
     *             Excepci?n lanzada cuando el Behavior.
127
     */
128
    public void mouseReleased(MouseEvent e) throws BehaviorException {
129
        super.mouseReleased(e);
130
        dragged = false;
131
        if (getLayoutControl().getFirstPoint() == null)
132
            return;
133
        Point2D p1;
134
        Point2D p2;
135
        Point pScreen = getLayoutControl().getLastPoint();
136

    
137
        AffineTransform at = getLayoutControl().getAT();
138

    
139
        p1 =
140
            FLayoutUtilities.toSheetPoint(getLayoutControl().getFirstPoint(),
141
                at);
142
        p2 = FLayoutUtilities.toSheetPoint(pScreen, at);
143

    
144
        if (e.getButton() == MouseEvent.BUTTON1) {
145
            // Fijamos el nuevo extent
146
            // Rectangle2D.Double r = new Rectangle2D.Double();
147
            // r.setFrameFromDiagonal(p1, p2);
148
            Envelope r;
149
            try {
150
                r =
151
                    geomManager.createEnvelope(p1.getX(), p1.getY(), p2.getX(),
152
                        p2.getY(), SUBTYPES.GEOM2D);
153
                Rectangle2D rectPixel = new Rectangle();
154
                rectPixel.setFrameFromDiagonal(getLayoutControl()
155
                    .getFirstPoint(), pScreen);
156

    
157
                EnvelopeEvent event = new EnvelopeEvent(r, e, rectPixel);
158
                listener.rectangle(event);
159
            } catch (CreateEnvelopeException e1) {
160
                logger.error("Error creating the envelope", e);
161
            }
162
        }
163

    
164
    }
165

    
166
    /**
167
     * Reimplementaci?n del m?todo mouseDragged de Behavior.
168
     * 
169
     * @param e
170
     *            MouseEvent
171
     * @throws BehaviorException
172
     */
173
    public void mouseDragged(MouseEvent e) throws BehaviorException {
174
        super.mouseDragged(e);
175
        dragged = true;
176
        getLayoutControl().repaint();
177
    }
178

    
179
    /**
180
     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#setListener(com.iver.cit.gvsig.fmap.tools.ToolListener)
181
     */
182
    public void setListener(LayoutToolListener listener) {
183
        this.listener = (LayoutRectangleListener) listener;
184
    }
185

    
186
    /**
187
     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#getListener()
188
     */
189
    public LayoutToolListener getListener() {
190
        return listener;
191
    }
192

    
193
    public boolean isAdjustable() {
194
        return true;
195
    }
196
}