Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / layout / fframes / FFrameOverView.java @ 28368

History | View | Annotate | Download (11.3 KB)

1
package com.iver.cit.gvsig.project.documents.layout.fframes;
2

    
3
import java.awt.Color;
4
import java.awt.Dimension;
5
import java.awt.Graphics2D;
6
import java.awt.geom.AffineTransform;
7
import java.awt.geom.Line2D;
8
import java.awt.geom.Rectangle2D;
9
import java.awt.image.BufferedImage;
10

    
11
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
12
import com.iver.andami.PluginServices;
13
import com.iver.andami.messages.NotificationManager;
14
import com.iver.cit.gvsig.fmap.MapContext;
15
import com.iver.cit.gvsig.fmap.ViewPort;
16
import com.iver.cit.gvsig.fmap.layers.XMLException;
17
import com.iver.cit.gvsig.project.documents.exceptions.SaveException;
18
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.FFrameOverViewDialog;
19
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.IFFrameDialog;
20
import com.iver.cit.gvsig.project.documents.layout.gui.Layout;
21
import com.iver.cit.gvsig.project.documents.view.ProjectView;
22
import com.iver.utiles.XMLEntity;
23

    
24

    
25
/**
26
 * FFrame para introducir el localizador de una vista en el Layout.
27
 *
28
 * @author Vicente Caballero Navarro
29
 */
30
public class FFrameOverView extends FFrameView implements IFFrameViewDependence{
31
    private MapContext assoc_map;
32
    private Rectangle2D extent;
33
        private FFrameView fframeview;
34
        private int dependenceIndex = -1;
35
    /**
36
     * DOCUMENT ME!
37
     *
38
     * @param g DOCUMENT ME!
39
     * @param at DOCUMENT ME!
40
     * @param rv DOCUMENT ME!
41
     * @param imgBase DOCUMENT ME!
42
     */
43
         public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv,
44
                        BufferedImage imgBase) {
45
                 if (getMapContext()!=null)
46
                        try {
47
                                getMapContext().getViewPort()
48
                                        .setExtent(getMapContext().getFullExtent());
49
                        } catch (ReadDriverException e) {
50
                                e.printStackTrace();
51
                        }
52
                refresh();
53
                super.draw(g, at, rv, imgBase);
54
                Rectangle2D r = getBoundingBox(at);
55

    
56
                if ((assoc_map != null)
57
                                && (assoc_map.getViewPort().getExtent() != null)
58
                                && (getMapContext().getViewPort().getExtent() != null)) {
59

    
60
                        ViewPort vp = getMapContext().getViewPort();
61
                        ViewPort vpOrig = assoc_map.getViewPort();
62

    
63
                        if (extent == null) {
64
                                extent = vpOrig.getAdjustedExtent();
65
                        }
66
                        vp.refreshExtent();
67
                        Rectangle2D extentPixels = vp.fromMapRectangle(extent);
68

    
69
                        extentPixels.setFrame(extentPixels.getX(), extentPixels.getY()
70
                                        , extentPixels.getWidth(),
71
                                        extentPixels.getHeight());
72
                        Rectangle2D clip = g.getClipBounds();
73

    
74
                        g.setClip((int) r.getX(), (int) r.getY(), (int) r.getWidth(),
75
                                        (int) r.getHeight());
76
                        g.setColor(Color.red);
77
                        g.draw(extentPixels);
78
                        // System.err.println("extentPixels =
79
                        // "+extentPixels.getX()+","+extentPixels.getY()+",
80
                        // "+extentPixels.getWidth()+","+extentPixels.getHeight());
81
                        g.setColor(new Color(100, 100, 100, 100));
82
                        g.fill(extentPixels);
83
                        // dibujamos las l?neas vertical y horizontal
84
                        double pRightUp = (int) (r.getWidth() + r.getX());
85

    
86
                        Line2D.Double linVert = new Line2D.Double(
87
                                        extentPixels.getCenterX(), r.getY(), extentPixels
88
                                                        .getCenterX(), r.getMaxY());
89
                        Line2D.Double linHoriz = new Line2D.Double(r.getX(), extentPixels
90
                                        .getCenterY(), pRightUp, extentPixels.getCenterY());
91

    
92
                        g.setColor(Color.darkGray);
93
                        g.draw(linVert);
94
                        g.draw(linHoriz);
95

    
96
                        g.setClip((int) clip.getX(), (int) clip.getY(), (int) clip
97
                                        .getWidth(), (int) clip.getHeight());
98
                        extent = null;
99
                        // System.err.println("Dibujando FFrameOverView ...");
100
                }
101

    
102
        }
