Revision 243

View differences:

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
26 26
import java.awt.Graphics;
27 27
import java.awt.Graphics2D;
28 28
import java.awt.Image;
29
import java.awt.Point;
29 30
import java.awt.geom.AffineTransform;
30 31
import java.awt.geom.Line2D;
31 32
import java.awt.geom.Rectangle2D;
......
35 36

  
36 37
import org.slf4j.Logger;
37 38
import org.slf4j.LoggerFactory;
38

  
39 39
import org.gvsig.andami.PluginServices;
40 40
import org.gvsig.andami.messages.NotificationManager;
41 41
import org.gvsig.app.ApplicationLocator;
......
44 44
import org.gvsig.fmap.dal.exception.ReadException;
45 45
import org.gvsig.fmap.geom.primitive.Envelope;
46 46
import org.gvsig.fmap.mapcontext.MapContext;
47
import org.gvsig.fmap.mapcontext.MapContextException;
47 48
import org.gvsig.fmap.mapcontext.ViewPort;
48 49
import org.gvsig.tools.ToolsLocator;
49 50
import org.gvsig.tools.dynobject.DynStruct;
......
70 71
    private Envelope extent;
71 72
    private FFrameView fframeViewDependence;
72 73

  
73
    /**
74
     * DOCUMENT ME!
75
     * 
76
     * @param g
77
     *            DOCUMENT ME!
78
     * @param at
79
     *            DOCUMENT ME!
80
     * @param rv
81
     *            DOCUMENT ME!
82
     * @param imgBase
83
     *            DOCUMENT ME!
84
     */
85
    public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv,
86
        BufferedImage imgBase) {
87
        try {
88
            if (getMapContext() != null
89
                && getMapContext().getFullEnvelope() != null) {
90
                getMapContext().getViewPort().setEnvelope(
91
                    getMapContext().getFullEnvelope());
92
            }
93
        } catch (ReadException e) {
94
            ApplicationLocator.getManager().message(
95
                e.getMessage(), JOptionPane.ERROR_MESSAGE);
96
            logger.info("Error while setting full extent.", e);
97
        }
98
        refresh();
99
        super.draw(g, at, rv, imgBase);
100
        
101
        drawAreaOfInterestBox(g, at, null);
74
    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();
102 88
    }
103 89

  
104
    
