Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / layout / fframes / FFrameOverView.java @ 21501

History | View | Annotate | Download (11.2 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 org.gvsig.data.ReadException;
12
import org.gvsig.fmap.mapcontext.MapContext;
13
import org.gvsig.fmap.mapcontext.ViewPort;
14
import org.gvsig.fmap.mapcontext.layers.XMLException;
15

    
16
import com.iver.andami.PluginServices;
17
import com.iver.andami.messages.NotificationManager;
18
import com.iver.cit.gvsig.project.documents.exceptions.SaveException;
19
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.FFrameOverViewDialog;
20
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.IFFrameDialog;
21
import com.iver.cit.gvsig.project.documents.layout.gui.Layout;
22
import com.iver.cit.gvsig.project.documents.view.ProjectView;
23
import com.iver.utiles.XMLEntity;
24

    
25

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

    
53
                if ((assoc_map != null)
54
                                && (assoc_map.getViewPort().getExtent() != null)
55
                                && (getMapContext().getViewPort().getExtent() != null)) {
56

    
57
                        ViewPort vp = getMapContext().getViewPort();
58
                        ViewPort vpOrig = assoc_map.getViewPort();
59

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

    
66
                        extentPixels.setFrame(extentPixels.getX(), extentPixels.getY()
67
                                        - extentPixels.getHeight(), extentPixels.getWidth(),
68
                                        extentPixels.getHeight());
69
                        Rectangle2D clip = g.getClipBounds();
70

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

    
83
                        Line2D.Double linVert = new Line2D.Double(
84
                                        extentPixels.getCenterX(), r.getY(), extentPixels
85
                                                        .getCenterX(), r.getMaxY());
86
                        Line2D.Double linHoriz = new Line2D.Double(r.getX(), extentPixels
87
                                        .getCenterY(), pRightUp, extentPixels.getCenterY());
88

    
89
                        g.setColor(Color.darkGray);
90
                        g.draw(linVert);
91
                        g.draw(linHoriz);
92

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

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

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

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

    
183
        ViewPort vp = null;
184

    
185
        if (getMapContext() != null) {
186
            vp = getMapContext().getViewPort();
187
        } else {
188
            vp = v.getMapContext().getViewPort().cloneViewPort();
189
        }
190

    
191
        vp.setImageSize(new Dimension((int) getBoundingBox(null).width,
192
                (int) getBoundingBox(null).height));
193
        assoc_map = v.getMapContext();
194

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

    
223
        }
224

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

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

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

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

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

    
312
        }
313

    
314
}