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 |
} |