105 90
    protected void drawAreaOfInterestBox(
106
        Graphics2D g,
107
        AffineTransform at,
108
        PrintAttributes printAttributes) {
109
        
110
        if ((assoc_map != null)
111
            && (assoc_map.getViewPort().getEnvelope() != null)
112
            && (getMapContext().getViewPort().getEnvelope() != null)) {
91
    		Graphics2D g,
92
    		AffineTransform at,
93
    		Rectangle2D clip,
94
    		PrintAttributes printAttributes) {
113 95

  
114
            Rectangle2D r = getBoundingBox(at);
115
            ViewPort vp = getMapContext().getViewPort();
116
            ViewPort vpOrig = assoc_map.getViewPort();
96
    	if ((assoc_map != null)
97
    			&& (assoc_map.getViewPort().getEnvelope() != null)
98
    			&& (getMapContext().getViewPort().getEnvelope() != null)) {
117 99

  
118
            if (extent == null) {
119
                extent = vpOrig.getAdjustedEnvelope();
120
            }
121
            vp.refreshExtent();
122
            
123
            Image ov_img = new BufferedImage(
124
                vp.getImageWidth(),
125
                vp.getImageHeight(),
126
                BufferedImage.TYPE_INT_ARGB);
127
            Graphics ov_img_gra = ov_img.getGraphics();
128
            
129
            /*
130
             * Fill with transparent color
131
             */
132
            ov_img_gra.setColor(new Color(0, 0, 0, 0));
133
            ov_img_gra.fillRect(0, 0,
134
                vp.getImageWidth(), vp.getImageHeight());
135
            
136
            
137
            Rectangle2D aux =
138
                new Rectangle2D.Double(extent.getMinimum(0),
139
                    extent.getMinimum(1), extent.getLength(0),
140
                    extent.getLength(1));
141
            Rectangle2D extentPixels = vp.fromMapRectangle(aux);
100
    		ViewPort vp = getMapContext().getViewPort();
101
    		ViewPort vpOrig = assoc_map.getViewPort();
142 102

  
143
            /*
144
             * Area of interest in pixels, inside ov_img image
145
             */
146
            extentPixels.setFrame(
147
                extentPixels.getMinX(), extentPixels.getMinY(),
148
                extentPixels.getWidth(), extentPixels.getHeight());
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();
149 112

  
150
            /*
151
             * Fill (gray) and perimeter (red)
152
             */
153
            ov_img_gra.setColor(new Color(100, 100, 100, 100));
154
            ov_img_gra.fillRect((int) extentPixels.getMinX(),
155
                (int) extentPixels.getMinY(),
156
                (int) extentPixels.getWidth(),
157
                (int) extentPixels.getHeight());
158
            ov_img_gra.setColor(Color.red);
159
            ov_img_gra.drawRect((int) extentPixels.getMinX(),
160
                (int) extentPixels.getMinY(),
161
                (int) extentPixels.getWidth(),
162
                (int) extentPixels.getHeight());
163
            
164
            int aoi_top = (int) extentPixels.getMinY();
165
            int aoi_bottom = (int) extentPixels.getMaxY();
166
            int aoi_left = (int) extentPixels.getMinX();
167
            int aoi_right = (int) extentPixels.getMaxX();
168
            /*
169
             * Draw vertical, horizontal lines
170
             */
171
            ov_img_gra.setColor(Color.darkGray);
172
            int cx = (int) extentPixels.getCenterX(); 
173
            int cy = (int) extentPixels.getCenterY();
174
            int maxx = vp.getImageWidth();
175
            int maxy = vp.getImageHeight();
176
            
177
            // vertical
178
            ov_img_gra.drawLine(cx, 0, cx, aoi_top);
179
            ov_img_gra.drawLine(cx, aoi_bottom, cx, maxy);
180
            // horiz
181
            ov_img_gra.drawLine(0, cy, aoi_left, cy);
182
            ov_img_gra.drawLine(aoi_right, cy, maxx, cy);
183
            
184
            /*
185
             * Semi-transparent image is ready
186
             */
113
    		/*
114
    		 * 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());
187 119

  
188
            /*
189
             * Save clip area
190
             */
191
            Rectangle2D clip = g.getClipBounds();
192
            g.setClip((int) r.getX(), (int) r.getY(), (int) r.getWidth(),
193
                (int) r.getHeight());
120
    		/*
121
    		 * Area of interest in pixels, inside ov_img image
122
    		 */
194 123

  
195
            /*
196
             * Paste resized image (with transparency)
197
             */
198
            ov_img = ov_img.getScaledInstance(
199
                (int) r.getWidth(),
200
                (int) r.getHeight(), Image.SCALE_SMOOTH);
201
            g.drawImage(ov_img, (int) r.getX(), (int) r.getY(), null);
202
            ov_img_gra.dispose();
203
            
204
            /*
205
             * Restore clip area
206
             */
207
            g.setClip((int) clip.getX(), (int) clip.getY(),
208
                (int) clip.getWidth(), (int) clip.getHeight());
209
            extent = null;
210
            // System.err.println("Dibujando FFrameOverView ...");
211
        }
212
    }
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);
213 129

  
130
    		/*
131
    		 * 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());
214 143

  
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
    		/*
149
    		 * 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();
156

  
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);
163

  
164
    		/*
165
    		 * Semi-transparent image is ready
166
    		 */
167

  
168
    		/*
169
    		 * 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());
174

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

  
181
    		/*
182
    		 * 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
    	}
193
    }
215 194
    
216
    protected void print(Graphics2D g, AffineTransform at, PrintAttributes printAttributes) {
217
        
218
        try {
219
            if (getMapContext() != null
220
                && getMapContext().getFullEnvelope() != null) {
221
                getMapContext().getViewPort().setEnvelope(
222
                    getMapContext().getFullEnvelope());
223
            }
224
        } catch (ReadException e) {
225
            ApplicationLocator.getManager().message(
226
                e.getMessage(), JOptionPane.ERROR_MESSAGE);
227
            logger.info("Error while setting full extent.", e);
228
        }
229
        refresh();
230
        
195
    protected void print(Graphics2D g, AffineTransform at, PrintAttributes printAttributes) {        
231 196
        super.print(g, at, printAttributes);
232
        
233
        drawAreaOfInterestBox(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
		}
234 205
    }
235 206
    
236 207
    public void setView(ViewDocument v) {
......
238 209
        if (fframeViewDependence == null)
239 210
            return;
240 211
        assoc_map = fframeViewDependence.getMapContext();
241
        setViewMapContext(v.getMapOverViewContext());
212
        if (v!=null) {
213
        	setViewMapContext(v.getMapOverViewContext());
214
        }
242 215
    }
216
    
217
    protected void setListeners() {
218
    	// we don't need any listener for FFrameOverview
219
    }
243 220

  
221

  
244 222
    /**
245 223
     * @see org.gvsig.app.project.documents.layout.fframes.IFFrame#getNameFFrame()
246 224
     */
