Statistics
| Revision:

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

History | View | Annotate | Download (11.4 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) throws ReadDriverException {
45
        super.draw(g, at, rv, imgBase);
46
        refresh();
47
        Rectangle2D r = getBoundingBox(at);
48
            if (getMapContext()==null)
49
                    return;
50
        try {
51
                getMapContext().getViewPort().setExtent(getMapContext().getFullExtent());
52
                } catch (ReadDriverException e) {
53
                        e.printStackTrace();
54
                }
55

    
56
                if (fframeview!=null && (fframeview.getMapContext() != null) &&
57
                (fframeview.getMapContext().getViewPort().getExtent() != null) &&
58
                (getMapContext().getViewPort().getExtent() != null)) {
59
            ViewPort vp = getMapContext().getViewPort();
60
            ViewPort vpOrig = fframeview.getMapContext().getViewPort();
61

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

    
68
            extentPixels.setFrame(extentPixels.getX(),extentPixels.getY(),extentPixels.getWidth(),extentPixels.getHeight());
69
            Rectangle2D clip=g.getClipBounds();
70
            g.setClip((int)r.getX(),(int)r.getY(),(int)r.getWidth(),(int)r.getHeight());
71
            g.setColor(Color.red);
72
            g.draw(extentPixels);
73
            System.err.println("extentPixels = "+extentPixels.getX()+", "+extentPixels.getY()+", "+extentPixels.getWidth()+", "+extentPixels.getHeight());
74
            g.setColor(new Color(100, 100, 100, 100));
75
            g.fill(extentPixels);
76
            // dibujamos las l?neas vertical y horizontal
77
            double pRightUp = (int) (r.getWidth() + r.getX());
78

    
79
            Line2D.Double linVert = new Line2D.Double(extentPixels.getCenterX(),
80
                    r.getY(), extentPixels.getCenterX(), r.getMaxY());
81
            Line2D.Double linHoriz = new Line2D.Double(r.getX(),
82
                    extentPixels.getCenterY(), pRightUp, extentPixels.getCenterY());
83

    
84
            g.setColor(Color.darkGray);
85
            g.draw(linVert);
86
            g.draw(linHoriz);
87
            g.setClip((int)clip.getX(),(int)clip.getY(),(int)clip.getWidth(),(int)clip.getHeight());
88
            extent = null;
89
            System.err.println("Dibujando FFrameOverView ...");
90
        }
91

    
92
    }
93
    /**
94
     * DOCUMENT ME!
95
     *
96
     * @param g DOCUMENT ME!
97
     * @param at DOCUMENT ME!
98
     * @param rv DOCUMENT ME!
99
     * @param imgBase DOCUMENT ME!
100
     *
101
     * @throws ReadDriverException
102
     */
103
    public void print(Graphics2D g, AffineTransform at)
