Revision 761 trunk/org.gvsig.app.document.layout2.app/org.gvsig.app.document.layout2.app.mainplugin/src/main/java/org/gvsig/app/project/documents/layout/fframes/FFrameOverView.java

View differences:

FFrameOverView.java
28 28
import java.awt.Image;
29 29
import java.awt.Point;
30 30
import java.awt.geom.AffineTransform;
31
import java.awt.geom.Line2D;
32 31
import java.awt.geom.Rectangle2D;
33 32
import java.awt.image.BufferedImage;
34 33

  
35
import javax.swing.JOptionPane;
36

  
37 34
import org.slf4j.Logger;
38 35
import org.slf4j.LoggerFactory;
39 36
import org.gvsig.andami.PluginServices;
40
import org.gvsig.andami.messages.NotificationManager;
41
import org.gvsig.app.ApplicationLocator;
42 37
import org.gvsig.app.project.documents.view.ViewDocument;
43 38
import org.gvsig.compat.print.PrintAttributes;
44 39
import org.gvsig.fmap.dal.exception.ReadException;
......
54 49

  
55 50
/**
56 51
 * FFrame para introducir el localizador de una vista en el Layout.
57
 * 
52
 *
58 53
 * @author Vicente Caballero Navarro
59 54
 */
60 55
public class FFrameOverView extends FFrameView implements IFFrameViewDependence {
61 56

  
62 57
    private static final Logger logger = LoggerFactory
63
        .getLogger(FFrameOverView.class);
64
    
58
            .getLogger(FFrameOverView.class);
59

  
65 60
    public static final String PERSISTENCE_DEFINITION_NAME = "FFrameOverView";
66 61

  
67
    private static final String FFRAMEVIEWDEPENDENCE_FIELD =
68
        "fframeViewDependence";
62
    private static final String FFRAMEVIEWDEPENDENCE_FIELD
63
            = "fframeViewDependence";
69 64

  
70 65
    private MapContext assoc_map;
71 66
    private Envelope extent;
72 67
    private FFrameView fframeViewDependence;
73 68

  
69
    @Override
74 70
    protected void createImage(AffineTransform affineTransform,
75
    		int width, int height, Point mapOrigin) throws ReadException, MapContextException {
76
    	// FIXME: we create the image on every redraw instead of implementing some optimizations
77
    	// The overview should not be heavy to paint, but we could optimize the process by setting
78
    	// the listeners to the right mapcontext, the image would be automaticall invalidated when
79
    	// needed.
80
    	m_image = null;
81
    	
82
    	super.createImage(affineTransform, width, height, mapOrigin);
83
    	Graphics2D g = (Graphics2D) m_image.createGraphics();
84
    	Dimension size = getMapContext().getViewPort().getImageSize();
85
    	Rectangle2D r = new Rectangle2D.Double(0, 0, size.getWidth(), size.getHeight());
86
    	drawAreaOfInterestBox(g, affineTransform, r, null);
87
    	g.dispose();
71
            int width, int height, Point mapOrigin) throws ReadException, MapContextException {
72
        // FIXME: we create the image on every redraw instead of implementing some optimizations
73
        // The overview should not be heavy to paint, but we could optimize the process by setting
74
        // the listeners to the right mapcontext, the image would be automaticall invalidated when
75
        // needed.
76
        m_image = null;
77

  
78
        super.createImage(affineTransform, width, height, mapOrigin);
79
        Graphics2D g = (Graphics2D) m_image.createGraphics();
80
        Dimension size = getMapContext().getViewPort().getImageSize();
81
        Rectangle2D r = new Rectangle2D.Double(0, 0, size.getWidth(), size.getHeight());
82
        drawAreaOfInterestBox(g, affineTransform, r, null);
83
        g.dispose();
88 84
    }
89 85

  
90 86
    protected void drawAreaOfInterestBox(
91
    		Graphics2D g,
92
    		AffineTransform at,
93
    		Rectangle2D clip,
94
    		PrintAttributes printAttributes) {
87
            Graphics2D g,
88
            AffineTransform at,
89
            Rectangle2D clip,
90
            PrintAttributes printAttributes) {
95 91

  
96
    	if ((assoc_map != null)
97
    			&& (assoc_map.getViewPort().getEnvelope() != null)
98
    			&& (getMapContext().getViewPort().getEnvelope() != null)) {
92
        if ((assoc_map != null)
93
                && (assoc_map.getViewPort().getEnvelope() != null)
94
                && (getMapContext().getViewPort().getEnvelope() != null)) {
99 95

  
100
    		ViewPort vp = getMapContext().getViewPort();
101
    		ViewPort vpOrig = assoc_map.getViewPort();
96
            ViewPort vp = getMapContext().getViewPort();
97
            ViewPort vpOrig = assoc_map.getViewPort();
102 98

  
103
    		if (extent == null) {
104
    			extent = vpOrig.getAdjustedEnvelope();
105
    		}
106
    		
107
    		Image ov_img = new BufferedImage(
108
    				vp.getImageWidth(),
109
    				vp.getImageHeight(),
110
    				BufferedImage.TYPE_INT_ARGB);
111
    		Graphics ov_img_gra = ov_img.getGraphics();
99
            if (extent == null) {
100
                extent = vpOrig.getAdjustedEnvelope();
101
            }
112 102

  
113
    		/*
103
            Image ov_img = new BufferedImage(
104
                    vp.getImageWidth(),
105
                    vp.getImageHeight(),
106
                    BufferedImage.TYPE_INT_ARGB);
107
            Graphics ov_img_gra = ov_img.getGraphics();
108

  
109
            /*
114 110
    		 * Fill with transparent color
115
    		 */
116
    		 ov_img_gra.setColor(new Color(0, 0, 0, 0));
117
    		ov_img_gra.fillRect(0, 0,
118
    				vp.getImageWidth(), vp.getImageHeight());
111
             */
112
            ov_img_gra.setColor(new Color(0, 0, 0, 0));
113
            ov_img_gra.fillRect(0, 0,
114
                    vp.getImageWidth(), vp.getImageHeight());
119 115

  
120
    		/*
116
            /*
121 117
    		 * Area of interest in pixels, inside ov_img image
122
    		 */
118
             */
119
            Rectangle2D aux
120
                    = new Rectangle2D.Double(extent.getMinimum(0),
121
                            extent.getMinimum(1), extent.getLength(0),
122
                            extent.getLength(1));
123
            Rectangle2D extentPixels = vp.fromMapRectangle(aux);
123 124

  
124
    		Rectangle2D aux =
125
    				new Rectangle2D.Double(extent.getMinimum(0),
126
    						extent.getMinimum(1), extent.getLength(0),
127
    						extent.getLength(1));
128
    		Rectangle2D extentPixels = vp.fromMapRectangle(aux);
129

  
130
    		/*
125
            /*
131 126
    		 * Fill (gray) and perimeter (red)
132
    		 */
133
    		ov_img_gra.setColor(new Color(100, 100, 100, 100));
134
    		ov_img_gra.fillRect((int) extentPixels.getMinX(),
135
    				(int) extentPixels.getMinY(),
136
    				(int) extentPixels.getWidth(),
137
    				(int) extentPixels.getHeight());
138
    		ov_img_gra.setColor(Color.red);
139
    		ov_img_gra.drawRect((int) extentPixels.getMinX(),
140
    				(int) extentPixels.getMinY(),
141
    				(int) extentPixels.getWidth(),
142
    				(int) extentPixels.getHeight());
127
             */
128
            ov_img_gra.setColor(new Color(100, 100, 100, 100));
129
            ov_img_gra.fillRect((int) extentPixels.getMinX(),
130
                    (int) extentPixels.getMinY(),
131
                    (int) extentPixels.getWidth(),
132
                    (int) extentPixels.getHeight());
133
            ov_img_gra.setColor(Color.red);
134
            ov_img_gra.drawRect((int) extentPixels.getMinX(),
135
                    (int) extentPixels.getMinY(),
136
                    (int) extentPixels.getWidth(),
137
                    (int) extentPixels.getHeight());
143 138

  
144
    		int aoi_top = (int) extentPixels.getMinY();
145
    		int aoi_bottom = (int) extentPixels.getMaxY();
146
    		int aoi_left = (int) extentPixels.getMinX();
147
    		int aoi_right = (int) extentPixels.getMaxX();
148
    		/*
139
            int aoi_top = (int) extentPixels.getMinY();
140
            int aoi_bottom = (int) extentPixels.getMaxY();
141
            int aoi_left = (int) extentPixels.getMinX();
142
            int aoi_right = (int) extentPixels.getMaxX();
143
            /*
149 144
    		 * Draw vertical, horizontal lines
150
    		 */
151
    		ov_img_gra.setColor(Color.darkGray);
152
    		int cx = (int) extentPixels.getCenterX(); 
153
    		int cy = (int) extentPixels.getCenterY();
154
    		int maxx = vp.getImageWidth();
155
    		int maxy = vp.getImageHeight();
145
             */
146
            ov_img_gra.setColor(Color.darkGray);
147
            int cx = (int) extentPixels.getCenterX();
148
            int cy = (int) extentPixels.getCenterY();
149
            int maxx = vp.getImageWidth();
150
            int maxy = vp.getImageHeight();
156 151

  
157
    		// vertical
158
    		ov_img_gra.drawLine(cx, 0, cx, aoi_top);
159
    		ov_img_gra.drawLine(cx, aoi_bottom, cx, maxy);
160
    		// horiz
161
    		ov_img_gra.drawLine(0, cy, aoi_left, cy);
162
    		ov_img_gra.drawLine(aoi_right, cy, maxx, cy);
152
            // vertical
153
            ov_img_gra.drawLine(cx, 0, cx, aoi_top);
154
            ov_img_gra.drawLine(cx, aoi_bottom, cx, maxy);
155
            // horiz
156
            ov_img_gra.drawLine(0, cy, aoi_left, cy);
157
            ov_img_gra.drawLine(aoi_right, cy, maxx, cy);
163 158

  
164
    		/*
159
            /*
165 160
    		 * Semi-transparent image is ready
166
    		 */
161
             */
167 162

  
168
    		/*
163
 /*
169 164
    		 * Save clip area
170
    		 */
171
    		Rectangle2D origClip = g.getClipBounds();
172
    		g.setClip((int) clip.getX(), (int) clip.getY(),
173
    				(int) clip.getWidth(), (int) clip.getHeight());
165
             */
166
            Rectangle2D origClip = g.getClipBounds();
167
            g.setClip((int) clip.getX(), (int) clip.getY(),
168
                    (int) clip.getWidth(), (int) clip.getHeight());
174 169

  
175
    		/*
170
            /*
176 171
    		 * Draw image
177
    		 */
178
    		g.drawImage(ov_img, (int)clip.getX(), (int)clip.getY(), null);
179
    		ov_img_gra.dispose();
172
             */
173
            g.drawImage(ov_img, (int) clip.getX(), (int) clip.getY(), null);
174
            ov_img_gra.dispose();
180 175

  
181
    		/*
176
            /*
182 177
    		 * Restore clip area
183
    		 */
184
    		if (origClip!=null) {
185
    		g.setClip((int) origClip.getX(), (int) origClip.getY(),
186
    				(int) origClip.getWidth(), (int) origClip.getHeight());
187
    		}
188
    		else {
189
    			g.setClip(null);
190
    		}
191
    		extent = null;
192
    	}
178
             */
179
            if (origClip != null) {
180
                g.setClip((int) origClip.getX(), (int) origClip.getY(),
181
                        (int) origClip.getWidth(), (int) origClip.getHeight());
182
            } else {
183
                g.setClip(null);
184
            }
185
            extent = null;
186
        }
193 187
    }
194
    
195
    protected void print(Graphics2D g, AffineTransform at, PrintAttributes printAttributes) {        
188

  
189
    @Override
190
    protected void print(Graphics2D g, AffineTransform at, PrintAttributes printAttributes) {
196 191
        super.print(g, at, printAttributes);
197
		Rectangle2D r = getBoundingBox(at);
198
		if (getMapContext()!=null && getMapContext().getViewPort()!=null) {
199
			ViewPort vp = getMapContext().getViewPort();
200
			Dimension oldSize = vp.getImageSize();
201
			vp.setImageSize(new Dimension((int)r.getWidth(), (int) r.getHeight()));
202
			drawAreaOfInterestBox(g, at, r, printAttributes);
203
			vp.setImageSize(oldSize);
204
		}
192
        Rectangle2D r = getBoundingBox(at);
193
        if (getMapContext() != null && getMapContext().getViewPort() != null) {
194
            ViewPort vp = getMapContext().getViewPort();
195
            Dimension oldSize = vp.getImageSize();
196
            vp.setImageSize(new Dimension((int) r.getWidth(), (int) r.getHeight()));
197
            drawAreaOfInterestBox(g, at, r, printAttributes);
198
            vp.setImageSize(oldSize);
199
        }
205 200
    }
206
    
201

  
202
    @Override
207 203
    public void setView(ViewDocument v) {
208
    	this.viewDocument = v;
209
        if (fframeViewDependence == null)
204
        this.viewDocument = v;
205
        if (fframeViewDependence == null) {
210 206
            return;
207
        }
211 208
        assoc_map = fframeViewDependence.getMapContext();
212
        if (v!=null) {
213
        	setViewMapContext(v.getMapOverViewContext());
209
        if (v != null) {
210
            setViewMapContext(v.getMapOverViewContext());
214 211
        }
215 212
    }
216
    
213

  
217 214
    protected void setListeners() {
218
    	// we don't need any listener for FFrameOverview
215
        // we don't need any listener for FFrameOverview
219 216
    }
220 217

  
221

  
222 218
    /**
223
     * @see org.gvsig.app.project.documents.layout.fframes.IFFrame#getNameFFrame()
219
     * @return @see
220
     * org.gvsig.app.project.documents.layout.fframes.IFFrame#getNameFFrame()
224 221
     */
222
    @Override
225 223
    public String getNameFFrame() {
226 224
        return PluginServices.getText(this, "Localizador") + num;
227 225
    }
228 226

  
227
    @Override
229 228
    public String getName() {
230 229
        return PERSISTENCE_DEFINITION_NAME;
231 230
    }
......
237 236
        return frame;
238 237
    }
239 238

  
239
    @Override
240 240
    public void setFFrameDependence(IFFrame f) {
241 241
        fframeViewDependence = (FFrameView) f;
242 242
    }
243 243

  
244
    @Override
244 245
    public IFFrame[] getFFrameDependence() {
245
        return new IFFrame[] { fframeViewDependence };
246
        return new IFFrame[]{fframeViewDependence};
246 247
    }
247 248

  
249
    @Override
248 250
    public void refreshDependence(IFFrame fant, IFFrame fnew) {
249 251
        if ((fframeViewDependence != null) && fframeViewDependence.equals(fant)
250
        		&& fnew instanceof FFrameView) {
251
        	FFrameView newFFView = (FFrameView) fnew;
252
        	setView(newFFView.getView());
252
                && fnew instanceof FFrameView) {
253
            FFrameView newFFView = (FFrameView) fnew;
254
            setView(newFFView.getView());
253 255
        }
254 256
    }
255
 
257

  
256 258
    public static void registerPersistent() {
257 259
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
258 260
        if (manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null) {
259
            DynStruct definition =
260
                manager.addDefinition(FFrameOverView.class,
261
                    PERSISTENCE_DEFINITION_NAME,
262
                    "FFrameOverView persistence definition", null, null);
261
            DynStruct definition
262
                    = manager.addDefinition(FFrameOverView.class,
263
                            PERSISTENCE_DEFINITION_NAME,
264
                            "FFrameOverView persistence definition", null, null);
263 265

  
264 266
            definition.extend(manager
265
                .getDefinition(FFrameView.PERSISTENCE_DEFINITION_NAME));
267
                    .getDefinition(FFrameView.PERSISTENCE_DEFINITION_NAME));
266 268

  
267 269
            definition.addDynFieldObject(FFRAMEVIEWDEPENDENCE_FIELD)
268
                .setClassOfValue(FFrameView.class);
270
                    .setClassOfValue(FFrameView.class);
269 271
        }
270 272
    }
271 273

  
272 274
    @Override
273 275
    public void loadFromState(PersistentState state)
274
        throws PersistenceException {
276
            throws PersistenceException {
275 277
        super.loadFromState(state);
276
        fframeViewDependence =
277
            (FFrameView) state.get(FFRAMEVIEWDEPENDENCE_FIELD);
278
        
278
        fframeViewDependence
279
                = (FFrameView) state.get(FFRAMEVIEWDEPENDENCE_FIELD);
280

  
279 281
        /*
280 282
         * force refreshment of other fields
281 283
         */

Also available in: Unified diff