......
254 232

  
255 233
    public IFFrame clone() throws CloneNotSupportedException {
256 234
        FFrameOverView frame = (FFrameOverView) super.clone();
257
        frame.setSelected(this.getSelected() != IFFrame.NOSELECT);
235
        frame.setSelected(this.isSelected());
258 236
        cloneActions(frame);
259 237
        return frame;
260 238
    }
trunk/org.gvsig.app.document.layout2.app/org.gvsig.app.document.layout2.app.mainplugin/src/main/java/org/gvsig/app/project/documents/layout/fframes/FFrameView.java
400 400
        int scale = (int) (r.getWidth() / 24);
401 401
        Font f = new Font("SansSerif", Font.PLAIN, scale);
402 402
        g.setFont(f);
403

  
403
        if (msg==null) {
404
        	msg = Messages.getText("error");
405
        }
404 406
        g.drawString(msg, (int) (r.getCenterX() - ((msg.length() * scale) / 4)),
405
            (int) (r.getCenterY()));        
407
        		(int) (r.getCenterY()));
406 408
    }
407 409

  
408 410
    /**
......
468 470
        	getMapContext().getViewPort().setImageSize(new Dimension(drawWidth, drawHeight));
469 471
        	getMapContext().getViewPort().setEnvelope(newEnvelope);
470 472
        }
473
        else {
474
        	getMapContext().getViewPort().setImageSize(new Dimension(drawWidth, drawHeight));
475
        	getMapContext().getViewPort().refreshExtent();
476
        }
471 477
        
472 478
        // map origin should be calculated using the full fframeview, as the visible position will be relative
473 479
        Point mapOrigin = new Point((int)fframeViewRect.getMinX(), (int)fframeViewRect.getMaxY());
trunk/org.gvsig.app.document.layout2.app/org.gvsig.app.document.layout2.app.mainplugin/src/main/java/org/gvsig/app/project/documents/layout/fframes/gui/dialogs/FFrameOverViewDialog.java
167 167

  
168 168
            listmodel.addViews(layoutPanel);
169 169
            
170
            // ================ Remove franmes with view = null
170
            // ================ Remove frames with view = null
171 171
            List<FFrameView> toremove = new ArrayList();
172 172
            int sz = listmodel.getSize();
173 173
            Object item = null;
......
186 186
            }
187 187
            // ================
188 188

  
189
            // /ArrayList list = listmodel.getViews();
190 189
            liVistas = new javax.swing.JList();
191 190
            liVistas.setModel(listmodel);
192 191

  
......
198 197
                    if (fframeview == fframeoverview.getFFrameDependence()[0]) {
199 198
                        liVistas.setSelectedIndex(i);
200 199
                    }
201

  
202
                    /*
203
                     * m_projectView=(ProjectView)liVistas.getModel().getElementAt
204
                     * (i);
205
                     * if
206
                     * (m_projectView.getMapContext()==fframelegend.getFMap()){
207
                     * liVistas.setSelectedIndex(i);
208
                     * }
209
                     */
210 200
                }
211 201
            }
212 202

  
......
237 227
                                    if (((FFrameView) f).getView() == fframeview
238 228
                                        .getView()) {
239 229
                                        fframeDependence = fframeview;
240
                                        // fframelegend
241
                                        // .setFFrameDependence(fframeview);
242 230
                                    }
243 231
                                }
244 232
                            }
245

  
246
                            // fframelegend.setFFrameView(fframeview);
247 233
                        }