104
    throws ReadDriverException {
105
            draw(g, at, null, null);
106
//            Rectangle2D rect=getBoundingBox(at);
107
//            Point2D mp1 = FLayoutFunctions.toMapPoint(new Point2D.Double(rect.getX(),rect.getY()), getATMap());
108
//                Point2D mp2 = FLayoutFunctions.toMapPoint(new Point2D.Double(rect.getMaxX(),rect.getMaxY()), getATMap());
109

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

    
163
    /**
164
     * Inserta el ProjectView de donde obtener las propiedades de la vista a
165
     * mostrar.
166
     *
167
     * @param v Modelo de la vista.
168
     */
169
    public void setView(ProjectView v) {
170
        view = v;
171

    
172
        ViewPort vp = null;
173

    
174
        if (getMapContext() != null) {
175
            vp = getMapContext().getViewPort();
176
        } else {
177
            vp = v.getMapContext().getViewPort().cloneViewPort();
178
        }
179

    
180
        vp.setImageSize(new Dimension((int) getBoundingBox(null).width,
181
                (int) getBoundingBox(null).height));
182
        assoc_map = v.getMapContext();
183

    
184
        if (m_bLinked) {
185
            if (getTypeScale() == AUTOMATICO) {
186
                m_fmap = v.getMapOverViewContext().createNewFMap(v.getMapOverViewContext()
187
                                                                  .getViewPort()
188
                                                                  .cloneViewPort());
189
                m_fmap.getViewPort().setImageSize(new Dimension(
190
                        (int) getBoundingBox(null).width,
191
                        (int) getBoundingBox(null).height));
192
                v.getMapOverViewContext().getViewPort().addViewPortListener(this);
193
                v.getMapOverViewContext().addLayerListener(this);
194
            }
195
        } else if (!m_bLinked) {
196
            try {
197
                if (getTypeScale() == AUTOMATICO) {
198
                    m_fmap = v.getMapOverViewContext().cloneFMap(); //(v.getMapContext().getViewPort().cloneViewPort());
199
                    m_fmap.setViewPort(v.getMapOverViewContext().getViewPort()
200
                                        .cloneViewPort());
201
                    m_fmap.getViewPort().setImageSize(new Dimension(
202
                            (int) getBoundingBox(null).width,
203
                            (int) getBoundingBox(null).height));
204
                    v.getMapOverViewContext().getViewPort().addViewPortListener(this);
205
                }
206
            } catch (XMLException e1) {
207
                NotificationManager.addError("Cuando se a?ade una vista al Layout",
208
                    e1);
209
            }
210
        }
211

    
212
        }
213

    
214
    /**
215
     * @see com.iver.cit.gvsig.project.documents.layout.fframes.IFFrame#getNameFFrame()
216
     */
217
    public String getNameFFrame() {
218
        return PluginServices.getText(this, "Localizador") + num;
219
    }
220
    public IFFrame cloneFFrame(Layout layout) {
221
        FFrameOverView frame = new FFrameOverView();
222
        frame.setLevel(this.getLevel());
223
        frame.setNum(this.num);
224
        frame.setName(this.getName());
225
        frame.setBoundBox(this.getBoundBox());
226
        frame.setTag(this.getTag());
227
        frame.m_Mode = this.m_Mode;
228
        frame.m_typeScale = this.m_typeScale;
229
        frame.m_extension = this.m_extension;
230
        frame.m_quality = this.m_quality;
231
        frame.m_viewing = this.m_viewing;
232
        frame.m_bLinked = this.m_bLinked;
233
        frame.m_mapUnits = this.m_mapUnits;
234
        frame.setRotation(this.getRotation());
235

    
236
        frame.m_Scale = this.m_Scale;
237
        frame.view=this.getView();
238
        frame.m_fmap = this.getMapContext();
239
        frame.setSelected(this.getSelected()!=IFFrame.NOSELECT);
240
        frame.setLayout(layout);
241
        frame.assoc_map=this.assoc_map;
242
        frame.extent=this.extent;
243
        frame.dependenceIndex=dependenceIndex;
244
        frame.fframeview=fframeview;
245
        frame.initDependence(layout.getLayoutContext().getAllFFrames());
246
        frame.setFrameLayoutFactory(factory);
247
        cloneActions(frame);
248
        return frame;
249
    }
250
        public IFFrameDialog getPropertyDialog() {
251
                return new FFrameOverViewDialog(getLayout(),this);
252
        }
253
        public void setFFrameDependence(IFFrame f) {
254
                fframeview=(FFrameView)f;
255

    
256
        }
257
        public IFFrame getFFrameDependence() {
258
                return fframeview;
259
        }
260
        public void initDependence(IFFrame[] fframes) {
261
                  if ((dependenceIndex != -1) &&
262
                        fframes[dependenceIndex] instanceof FFrameView) {
263
                    fframeview = (FFrameView) fframes[dependenceIndex];
264
                }
265
        }
266
         /**
267
     * @see com.iver.cit.gvsig.project.documents.layout.fframes.IFFrame#getXMLEntity()
268
     */
269
    public XMLEntity getXMLEntity() throws SaveException {
270
        XMLEntity xml = super.getXMLEntity();
271
        try {
272
            if (fframeview != null) {
273
                Layout layout = fframeview.getLayout();
274
                IFFrame[] fframes = layout.getLayoutContext().getAllFFrames();
275

    
276
                for (int i = 0; i < fframes.length; i++) {
277
                    if (fframeview.equals(fframes[i])) {
278
                        xml.putProperty("index", i);
279
                        break;
280
                    }
281
                }
282
            }
283
        } catch (Exception e) {
284
            throw new SaveException(e, this.getClass().getName());
285
        }
286
        return xml;
287
    }
288

    
289
    public void setXMLEntity(XMLEntity xml) {
290
            super.setXMLEntity(xml);
291
        if (xml.contains("index")) {
292
            dependenceIndex = xml.getIntProperty("index");
293
        }
294
    }
295

    
296
}