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 | 9392 | caballero | 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 | 10626 | caballero | import com.hardcode.gdbms.driver.exceptions.ReadDriverException; |
12 | 9392 | caballero | 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 | 9593 | caballero | import com.iver.cit.gvsig.project.documents.exceptions.SaveException; |
18 | 9392 | caballero | 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 | 9593 | caballero | import com.iver.utiles.XMLEntity; |
23 | 9392 | caballero | |
24 | |||
25 | /**
|
||
26 | * FFrame para introducir el localizador de una vista en el Layout.
|
||
27 | *
|
||
28 | * @author Vicente Caballero Navarro
|
||
29 | */
|
||
30 | 9556 | caballero | public class FFrameOverView extends FFrameView implements IFFrameViewDependence{ |
31 | 9392 | caballero | private MapContext assoc_map;
|
32 | private Rectangle2D extent; |
||
33 | 9556 | caballero | private FFrameView fframeview;
|
34 | private int dependenceIndex = -1; |
||
35 | 9392 | caballero | /**
|
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 | 12588 | caballero | public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv, |
44 | 28368 | vcaballero | BufferedImage imgBase) {
|
45 | 16548 | vcaballero | if (getMapContext()!=null) |
46 | 28368 | vcaballero | try {
|
47 | getMapContext().getViewPort() |
||
48 | .setExtent(getMapContext().getFullExtent()); |
||
49 | } catch (ReadDriverException e) {
|
||
50 | e.printStackTrace(); |
||
51 | } |
||
52 | 27353 | vcaballero | refresh(); |
53 | 12588 | caballero | super.draw(g, at, rv, imgBase);
|
54 | Rectangle2D r = getBoundingBox(at);
|
||
55 | 9556 | caballero | |
56 | 12588 | caballero | if ((assoc_map != null) |
57 | && (assoc_map.getViewPort().getExtent() != null)
|
||
58 | && (getMapContext().getViewPort().getExtent() != null)) {
|
||
59 | 9392 | caballero | |
60 | 12588 | caballero | ViewPort vp = getMapContext().getViewPort(); |
61 | ViewPort vpOrig = assoc_map.getViewPort(); |
||
62 | 9392 | caballero | |
63 | 12588 | caballero | if (extent == null) { |
64 | extent = vpOrig.getAdjustedExtent(); |
||
65 | } |
||
66 | vp.refreshExtent(); |
||
67 | Rectangle2D extentPixels = vp.fromMapRectangle(extent);
|
||
68 | 9392 | caballero | |
69 | 12588 | caballero | extentPixels.setFrame(extentPixels.getX(), extentPixels.getY() |
70 | 27353 | vcaballero | , extentPixels.getWidth(), |
71 | 12588 | caballero | extentPixels.getHeight()); |
72 | Rectangle2D clip = g.getClipBounds();
|
||
73 | 9392 | caballero | |
74 | 12588 | caballero | 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 | 9392 | caballero | |
86 | 12588 | caballero | 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 | 9392 | caballero | /**
|
104 | 12588 | caballero | * 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 | 9392 | caballero | public void print(Graphics2D g, AffineTransform at) |
118 | 10626 | caballero | throws ReadDriverException {
|
119 | 9392 | caballero | 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 | 9631 | caballero | frame.dependenceIndex=dependenceIndex; |
258 | frame.fframeview=fframeview; |
||
259 | 9556 | caballero | frame.initDependence(layout.getLayoutContext().getAllFFrames()); |
260 | 9593 | caballero | frame.setFrameLayoutFactory(factory); |
261 | 9392 | caballero | cloneActions(frame); |
262 | return frame;
|
||
263 | } |
||
264 | public IFFrameDialog getPropertyDialog() {
|
||
265 | return new FFrameOverViewDialog(getLayout(),this); |
||
266 | } |
||
267 | 9556 | caballero | public void setFFrameDependence(IFFrame f) { |
268 | fframeview=(FFrameView)f; |
||
269 | |||
270 | } |
||
271 | 11800 | caballero | public IFFrame[] getFFrameDependence() { |
272 | return new IFFrame[] {fframeview}; |
||
273 | 9556 | caballero | } |
274 | public void initDependence(IFFrame[] fframes) { |
||
275 | if ((dependenceIndex != -1) && |
||
276 | fframes[dependenceIndex] instanceof FFrameView) {
|
||
277 | fframeview = (FFrameView) fframes[dependenceIndex]; |
||
278 | } |
||
279 | } |
||
280 | 9593 | caballero | /**
|
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 | 11800 | caballero | public void refreshDependence(IFFrame fant, IFFrame fnew) { |
310 | if ((fframeview != null) && |
||
311 | fframeview.equals(fant)) { |
||
312 | fframeview=(FFrameView)fnew; |
||
313 | } |
||
314 | 9593 | caballero | |
315 | 11800 | caballero | } |
316 | |||
317 | 9392 | caballero | } |