248 234
                    }
249 235

  
......
253 239
        return liVistas;
254 240
    }
255 241

  
256
    // /**
257
    // * This method initializes liVistas
258
    // *
259
    // * @return javax.swing.JList
260
    // */
261
    // private javax.swing.JList getLiVistas() {
262
    // if (liVistas == null) {
263
    // ListViewModel listmodel = new ListViewModel();
264
    // listmodel.addViews();
265
    // liVistas = new javax.swing.JList();
266
    // liVistas.setModel(listmodel);
267
    // for (int i = 0; i < liVistas.getModel().getSize(); i++) {
268
    // if (fframeoverview.getMapContext() != null) {
269
    //
270
    // ProjectView pvaux= (ProjectView) liVistas.getModel()
271
    // .getElementAt(i);
272
    //
273
    // if (pvaux.getMapContext().equals(fframeoverview.getMapContext())) {
274
    // liVistas.setSelectedIndex(i);
275
    // m_projectView= (ProjectView) liVistas.getModel()
276
    // .getElementAt(i);
277
    // }
278
    // }
279
    // }
280
    //
281
    // liVistas.addListSelectionListener(new
282
    // javax.swing.event.ListSelectionListener() {
283
    // private int selectIndex=-1;
284
    // public void valueChanged(
285
    // javax.swing.event.ListSelectionEvent e) {
286
    // int selectInt = ((JList)e.getSource()).getSelectedIndex();
287
    // if (selectInt!=selectIndex){
288
    // selectIndex=selectInt;
289
    // if (selectIndex==-1)
290
    // return;
291
    // m_projectView = (ProjectView) liVistas.getModel()
292
    // .getElementAt(selectInt);
293
    //
294
    // // fframeview.setBoundBox(FLayoutUtilities.toSheetRect(
295
    // // rect, m_layout.getAT()));
296
    // // fframeview.setView(m_projectView);
297
    // //
298
    // // fframeview.setMapUnits(m_projectView.getMapContext()
299
    // // .getViewPort()
300
    // // .getMapUnits());
301
    // }
302
    // }
303
    // });
304
    // }
305
    //
306
    // return liVistas;
307
    // }
308

  
309 242
    /**
310 243
     * This method initializes jButton
311 244
     * 
......
326 259
                            rect, layoutPanel.getLayoutControl().getAT()));
327 260
                        newFFrameView.setRotation(getPRotation().getRotation());
328 261
                        if (fframeDependence != null) {
329
                            // newFFrameView.setName(fframeDependence.getView().getName());
330

  
331 262
                            newFFrameView.setFFrameDependence(fframeDependence);
332 263
                            newFFrameView.setView(fframeDependence.getView());
333 264

  
......
337 268
                                .toSheetRect(rect, layoutPanel
338 269
                                    .getLayoutControl().getAT()));
339 270

  
340
                            /*
341
                             * for (int i=0;i<m_layout.getFFrames().size();i++){
342
                             * IFFrame
343
                             * fframe=(IFFrame)m_layout.getFFrames().get(i);
344
                             * if (fframe instanceof FFrameScaleBar){
345
                             * if
346
                             * (((FFrameScaleBar)fframe).getFFrameView()==fframeview
347
                             * ){
348
                             * if (getJComboBox().getSelectedIndex()!=0){
349
                             * ((FFrameScaleBar)fframe).setIsFixed(true);
350
                             * ((FFrameScaleBar)fframe).setScaleView(Long.parseLong
351
                             * (getJTextField().getText()));
352
                             * }else{
353
                             * ((FFrameScaleBar)fframe).setIsFixed(false);
354
                             * }
355
                             * 
356
                             * }
357
                             * }
358
                             * 
359
                             * 
360
                             * }
361
                             */
362 271
                        }
363 272
                    } catch (CloneNotSupportedException e1) {
364 273
                        LOG.error("It is not possible clonate the object", e);
365 274
                    }
366 275

  
367 276
                    isAcepted = true;
368

  
369
                    // }else{
370
                    // isAcepted=false;
371
                    // }
372 277
                    PluginServices.getMDIManager().closeWindow(
373 278
                        FFrameOverViewDialog.this);
374 279
                    layoutPanel.getLayoutControl().setDefaultTool();

Also available in: Unified diff