103
    /**
104
         * DOCUMENT ME!
105
         *
106
         * @param g
107
         *            DOCUMENT ME!
108
         * @param at
109
         *            DOCUMENT ME!
110
         * @param rv
111
         *            DOCUMENT ME!
112
         * @param imgBase
113
         *            DOCUMENT ME!
114
         *
115
         * @throws ReadDriverException
116
         */
117
    public void print(Graphics2D g, AffineTransform at)
118
    throws ReadDriverException {
119
            draw(g, at, null, null);
120
//            Rectangle2D rect=getBoundingBox(at);
121
//            Point2D mp1 = FLayoutFunctions.toMapPoint(new Point2D.Double(rect.getX(),rect.getY()), getATMap());
122
//                Point2D mp2 = FLayoutFunctions.toMapPoint(new Point2D.Double(rect.getMaxX(),rect.getMaxY()), getATMap());
123

    
124
//             ViewPort vpOrig = assoc_map.getViewPort();
125
//
126
//         if (extent == null) {
127
//             extent = vpOrig.getAdjustedExtent();
128
//         }
129
//         g.setColor(Color.blue);
130
//         g.draw(extent);
131
//        Rectangle2D r = getBoundingBox(at);
132
//
133
//        if ((assoc_map != null) &&
134
//                (assoc_map.getViewPort().getExtent() != null) &&
135
//                (getMapContext().getViewPort().getExtent() != null)) {
136
//            ViewPort vp = getMapContext().getViewPort();
137
//            Rectangle2D extentView = vp.getAdjustedExtent();
138
//            ViewPort vpOrig = assoc_map.getViewPort();
139
//
140
//            if (extent == null) {
141
//                extent = vpOrig.getAdjustedExtent();
142
//            }
143
//            Rectangle2D clip=g.getClipBounds();
144
//            g.setClip((int)r.getX(),(int)r.getY(),(int)r.getWidth(),(int)r.getHeight());
145
//
146
//            AffineTransform affineTransform = vp.getAffineTransform();
147
//            Rectangle2D extentBounding=vp.toMapRectangle(r);
148
//            //Point2D p = vp.toMapPoint((int) r.getX(), (int) r.getY());
149
//            g.setTransform(affineTransform);
150
//            g.setColor(Color.red);
151
//            //Rectangle2D.intersect(extent,extentBounding,extent);
152
//            g.setStroke(new BasicStroke(5));
153
//            g.drawRect((int)extent.getX(),(int)extent.getY(),(int)extent.getWidth(),(int)extent.getHeight());
154
//            g.setStroke(new BasicStroke(0));
155
//            g.setColor(new Color(100, 100, 100, 100));
156
//            g.fill(extent);
157
//
158
//            // dibujamos las l?neas vertical y horizontal
159
//            Point2D pRightUp = vp.toMapPoint((int) (r.getWidth() + r.getX()), 0);
160
//
161
//            Line2D.Double linVert = new Line2D.Double(extent.getCenterX(),
162
//                    extentView.getMinY(), extent.getCenterX(), extentBounding.getY());
163
//            Line2D.Double linHoriz = new Line2D.Double(extentBounding.getX(),
164
//                    extent.getCenterY(), pRightUp.getX(), extent.getCenterY());
165
//
166
//            g.setColor(Color.darkGray);
167
//            g.draw(linVert);
168
//            g.draw(linHoriz);
169
//            g.setTransform(new AffineTransform());
170
//            g.setClip((int)clip.getX(),(int)clip.getY(),(int)clip.getWidth(),(int)clip.getHeight());
171
//
172
//
173
//            extent = null;
174
//        }
175
    }
176

    
177
    /**
178
     * Inserta el ProjectView de donde obtener las propiedades de la vista a
179
     * mostrar.
180
     *
181
     * @param v Modelo de la vista.
182
     */
