Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / org.gvsig.app.document.layout.app / org.gvsig.app.document.layout.app.mainplugin / src / main / java / org / gvsig / app / project / documents / layout / fframes / FFrameOverView.java @ 36648

History | View | Annotate | Download (12.6 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.fframes;
23

    
24
import java.awt.Color;
25
import java.awt.Dimension;
26
import java.awt.Graphics2D;
27
import java.awt.geom.AffineTransform;
28
import java.awt.geom.Line2D;
29
import java.awt.geom.Rectangle2D;
30
import java.awt.image.BufferedImage;
31

    
32
import org.gvsig.andami.PluginServices;
33
import org.gvsig.andami.messages.NotificationManager;
34
import org.gvsig.app.project.documents.view.ViewDocument;
35
import org.gvsig.fmap.dal.exception.ReadException;
36
import org.gvsig.fmap.geom.primitive.Envelope;
37
import org.gvsig.fmap.mapcontext.MapContext;
38
import org.gvsig.fmap.mapcontext.ViewPort;
39
import org.gvsig.tools.ToolsLocator;
40
import org.gvsig.tools.dynobject.DynStruct;
41
import org.gvsig.tools.persistence.PersistenceManager;
42
import org.gvsig.tools.persistence.PersistentState;
43
import org.gvsig.tools.persistence.exception.PersistenceException;
44

    
45
/**
46
 * FFrame para introducir el localizador de una vista en el Layout.
47
 * 
48
 * @author Vicente Caballero Navarro
49
 */
50
public class FFrameOverView extends FFrameView implements IFFrameViewDependence {
51

    
52
    public static final String PERSISTENCE_DEFINITION_NAME = "FFrameOverView";
53

    
54
    private static final String FFRAMEVIEWDEPENDENCE_FIELD =
55
        "fframeViewDependence";
56

    
57
    private MapContext assoc_map;
58
    private Envelope extent;
59
    private FFrameView fframeViewDependence;
60

    
61
    /**
62
     * DOCUMENT ME!
63
     * 
64
     * @param g
65
     *            DOCUMENT ME!
66
     * @param at
67
     *            DOCUMENT ME!
68
     * @param rv
69
     *            DOCUMENT ME!
70
     * @param imgBase
71
     *            DOCUMENT ME!
72
     */
73
    public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv,
74
        BufferedImage imgBase) {
75
        try {
76
            if (getMapContext() != null
77
                && getMapContext().getFullEnvelope() != null) {
78
                getMapContext().getViewPort().setEnvelope(
79
                    getMapContext().getFullEnvelope());
80
            }
81
        } catch (ReadException e) {
82
            e.printStackTrace();
83
        }
84
        refresh();
85
        super.draw(g, at, rv, imgBase);
86
        Rectangle2D r = getBoundingBox(at);
87

    
88
        if ((assoc_map != null)
89
            && (assoc_map.getViewPort().getEnvelope() != null)
90
            && (getMapContext().getViewPort().getEnvelope() != null)) {
91

    
92
            ViewPort vp = getMapContext().getViewPort();
93
            ViewPort vpOrig = assoc_map.getViewPort();
94

    
95
            if (extent == null) {
96
                extent = vpOrig.getAdjustedEnvelope();
97
            }
98
            vp.refreshExtent();
99
            Rectangle2D aux =
100
                new Rectangle2D.Double(extent.getMinimum(0),
101
                    extent.getMinimum(1), extent.getLength(0),
102
                    extent.getLength(1));
103
            Rectangle2D extentPixels = vp.fromMapRectangle(aux);
104

    
105
            extentPixels.setFrame(extentPixels.getX(), extentPixels.getY(),
106
                extentPixels.getWidth(), extentPixels.getHeight());
107
            Rectangle2D clip = g.getClipBounds();
108

    
109
            g.setClip((int) r.getX(), (int) r.getY(), (int) r.getWidth(),
110
                (int) r.getHeight());
111
            g.setColor(Color.red);
112
            g.draw(extentPixels);
113
            // System.err.println("extentPixels =
114
            // "+extentPixels.getX()+","+extentPixels.getY()+",
115
            // "+extentPixels.getWidth()+","+extentPixels.getHeight());
116
            g.setColor(new Color(100, 100, 100, 100));
117
            g.fill(extentPixels);
118
            // dibujamos las l?neas vertical y horizontal
119
            double pRightUp = (int) (r.getWidth() + r.getX());
120

    
121
            Line2D.Double linVert =
122
                new Line2D.Double(extentPixels.getCenterX(), r.getY(),
123
                    extentPixels.getCenterX(), r.getMaxY());
124
            Line2D.Double linHoriz =
125
                new Line2D.Double(r.getX(), extentPixels.getCenterY(),
126
                    pRightUp, extentPixels.getCenterY());
127

    
128
            g.setColor(Color.darkGray);
129
            g.draw(linVert);
130
            g.draw(linHoriz);
131

    
132
            g.setClip((int) clip.getX(), (int) clip.getY(),
133
                (int) clip.getWidth(), (int) clip.getHeight());
134
            extent = null;
135
            // System.err.println("Dibujando FFrameOverView ...");
136
        }
137

    
138
    }
139

    
140
    /**
141
     * DOCUMENT ME!
142
     * 
143
     * @param g
144
     *            DOCUMENT ME!
145
     * @param at
146
     *            DOCUMENT ME!
147
     * @param rv
148
     *            DOCUMENT ME!
149
     * @param imgBase
150
     *            DOCUMENT ME!
151
     * 
152
     * @throws ReadDriverException
153
     */
154
    public void print(Graphics2D g, AffineTransform at) throws ReadException {
155
        draw(g, at, null, null);
156
    }
157

    
158
    /**
159
     * Inserta el ProjectView de donde obtener las propiedades de la vista a
160
     * mostrar.
161
     * 
162
     * @param v
163
     *            Modelo de la vista.
164
     */
165
    public void setView(ViewDocument v) {
166
        view = v;
167

    
168
        ViewPort vp = null;
169

    
170
        if (getMapContext() != null) {
171
            vp = getMapContext().getViewPort();
172
        } else {
173
            try {
174
                vp = (ViewPort) v.getMapContext().getViewPort().clone();
175
            } catch (CloneNotSupportedException e) {
176
                NotificationManager.addError("Excepci?n :", e);
177
            }
178
        }
179

    
180
        vp.setImageSize(new Dimension((int) getBoundingBox(null).width,
181
            (int) getBoundingBox(null).height));
182
        if (fframeViewDependence == null)
183
            return;
184
        assoc_map = fframeViewDependence.getMapContext();
185

    
186
        if (fframeViewDependence.getLinked()) {
187
            try {
188
                m_fmap =
189
                    fframeViewDependence
190
                        .getView()
191
                        .getMapOverViewContext()
192
                        .createNewFMap(
193
                            (ViewPort) fframeViewDependence.getView()
194
                                .getMapOverViewContext().getViewPort().clone());
195
            } catch (CloneNotSupportedException e) {
196
                NotificationManager.addError("Excepci?n :", e);
197
            }
198
            m_fmap.getViewPort().setImageSize(
199
                new Dimension((int) getBoundingBox(null).width,
200
                    (int) getBoundingBox(null).height));
201
            fframeViewDependence.getMapContext().getViewPort()
202
                .addViewPortListener(this);
203
            v.getMapContext().getViewPort().addViewPortListener(this);
204
            fframeViewDependence.getView().getMapOverViewContext()
205
                .addLayerListener(this);
206
        } else
207
            if (!fframeViewDependence.getLinked()) {
208
                m_fmap =
209
                    fframeViewDependence.getView().getMapOverViewContext()
210
                        .cloneFMap();
211
                try {
212
                    m_fmap.setViewPort((ViewPort) fframeViewDependence
213
                        .getView().getMapOverViewContext().getViewPort()
214
                        .clone());
215
                } catch (CloneNotSupportedException e) {
216
                    NotificationManager.addError("Excepci?n :", e);
217
                }
218
                m_fmap.getViewPort().setImageSize(
219
                    new Dimension((int) getBoundingBox(null).width,
220
                        (int) getBoundingBox(null).height));
221
                fframeViewDependence.getMapContext().getViewPort()
222
                    .addViewPortListener(this);
223
                v.getMapContext().getViewPort().addViewPortListener(this);
224
                fframeViewDependence.getView().getMapOverViewContext()
225
                    .addLayerListener(this);
226
            }
227
    }
228

    
229
    /**
230
     * @see org.gvsig.app.project.documents.layout.fframes.IFFrame#getNameFFrame()
231
     */
232
    public String getNameFFrame() {
233
        return PluginServices.getText(this, "Localizador") + num;
234
    }
235

    
236
    public String getName() {
237
        return PERSISTENCE_DEFINITION_NAME;
238
    }
239

    
240
    public IFFrame clone() throws CloneNotSupportedException {
241
        FFrameOverView frame = (FFrameOverView) super.clone();
242
        frame.setSelected(this.getSelected() != IFFrame.NOSELECT);
243
        cloneActions(frame);
244
        return frame;
245
    }
246

    
247
    public void setFFrameDependence(IFFrame f) {
248
        fframeViewDependence = (FFrameView) f;
249
    }
250

    
251
    public IFFrame[] getFFrameDependence() {
252
        return new IFFrame[] { fframeViewDependence };
253
    }
254

    
255
    public void refreshDependence(IFFrame fant, IFFrame fnew) {
256
        if ((fframeViewDependence != null) && fframeViewDependence.equals(fant)) {
257
            fframeViewDependence = (FFrameView) fnew;
258
            assoc_map = fframeViewDependence.getMapContext();
259

    
260
            if (fframeViewDependence.getLinked()) {
261
                try {
262
                    m_fmap =
263
                        fframeViewDependence
264
                            .getView()
265
                            .getMapOverViewContext()
266
                            .createNewFMap(
267
                                (ViewPort) fframeViewDependence.getView()
268
                                    .getMapOverViewContext().getViewPort()
269
                                    .clone());
270
                } catch (CloneNotSupportedException e) {
271
                    NotificationManager.addError("Excepci?n :", e);
272
                }
273
                m_fmap.getViewPort().setImageSize(
274
                    new Dimension((int) getBoundingBox(null).width,
275
                        (int) getBoundingBox(null).height));
276
                fframeViewDependence.getMapContext().getViewPort()
277
                    .addViewPortListener(this);
278
                getView().getMapContext().getViewPort()
279
                    .addViewPortListener(this);
280
                fframeViewDependence.getView().getMapOverViewContext()
281
                    .addLayerListener(this);
282
            } else
283
                if (!fframeViewDependence.getLinked()) {
284
                    m_fmap =
285
                        fframeViewDependence.getView().getMapOverViewContext()
286
                            .cloneFMap(); // (v.getMapContext().getViewPort().cloneViewPort());
287
                    try {
288
                        m_fmap.setViewPort((ViewPort) fframeViewDependence
289
                            .getView().getMapOverViewContext().getViewPort()
290
                            .clone());
291
                    } catch (CloneNotSupportedException e) {
292
                        NotificationManager.addError("Excepci?n :", e);
293
                    }
294
                    m_fmap.getViewPort().setImageSize(
295
                        new Dimension((int) getBoundingBox(null).width,
296
                            (int) getBoundingBox(null).height));
297
                    fframeViewDependence.getMapContext().getViewPort()
298
                        .addViewPortListener(this);
299
                    getView().getMapContext().getViewPort()
300
                        .addViewPortListener(this);
301
                    fframeViewDependence.getView().getMapOverViewContext()
302
                        .addLayerListener(this);
303
                }
304
        }
305

    
306
    }
307

    
308
    public static void registerPersistent() {
309
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
310
        if (manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null) {
311
            DynStruct definition =
312
                manager.addDefinition(FFrameOverView.class,
313
                    PERSISTENCE_DEFINITION_NAME,
314
                    "FFrameOverView persistence definition", null, null);
315

    
316
            definition.extend(manager
317
                .getDefinition(FFrameView.PERSISTENCE_DEFINITION_NAME));
318

    
319
            definition.addDynFieldObject(FFRAMEVIEWDEPENDENCE_FIELD)
320
                .setClassOfValue(FFrameView.class);
321
        }
322
    }
323

    
324
    @Override
325
    public void loadFromState(PersistentState state)
326
        throws PersistenceException {
327
        super.loadFromState(state);
328
        fframeViewDependence =
329
            (FFrameView) state.get(FFRAMEVIEWDEPENDENCE_FIELD);
330
    }
331

    
332
    @Override
333
    public void saveToState(PersistentState state) throws PersistenceException {
334
        super.saveToState(state);
335
        state.set(FFRAMEVIEWDEPENDENCE_FIELD, fframeViewDependence);
336
    }
337
}