183
    public void setView(ProjectView v) {
184
        view = v;
185

    
186
        ViewPort vp = null;
187

    
188
        if (getMapContext() != null) {
189
            vp = getMapContext().getViewPort();
190
        } else {
191
            vp = v.getMapContext().getViewPort().cloneViewPort();
192
        }
193

    
194
        vp.setImageSize(new Dimension((int) getBoundingBox(null).width,
195
                (int) getBoundingBox(null).height));
196
        assoc_map = v.getMapContext();
197

    
198
        if (m_bLinked) {
199
            if (getTypeScale() == AUTOMATICO) {
200
                m_fmap = v.getMapOverViewContext().createNewFMap(v.getMapOverViewContext()
201
                                                                  .getViewPort()
202
                                                                  .cloneViewPort());
203
                m_fmap.getViewPort().setImageSize(new Dimension(
204
                        (int) getBoundingBox(null).width,
205
                        (int) getBoundingBox(null).height));
206
                v.getMapOverViewContext().getViewPort().addViewPortListener(this);
207
                v.getMapOverViewContext().addLayerListener(this);
208
            }
209
        } else if (!m_bLinked) {
210
            try {
211
                if (getTypeScale() == AUTOMATICO) {
212
                    m_fmap = v.getMapOverViewContext().cloneFMap(); //(v.getMapContext().getViewPort().cloneViewPort());
213
                    m_fmap.setViewPort(v.getMapOverViewContext().getViewPort()
214
                                        .cloneViewPort());
215
                    m_fmap.getViewPort().setImageSize(new Dimension(
216
                            (int) getBoundingBox(null).width,
217
                            (int) getBoundingBox(null).height));
218
                    v.getMapOverViewContext().getViewPort().addViewPortListener(this);
219
                }
220
            } catch (XMLException e1) {
221
                NotificationManager.addError("Cuando se a?ade una vista al Layout",
222
                    e1);
223
            }
224
        }
225

    
226
        }
227

    
228
    /**
229
     * @see com.iver.cit.gvsig.project.documents.layout.fframes.IFFrame#getNameFFrame()
230
     */
231
    public String getNameFFrame() {
232
        return PluginServices.getText(this, "Localizador") + num;
233
    }
234
    public IFFrame cloneFFrame(Layout layout) {
235
        FFrameOverView frame = new FFrameOverView();
236
        frame.setLevel(this.getLevel());
237
        frame.setNum(this.num);
238
        frame.setName(this.getName());
239
        frame.setBoundBox(this.getBoundBox());
240
        frame.setTag(this.getTag());
241
        frame.m_Mode = this.m_Mode;
242
        frame.m_typeScale = this.m_typeScale;
243
        frame.m_extension = this.m_extension;
244
        frame.m_quality = this.m_quality;
245
        frame.m_viewing = this.m_viewing;
246
        frame.m_bLinked = this.m_bLinked;
247
        frame.m_mapUnits = this.m_mapUnits;
248
        frame.setRotation(this.getRotation());
249

    
250
        frame.m_Scale = this.m_Scale;
251
        frame.view=this.getView();
252
        frame.m_fmap = this.getMapContext();
253
        frame.setSelected(this.getSelected()!=IFFrame.NOSELECT);
254
        frame.setLayout(layout);
255
        frame.assoc_map=this.assoc_map;
256
        frame.extent=this.extent;
257
        frame.dependenceIndex=dependenceIndex;
258
        frame.fframeview=fframeview;
259
        frame.initDependence(layout.getLayoutContext().getAllFFrames());
260
        frame.setFrameLayoutFactory(factory);
261
        cloneActions(frame);
262
        return frame;
263
    }
264
        public IFFrameDialog getPropertyDialog() {
265
                return new FFrameOverViewDialog(getLayout(),this);
266
        }
267
        public void setFFrameDependence(IFFrame f) {
268
                fframeview=(FFrameView)f;
269

    
270
        }
271
        public IFFrame[] getFFrameDependence() {
272
                return new IFFrame[] {fframeview};
273
        }
274
        public void initDependence(IFFrame[] fframes) {
275
                  if ((dependenceIndex != -1) &&
276
                        fframes[dependenceIndex] instanceof FFrameView) {
277
                    fframeview = (FFrameView) fframes[dependenceIndex];
278
                }
279
        }
280
         /**
281
     * @see com.iver.cit.gvsig.project.documents.layout.fframes.IFFrame#getXMLEntity()
282
     */
283
    public XMLEntity getXMLEntity() throws SaveException {
284
        XMLEntity xml = super.getXMLEntity();
285
        try {
286
            if (fframeview != null) {
287
                Layout layout = fframeview.getLayout();
288
                IFFrame[] fframes = layout.getLayoutContext().getAllFFrames();
289

    
290
                for (int i = 0; i < fframes.length; i++) {
291
                    if (fframeview.equals(fframes[i])) {
292
                        xml.putProperty("index", i);
293
                        break;
294
                    }
295
                }
296
            }
297
        } catch (Exception e) {
298
            throw new SaveException(e, this.getClass().getName());
299
        }
300
        return xml;
301
    }
302

    
303
    public void setXMLEntity(XMLEntity xml) {
304
            super.setXMLEntity(xml);
305
        if (xml.contains("index")) {
306
            dependenceIndex = xml.getIntProperty("index");
307
        }
308
    }
309
        public void refreshDependence(IFFrame fant, IFFrame fnew) {
310
                if ((fframeview != null) &&
311
                fframeview.equals(fant)) {
312
            fframeview=(FFrameView)fnew;
313
            }
314

    
315
        }
316

    
317
}