Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / layout / Layout.java @ 4120

History | View | Annotate | Download (53.4 KB)

1 312 fernando
/*
2
 * Created on 20-feb-2004
3
 *
4
 */
5 1103 fjp
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
6
 *
7
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
8
 *
9
 * This program is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU General Public License
11
 * as published by the Free Software Foundation; either version 2
12
 * of the License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
22
 *
23
 * For more information, contact:
24
 *
25
 *  Generalitat Valenciana
26
 *   Conselleria d'Infraestructures i Transport
27
 *   Av. Blasco Ib??ez, 50
28
 *   46010 VALENCIA
29
 *   SPAIN
30
 *
31
 *      +34 963862235
32
 *   gvsig@gva.es
33
 *      www.gvsig.gva.es
34
 *
35
 *    or
36
 *
37
 *   IVER T.I. S.A
38
 *   Salamanca 50
39
 *   46005 Valencia
40
 *   Spain
41
 *
42
 *   +34 963163400
43
 *   dac@iver.es
44
 */
45 312 fernando
package com.iver.cit.gvsig.gui.layout;
46
47
import java.awt.Color;
48 2342 vcaballero
import java.awt.Component;
49 312 fernando
import java.awt.Cursor;
50
import java.awt.Graphics;
51
import java.awt.Graphics2D;
52
import java.awt.Image;
53
import java.awt.Point;
54
import java.awt.Rectangle;
55
import java.awt.Toolkit;
56
import java.awt.event.ActionEvent;
57
import java.awt.event.KeyEvent;
58
import java.awt.geom.AffineTransform;
59
import java.awt.geom.Rectangle2D;
60
import java.awt.image.BufferedImage;
61
import java.awt.print.PageFormat;
62
import java.awt.print.Printable;
63
import java.awt.print.PrinterException;
64
import java.awt.print.PrinterJob;
65 1406 fernando
import java.beans.PropertyChangeEvent;
66
import java.beans.PropertyChangeListener;
67 2342 vcaballero
import java.io.File;
68 312 fernando
import java.util.ArrayList;
69 396 vcaballero
import java.util.Hashtable;
70 312 fernando
71
import javax.print.Doc;
72
import javax.print.DocFlavor;
73
import javax.print.DocPrintJob;
74
import javax.print.PrintException;
75
import javax.print.PrintService;
76
import javax.print.PrintServiceLookup;
77
import javax.print.ServiceUI;
78
import javax.print.SimpleDoc;
79
import javax.print.attribute.PrintRequestAttributeSet;
80
import javax.print.event.PrintJobAdapter;
81
import javax.print.event.PrintJobEvent;
82
import javax.print.event.PrintJobListener;
83
import javax.swing.AbstractAction;
84
import javax.swing.Action;
85
import javax.swing.ImageIcon;
86 2342 vcaballero
import javax.swing.JFileChooser;
87 2475 caballero
import javax.swing.JOptionPane;
88 312 fernando
import javax.swing.JPanel;
89
import javax.swing.KeyStroke;
90 2342 vcaballero
import javax.swing.filechooser.FileFilter;
91 312 fernando
92 3106 caballero
import org.apache.log4j.Logger;
93 312 fernando
94 3106 caballero
import com.iver.andami.PluginServices;
95
import com.iver.andami.messages.NotificationManager;
96
import com.iver.andami.ui.mdiManager.SingletonView;
97
import com.iver.andami.ui.mdiManager.ViewInfo;
98
import com.iver.andami.ui.mdiManager.ViewListener;
99
import com.iver.cit.gvsig.AddLayer;
100
import com.iver.cit.gvsig.fmap.ColorEvent;
101
import com.iver.cit.gvsig.fmap.DriverException;
102
import com.iver.cit.gvsig.fmap.ExtentEvent;
103
import com.iver.cit.gvsig.fmap.ViewPortListener;
104 3548 caballero
import com.iver.cit.gvsig.fmap.core.adapter.CircleAdapter;
105
import com.iver.cit.gvsig.fmap.core.adapter.GeometryAdapter;
106
import com.iver.cit.gvsig.fmap.core.adapter.PointAdapter;
107
import com.iver.cit.gvsig.fmap.core.adapter.PolyLineAdapter;
108
import com.iver.cit.gvsig.fmap.core.adapter.PolygonAdapter;
109
import com.iver.cit.gvsig.fmap.core.adapter.RectangleAdapter;
110 4120 caballero
import com.iver.cit.gvsig.fmap.edition.commands.CommandEvent;
111
import com.iver.cit.gvsig.fmap.edition.commands.CommandListener;
112 3106 caballero
import com.iver.cit.gvsig.fmap.layers.XMLException;
113 3548 caballero
import com.iver.cit.gvsig.gui.layout.commands.DefaultEditableFeatureSource;
114
import com.iver.cit.gvsig.gui.layout.commands.EditableFeatureSource;
115 3106 caballero
import com.iver.cit.gvsig.gui.layout.dialogs.FConfigLayoutDialog;
116
import com.iver.cit.gvsig.gui.layout.fframes.FFrame;
117 3610 caballero
import com.iver.cit.gvsig.gui.layout.fframes.FFrameBox;
118 3106 caballero
import com.iver.cit.gvsig.gui.layout.fframes.FFrameGraphics;
119
import com.iver.cit.gvsig.gui.layout.fframes.FFrameGroup;
120
import com.iver.cit.gvsig.gui.layout.fframes.FFrameLegend;
121
import com.iver.cit.gvsig.gui.layout.fframes.FFrameNorth;
122
import com.iver.cit.gvsig.gui.layout.fframes.FFramePicture;
123
import com.iver.cit.gvsig.gui.layout.fframes.FFrameScaleBar;
124
import com.iver.cit.gvsig.gui.layout.fframes.FFrameText;
125
import com.iver.cit.gvsig.gui.layout.fframes.FFrameView;
126
import com.iver.cit.gvsig.gui.layout.fframes.IFFrame;
127 3548 caballero
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameEditable;
128
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameLayoutDependence;
129 3680 caballero
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameUseFMap;
130 3135 caballero
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameViewDependence;
131 3610 caballero
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameBoxDialog;
132 3106 caballero
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameGraphicsDialog;
133
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameGroupDialog;
134
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameLegendDialog;
135
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameNorthDialog;
136
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFramePictureDialog;
137
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameScaleBarDialog;
138
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameTextDialog;
139
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameViewDialog;
140
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.IFFrameDialog;
141
import com.iver.cit.gvsig.gui.project.MapProperties;
142 3185 caballero
import com.iver.cit.gvsig.gui.project.OpenException;
143
import com.iver.cit.gvsig.gui.project.SaveException;
144 3106 caballero
import com.iver.cit.gvsig.project.Project;
145
import com.iver.cit.gvsig.project.ProjectMap;
146
import com.iver.utiles.GenericFileFilter;
147
import com.iver.utiles.XMLEntity;
148
149
150 312 fernando
/**
151
 * Mapa.
152
 *
153
 * @author Vicente Caballero Navarro
154
 */
155 1074 vcaballero
public class Layout extends JPanel implements SingletonView, ViewPortListener,
156 4120 caballero
    ViewListener,CommandListener {
157 2835 caballero
    private static Logger logger = Logger.getLogger(Layout.class.getName());
158
    public static final int ZOOM_MAS = 1;
159
    public static final int ZOOM_MENOS = 2;
160
    public static final int PAN = 3;
161
    public static final int DESACTUALIZADO = 4;
162
    public static final int ACTUALIZADO = 5;
163
    public static final int SELECT = 6;
164 4120 caballero
165 2835 caballero
    public static final int RECTANGLE = 10;
166
    public static final int RECTANGLEVIEW = 11;
167
    public static final int RECTANGLEPICTURE = 12;
168
    public static final int RECTANGLESCALEBAR = 13;
169
    public static final int RECTANGLELEGEND = 14;
170
    public static final int RECTANGLETEXT = 15;
171
    public static final int RECTANGLEGROUP = 16;
172
    public static final int RECTANGLESYMBOL = 17;
173 2914 caballero
    public static final int RECTANGLENORTH = 18;
174 3610 caballero
    public static final int RECTANGLEBOX=19;
175 4120 caballero
176 2835 caballero
    public static final int GRAPHICS = 20;
177
    public static final int POINT = 21;
178
    public static final int LINE = 22;
179
    public static final int POLYLINE = 23;
180
    public static final int RECTANGLESIMPLE = 24;
181
    public static final int CIRCLE = 25;
182
    public static final int POLYGON = 26;
183 4120 caballero
184 2835 caballero
    public static final int VIEW_ZOOMIN = 30;
185
    public static final int VIEW_ZOOMOUT = 31;
186
    public static final int VIEW_FULL = 32;
187
    public static final int VIEW_PAN = 33;
188
    public static final int SET_TAG = 34;
189 4120 caballero
190 3610 caballero
    public static final int EDIT=40;
191 4120 caballero
192 2835 caballero
    public static final Image iLayoutpan = new ImageIcon(AddLayer.class.getClassLoader()
193
                                                                       .getResource("images/LayoutHand.gif")).getImage();
194
    public static final Image ipan = new ImageIcon(AddLayer.class.getClassLoader()
195
                                                                 .getResource("images/Hand.gif")).getImage();
196
    public static final Image iLayoutzoomin = new ImageIcon(AddLayer.class.getClassLoader()
197
                                                                          .getResource("images/LayoutZoomInCursor.gif")).getImage();
198
    public static final Image izoomin = new ImageIcon(AddLayer.class.getClassLoader()
199
                                                                    .getResource("images/ZoomInCursor.gif")).getImage();
200
    public static final Image iLayoutzoomout = new ImageIcon(AddLayer.class.getClassLoader()
201
                                                                           .getResource("images/LayoutZoomOutCursor.gif")).getImage();
202
    public static final Image izoomout = new ImageIcon(AddLayer.class.getClassLoader()
203
                                                                     .getResource("images/ZoomOutCursor.gif")).getImage();
204
    public static final Image iinfo = new ImageIcon(AddLayer.class.getClassLoader()
205
                                                                  .getResource("images/InfoCursor.gif")).getImage();
206
    public static final Image icrux = new ImageIcon(AddLayer.class.getClassLoader()
207
                                                                  .getResource("images/CruxCursor.png")).getImage();
208
    public static final Image itag = new ImageIcon(AddLayer.class.getClassLoader()
209
                                                                 .getResource("images/tagCursor.gif")).getImage();
210
    public static final Image iPoint = new ImageIcon(AddLayer.class.getClassLoader()
211
                                                                   .getResource("images/PointCursor.png")).getImage();
212
    public static final Image iRect = new ImageIcon(AddLayer.class.getClassLoader()
213
                                                                  .getResource("images/RectCursor.png")).getImage();
214
    public static final Image iLine = new ImageIcon(AddLayer.class.getClassLoader()
215
                                                                  .getResource("images/LineCursor.png")).getImage();
216
    public static final Image iRectangle = new ImageIcon(AddLayer.class.getClassLoader()
217
                                                                       .getResource("images/RectangleCursor.png")).getImage();
218
    public static final Image iCircle = new ImageIcon(AddLayer.class.getClassLoader()
219
                                                                    .getResource("images/CircleCursor.png")).getImage();
220
    public static final Image iPoligon = new ImageIcon(AddLayer.class.getClassLoader()
221
                                                                     .getResource("images/PoligonCursor.png")).getImage();
222
    public static Hashtable nums = new Hashtable();
223
    private Point origin = new Point(50, 50);
224
    private Point rectOrigin = new Point(origin);
225
    private Rectangle2D.Double rect = new Rectangle2D.Double(rectOrigin.x,
226
            rectOrigin.y, 400, 300);
227
    private Point m_FirstPoint = new Point(0, 0);
228
    private Point m_PointAnt = new Point(0, 0);
229
    private Point m_LastPoint = new Point(0, 0);
230
    private EventsHandler events;
231
    private int tool = ZOOM_MAS;
232
    private int status = DESACTUALIZADO;
233
    private BufferedImage img = null;
234 3680 caballero
    private BufferedImage imgRuler = null;
235 2835 caballero
    private AffineTransform m_MatrizTransf;
236
    private Rectangle2D rectVisible;
237
    private IFFrameDialog fframedialog = null;
238 3548 caballero
    ///private ArrayList m_fframes = new ArrayList();
239
    private IFFrame[] fframes;
240 2835 caballero
    private MapProperties m_propertiesLayout = null;
241
    private Attributes m_attributes = null;
242
    private PrintService[] m_cachePrintServices = null;
243
    private PrintService m_cachePrintService = null;
244
    private boolean m_bCancelDrawing = false;
245
    private boolean isCuadricula = false;
246
    private boolean initial = true;
247
    private ProjectMap map = null;
248
    private Rectangle reSel = null;
249
    private boolean isReSel = true;
250
    private boolean m_showRuler = true;
251
    private FLayoutDraw layoutDraw = null;
252
    private boolean isDrawCuadricula = true;
253
    private Doc doc = null;
254
    private PrintRequestAttributeSet att = null;
255 3548 caballero
    private GeometryAdapter geometryAdapter=new PolyLineAdapter();
256
    private DefaultEditableFeatureSource efs;
257 3369 caballero
    private boolean isEditable=true;
258 3565 fjp
    private ViewInfo m_viewinfo = new ViewInfo(ViewInfo.ICONIFIABLE |
259
            ViewInfo.MAXIMIZABLE | ViewInfo.RESIZABLE);
260
261 3043 fjp
    /**
262
     * Lo usamos cuando estamos haciendo una ficha y asignando tags
263
     * Se pone en modo debug cuando hacemos un VIEW_TAGS
264
     */
265
    private boolean bModeDebug = false;
266 4120 caballero
267 2835 caballero
    /**
268
     * Creates a new Layout object.
269
     */
270
    public Layout() {
271 3548 caballero
            efs=new DefaultEditableFeatureSource();
272
            updateFFrames();
273 2835 caballero
        this.setLayout(null);
274
        events = new EventsHandler(this);
275
        layoutDraw = new FLayoutDraw(this);
276
        addComponentListener(events);
277
        addMouseMotionListener(events);
278
        addMouseListener(events);
279 3548 caballero
        addKeyListener(events);
280 2835 caballero
        m_MatrizTransf = new AffineTransform();
281
        m_MatrizTransf.setToIdentity();
282
        this.initComponents();
283
    }
284 312 fernando
285 2835 caballero
    /**
286
     * Rellena el ProjectMap del Layout.
287
     *
288
     * @param m ProjectMap.
289
     */
290
    public void setProjectMap(ProjectMap m) {
291
        map = m;
292 3565 fjp
        this.setName(m.getName());
293 2835 caballero
        map.addPropertyChangeListener(new PropertyChangeListener() {
294
                public void propertyChange(PropertyChangeEvent evt) {
295
                    if (evt.getPropertyName().equals("name")) {
296
                        PluginServices.getMDIManager().getViewInfo(Layout.this)
297
                                      .setTitle(PluginServices.getText(this,
298
                                "Mapa") + " : " + (String) evt.getNewValue());
299
                    }
300
                }
301
            });
302
    }
303 312 fernando
304 2835 caballero
    /**
305
     * Devuelve el rect?ngulo de selecci?n por rect?ngulo.
306
     *
307
     * @return Rect?ngulo de selecci?n.
308
     */
309
    public Rectangle getReSel() {
310
        return reSel;
311
    }
312 312 fernando
313 2835 caballero
    /**
314
     * Devuelve true si se debe dibujar el rect?ngulo de selecci?n y realizar
315
     * la sellecci?n.
316
     *
317
     * @return true si se realiza la selecci?n por rect?ngulo.
318
     */
319
    public boolean isReSel() {
320
        return isReSel;
321
    }
322 312 fernando
323 2835 caballero
    /**
324
     * Rellena con true si se debe de dibujar y seleccionar por rect?ngulo de
325
     * selecci?n.
326
     *
327
     * @param b boolean.
328
     */
329
    public void setIsReSel(boolean b) {
330
        isReSel = b;
331
    }
332 312 fernando
333 2835 caballero
    /**
334
     * Devuelve true si el dibujado ha sido cancelado.
335
     *
336
     * @return true si el dibujado ha sido cancelado.
337
     */
338
    public synchronized boolean isDrawingCancelled() {
339
        return m_bCancelDrawing;
340
    }
341 312 fernando
342 2835 caballero
    /**
343
     * Pone el dibuja a cancelado o no seg?n se quiera.
344
     *
345
     * @param b true si se quiere cancelar el dibujado.
346
     */
347
    public synchronized void setCancelDrawing(boolean b) {
348
        m_bCancelDrawing = b;
349 312 fernando
350 3548 caballero
        for (int i = 0; i < getFFrames().length; i++) {
351
            IFFrame fframe = (IFFrame) getFFrame(i);
352 312 fernando
353 3680 caballero
            if (fframe instanceof IFFrameUseFMap &&
354
                    (((IFFrameUseFMap) fframe).getFMap() != null)) {
355 2835 caballero
                ////TODO((FFrameView) getFFrames().get(i)).getFMap().setCancelDrawing(b);
356
            }
357
        }
358
    }
359 312 fernando
360 2835 caballero
    /**
361
     * Obtiene el ArrayList con todos los FFrames que se han a?adido al Layout.
362
     *
363
     * @return Array con todos los fframes que contiene el Layout.
364
     */
365 3548 caballero
    public IFFrame[] getFFrames() {
366
            return fframes;
367 2835 caballero
    }
368 3548 caballero
    public IFFrame getFFrame(int i){
369
            return fframes[i];
370
    }
371
    public void updateFFrames(){
372
            fframes=efs.getFFrames();
373
    }
374 2835 caballero
    /**
375
     * Obtiene el rect que se ajusta al tama?o de la ventana, para ver el folio
376
     * entero.
377
     */
378
    public void fullRect() {
379
        rect.setRect(origin.x, origin.y, getWidth() - (origin.x * 2),
380
            getHeight() - (origin.x * 2));
381 312 fernando
382 2835 caballero
        if (m_attributes.isLandSpace()) {
383
            rect = m_attributes.getRectangleLandscape(rect, getWidth(),
384
                    getHeight());
385
        } else {
386
            rect = m_attributes.getRectanglePortrait(rect, getWidth(),
387
                    getHeight());
388
        }
389 312 fernando
390 2835 caballero
        status = DESACTUALIZADO;
391
        repaint();
392
    }
393 312 fernando
394 2835 caballero
    /**
395
     * M?todo para imprimir el Layout sin modificar la matriz de
396
     * transformaci?n.
397
     *
398
     * @param g2
399
     */
400
    public void drawLayoutPrint(Graphics2D g2) {
401
        setCancelDrawing(false);
402 312 fernando
403 2835 caballero
        setCursor(Cursor.getDefaultCursor());
404 312 fernando
405 2835 caballero
        double scale = 0;
406 312 fernando
407 2835 caballero
        ///if (rect.width > rect.height) {
408
        ///    scale = rect.width / m_attributes.m_sizePaper.getAlto() * 1;
409
        ///} else {
410
        scale = rect.height / m_attributes.m_sizePaper.getAlto() * 1;
411 312 fernando
412 2835 caballero
        ///}
413
        AffineTransform escalado = new AffineTransform();
414
        AffineTransform translacion = new AffineTransform();
415
        translacion.setToTranslation(rect.getMinX(), rect.getMinY());
416
        escalado.setToScale(scale, scale);
417
        m_MatrizTransf.setToIdentity();
418
        m_MatrizTransf.concatenate(translacion);
419
        m_MatrizTransf.concatenate(escalado);
420
        m_attributes.setDistanceUnitX(rect);
421
        m_attributes.setDistanceUnitY(rect);
422 312 fernando
423 3548 caballero
        for (int i = 0; i < getFFrames().length; i++) {
424 2835 caballero
            try {
425 3548 caballero
                ((IFFrame) getFFrame(i)).print(g2, getAT());
426 2835 caballero
            } catch (DriverException e) {
427
                NotificationManager.addError(e.getMessage(), e);
428
            }
429
        }
430 312 fernando
431 2835 caballero
        //TODO Esto es para ver el rect?ngulo que representa el folio en la impresi?n.
432
        g2.drawRect(0, 0, (int) rect.getWidth(), (int) rect.getHeight());
433
        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
434
    }
435 312 fernando
436 2835 caballero
    /**
437
     * Clip sobre el rect?ngulo visible.
438
     *
439
     * @param g2d Graphics sobre el que hacer el clip.
440
     */
441
    private void clipVisibleRect(Graphics2D g2d) {
442
        rectVisible = this.getVisibleRect();
443
        g2d.clipRect((int) rectVisible.getMinX(), (int) rectVisible.getMinY(),
444
            (int) rectVisible.getWidth(), (int) rectVisible.getHeight());
445
    }
446 312 fernando
447 2835 caballero
    /**
448
     * Inicializa los componentes.
449
     */
450
    private void initComponents() {
451
        m_attributes = new Attributes();
452
        m_attributes.setDistanceUnitX(rect);
453
        m_attributes.setDistanceUnitY(rect);
454
        actionDelFFrame();
455 2981 fjp
        setDoubleBuffered(true);
456 2835 caballero
    }
457 312 fernando
458 2835 caballero
    /**
459
     * Crea un ActionEvent para controlar las teclas que se pulsen cuando este
460
     * el Layout Focusable a true.
461
     */
462
    private void actionDelFFrame() {
463
        Action doNothing = new AbstractAction() {
464
                public void actionPerformed(ActionEvent e) {
465 3548 caballero
                   delFFrameSelected();
466
                   refresh();
467 2835 caballero
                }
468
            };
469 312 fernando
470 2835 caballero
        this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
471
            "doNothing");
472
        this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0),
473
            "doNothing");
474
        this.getActionMap().put("doNothing", doNothing);
475
    }
476 312 fernando
477 2835 caballero
    /**
478
     * paintComponent del Layout.
479
     *
480
     * @param g Graphics del Layout.
481
     */
482
    protected void paintComponent(Graphics g) {
483
        super.paintComponent(g);
484 1550 vcaballero
485 2835 caballero
        clipVisibleRect((Graphics2D) g);
486 1550 vcaballero
487 2835 caballero
        Rectangle rClip = g.getClipBounds();
488 1550 vcaballero
489 2835 caballero
        if (rClip == null) {
490
            System.err.println("clip = null");
491
        }
492 1550 vcaballero
493 2835 caballero
        switch (status) {
494
            case ZOOM_MAS:
495
                logger.debug("zoom mas");
496
                layoutDraw.drawRectangle((Graphics2D) g);
497 312 fernando
498 2835 caballero
                g.drawImage(img, 0, 0, this);
499 1550 vcaballero
500 2835 caballero
                g.setClip(rClip);
501 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
502
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
503
                g.drawImage(imgRuler,0,0,this);
504 2835 caballero
                g.setColor(Color.black);
505
                g.setXORMode(Color.white);
506 312 fernando
507 2835 caballero
                Rectangle r = new Rectangle();
508 312 fernando
509 2835 caballero
                r.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
510
                g.drawRect(r.x, r.y, r.width, r.height);
511 312 fernando
512 2835 caballero
                break;
513 312 fernando
514 2835 caballero
            case RECTANGLE:
515
                logger.debug("rectangle");
516
                layoutDraw.drawRectangle((Graphics2D) g);
517 312 fernando
518 2835 caballero
                g.drawImage(img, 0, 0, this);
519 1281 fjp
520 2835 caballero
                g.setClip(rClip);
521 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
522
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
523
                g.drawImage(imgRuler,0,0,this);
524 2835 caballero
                g.setColor(Color.black);
525
                g.setXORMode(Color.white);
526 312 fernando
527 2835 caballero
                Rectangle re = new Rectangle();
528
                re.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
529 312 fernando
530 2835 caballero
                if (isCuadricula()) {
531
                    FLayoutUtilities.setRectGrid(re,
532
                        m_attributes.getUnitInPixelsX(),
533
                        m_attributes.getUnitInPixelsY(), m_MatrizTransf);
534
                }
535 312 fernando
536 2835 caballero
                g.drawRect(re.x, re.y, re.width, re.height);
537 312 fernando
538 2835 caballero
                break;
539 312 fernando
540 2835 caballero
            case PAN:
541
                logger.debug("pan");
542 312 fernando
543 2835 caballero
                //g.setXORMode(Color.black);
544
                rect.x = rectOrigin.x + (m_LastPoint.x - m_PointAnt.x);
545
                rect.y = rectOrigin.y + (m_LastPoint.y - m_PointAnt.y);
546 312 fernando
547 2835 caballero
                //g.clearRect(0, 0, getWidth(), getHeight());
548
                layoutDraw.drawRectangle((Graphics2D) g);
549 312 fernando
550 2835 caballero
                if (img != null) {
551
                    g.drawImage(img, (getLastPoint().x - getPointAnt().x),
552 3680 caballero
                        (getLastPoint().y - getPointAnt().y), this);
553 2835 caballero
                }
554 312 fernando
555 2835 caballero
                g.setClip(rClip);
556
                layoutDraw.drawGrid((Graphics2D) g);
557
                layoutDraw.drawRuler((Graphics2D) g, Color.black);
558 3680 caballero
                //g.drawImage(imgRuler,0,0,this);
559 2835 caballero
                break;
560 312 fernando
561 2835 caballero
            case VIEW_PAN:
562 312 fernando
563 2835 caballero
                // logger.debug("View pan");
564
                layoutDraw.drawRectangle((Graphics2D) g);
565 312 fernando
566 3548 caballero
                for (int i = 0; i < getFFrames().length; i++) {
567 3680 caballero
                    if (getFFrame(i) instanceof IFFrameUseFMap) {
568
                        IFFrameUseFMap fframe = (IFFrameUseFMap) getFFrame(i);
569 312 fernando
570 3680 caballero
                        if (((IFFrame)fframe).getSelected() != IFFrame.NOSELECT) {
571
                            Rectangle2D.Double rec = ((IFFrame)fframe).getBoundingBox(getAT());
572 312 fernando
573 2835 caballero
                            if (img != null) {
574
                                //g.drawImage(img, 0, 0, this);
575
                                rec = (Rectangle2D.Double) rec.createIntersection(getVisibleRect());
576 312 fernando
577 2835 caballero
                                //((Graphics2D)g).clearRect((int)rec.x,(int)rec.y,(int)rec.width,(int)rec.height);
578
                            }
579 312 fernando
580 2835 caballero
                            if (fframe.getBufferedImage() != null) {
581
                                layoutDraw.drawHandlers((Graphics2D) g,
582
                                    Color.black);
583
                                g.clipRect((int) rec.x, (int) rec.y,
584
                                    (int) rec.width, (int) rec.height);
585 312 fernando
586 2835 caballero
                                //g.setColor(Color.gray);
587
                                //g.fillRect(0,0,getWidth(),getHeight());
588
                                layoutDraw.drawRectangle((Graphics2D) g);
589
                                layoutDraw.drawRuler((Graphics2D) g, Color.black);
590 3680 caballero
                                Rectangle2D.Double r1=((IFFrame)fframe).getBoundingBox(getAT());
591
                                g.drawImage(fframe.getBufferedImage(),(int)
592
                                    r1.getX()+m_LastPoint.x - m_PointAnt.x,
593
                                    (int)r1.getY()+m_LastPoint.y - m_PointAnt.y, this);
594 312 fernando
595 3680 caballero
                               fframe.refresh();
596 2835 caballero
                            }
597
                        }
598
                    }
599
                }
600 1550 vcaballero
601 2835 caballero
                g.setClip(rClip);
602 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
603
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
604
                g.drawImage(imgRuler,0,0,this);
605 4120 caballero
606 2835 caballero
                break;
607 312 fernando
608 2835 caballero
            case SELECT:
609
                logger.debug("select");
610
                layoutDraw.drawRectangle((Graphics2D) g);
611 312 fernando
612 2835 caballero
                g.drawImage(img, 0, 0, this);
613 312 fernando
614 2835 caballero
                if (isReSel) {
615
                    reSel = new Rectangle();
616
                    reSel.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
617
                    g.drawRect(reSel.x, reSel.y, reSel.width, reSel.height);
618
                }
619 3548 caballero
                IFFrame[] frames=getFFrameSelected();
620
                for (int i = 0; i < frames.length; i++) {
621
                    //IFFrame fframe = (IFFrame) getFFrames().get(i);
622 312 fernando
623 3548 caballero
                    //if (fframe.getSelected() != IFFrame.NOSELECT) {
624 2835 caballero
                        g.setColor(Color.black);
625 3548 caballero
                        frames[i].drawHandlers((Graphics2D) g);
626 312 fernando
627 2835 caballero
                        int difx = (m_LastPoint.x - m_FirstPoint.x);
628
                        int dify = (m_LastPoint.y - m_FirstPoint.y);
629 3548 caballero
                       // System.out.println(m_FirstPoint);
630
                       // System.out.println(m_LastPoint);
631 2835 caballero
                        if ((Math.abs(difx) > 3) || (Math.abs(dify) > 3)) {
632 3548 caballero
                            Rectangle2D rectangle = frames[i].getMovieRect(difx,
633 2835 caballero
                                    dify);
634
                            ((Graphics2D) g).rotate(Math.toRadians(
635 3548 caballero
                                    frames[i].getRotation()),
636 2835 caballero
                                rectangle.getX() + (rectangle.getWidth() / 2),
637
                                rectangle.getY() + (rectangle.getHeight() / 2));
638 2342 vcaballero
639 2835 caballero
                            if (rectangle != null) {
640
                                if (isCuadricula) {
641
                                    FLayoutUtilities.setRectGrid(rectangle,
642
                                        m_attributes.getUnitInPixelsX(),
643
                                        m_attributes.getUnitInPixelsY(),
644
                                        m_MatrizTransf);
645
                                }
646 4120 caballero
647 2835 caballero
                                g.drawRect((int) rectangle.getMinX(),
648
                                    (int) rectangle.getMinY(),
649
                                    (int) rectangle.getWidth(),
650
                                    (int) rectangle.getHeight());
651
                            }
652 2342 vcaballero
653 2835 caballero
                            ((Graphics2D) g).rotate(Math.toRadians(
654 3548 caballero
                                    -frames[i].getRotation()),
655 2835 caballero
                                rectangle.getX() + (rectangle.getWidth() / 2),
656
                                rectangle.getY() + (rectangle.getHeight() / 2));
657
                        }
658 3548 caballero
                    //}
659 2835 caballero
                }
660 1550 vcaballero
661 2835 caballero
                g.setClip(rClip);
662 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
663
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
664
                g.drawImage(imgRuler,0,0,this);
665 312 fernando
666 2835 caballero
                break;
667 3548 caballero
             case GRAPHICS:
668 3680 caballero
                    logger.debug("graphics");
669 2835 caballero
                layoutDraw.drawRectangle((Graphics2D) g);
670
                g.drawImage(img, 0, 0, this);
671
                g.setClip(rClip);
672 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
673 3576 caballero
                layoutDraw.drawHandlers((Graphics2D) g, Color.black);
674 3680 caballero
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
675 4120 caballero
676 3548 caballero
                if (getTool()==EDIT){
677
                        IFFrame[] fframeSelect=getFFrameSelected();
678
                        for(int i=0;i<fframeSelect.length;i++){
679
                                if (fframeSelect[i] instanceof IFFrameEditable){
680
                                        ((IFFrameEditable)fframeSelect[i]).paint((Graphics2D)g,getAT());
681
                                }
682
                        }
683
                }else{
684 3680 caballero
                        geometryAdapter.paint((Graphics2D)g,getAT(),true);
685 3548 caballero
                }
686 3680 caballero
                g.drawImage(imgRuler,0,0,this);
687 2835 caballero
                break;
688 312 fernando
689 2835 caballero
            case DESACTUALIZADO:
690
                logger.debug("desactualizado");
691
                img = new BufferedImage(getWidth(), getHeight(),
692
                        BufferedImage.TYPE_INT_ARGB);
693 3680 caballero
                imgRuler = new BufferedImage(getWidth(), getHeight(),
694
                        BufferedImage.TYPE_INT_ARGB);
695 2835 caballero
                Graphics gimag = img.getGraphics();
696 3680 caballero
                Graphics gimgRuler = imgRuler.getGraphics();
697 4120 caballero
698 2835 caballero
                clipVisibleRect((Graphics2D) gimag);
699 1550 vcaballero
700 2835 caballero
                if (initial) {
701
                    fullRect();
702
                    initial = false;
703
                }
704 4120 caballero
705 2835 caballero
                try {
706
                    layoutDraw.drawLayout((Graphics2D) gimag, img);
707
                } catch (DriverException e) {
708
                    e.printStackTrace();
709
                }
710 312 fernando
711 2835 caballero
                g.setClip(rClip);
712
                layoutDraw.drawRectangle((Graphics2D) g);
713 312 fernando
714 2835 caballero
                g.drawImage(img, 0, 0, this);
715
                g.setClip(rClip);
716 4120 caballero
717 2835 caballero
                layoutDraw.drawHandlers((Graphics2D) g, Color.black);
718 3680 caballero
                layoutDraw.drawGrid((Graphics2D) gimgRuler);
719
                layoutDraw.drawRuler((Graphics2D) gimgRuler, Color.black);
720
                g.drawImage(imgRuler,0,0,this);
721 4120 caballero
722 2835 caballero
                break;
723 312 fernando
724 2835 caballero
            case ACTUALIZADO:
725 3548 caballero
                    logger.debug("actualizado");
726 2835 caballero
                layoutDraw.drawRectangle((Graphics2D) g);
727 1281 fjp
728 2835 caballero
                g.drawImage(img, 0, 0, this);
729 1550 vcaballero
730 2835 caballero
                g.setClip(rClip);
731 3680 caballero
                //layoutDraw.drawGrid((Graphics2D) g);
732 312 fernando
733 2835 caballero
                layoutDraw.drawHandlers((Graphics2D) g, Color.black);
734 3680 caballero
                //layoutDraw.drawRuler((Graphics2D) g, Color.black);
735
                g.drawImage(imgRuler,0,0,this);
736 2835 caballero
        }
737
    }
738 312 fernando
739 2835 caballero
    /**
740
     * A?ade un fframe al Arraylist m_fframes.
741
     *
742
     * @param frame fframe a a?adir.
743
     * @param clearSelection para que se quede seleccionado ?nicamente  el que
744
     *        a?adimos y false si lo que se pretende es que no se
745
     *        deseleccionen lo que ya est?n seleccionados.
746 2846 caballero
     * @param select Booleano que indica si se tiene que quedar seleccionado el
747
     *        FFrame que se a?ade o no.
748 2835 caballero
     */
749
    public void addFFrame(IFFrame frame, boolean clearSelection, boolean select) {
750
        if (clearSelection) {
751 3548 caballero
            for (int i = getFFrames().length - 1; i >= 0; i--) {
752
                IFFrame fframe1 = (IFFrame) getFFrame(i);
753 2835 caballero
                fframe1.setSelected(false);
754
            }
755
        }
756 312 fernando
757 2835 caballero
        /*if (frame instanceof FFrameView &&
758
           (((FFrameView) frame).getFMap() != null)) {
759
           ((FFrameView) frame).getFMap().getViewPort().addViewPortListener(this);
760
           }
761
         */
762
        if (nums.containsKey(frame.getClass())) {
763
            nums.put(frame.getClass(),
764
                new Integer(Integer.parseInt(nums.get(frame.getClass())
765
                                                 .toString()) + 1));
766
        } else {
767
            nums.put(frame.getClass(), new Integer(0));
768
        }
769 312 fernando
770 2835 caballero
        frame.setNum(Integer.parseInt(nums.get(frame.getClass()).toString()));
771 3548 caballero
        efs.addFFrame(frame);
772
        ///getFFrames().add(frame);
773 2835 caballero
        frame.setSelected(select);
774 3548 caballero
        updateFFrames();
775 2835 caballero
    }
776 312 fernando
777 2835 caballero
    /**
778
     * Abre el di?logo de propiedades del folio, pasando como par?metro el
779
     * PrinterJob.
780
     *
781
     * @param job
782
     */
783
    public void showPagePropertiesWindow(PrinterJob job) {
784
        PageFormat pf1; //=new PageFormat();
785 312 fernando
786 2835 caballero
        pf1 = m_attributes.getPageFormat();
787
        pf1 = job.pageDialog(pf1);
788
        m_attributes.setPageFormat(pf1);
789
        refresh();
790
    }
791 312 fernando
792 2835 caballero
    /**
793
     * Refresca el Layout.
794
     */
795
    public void refresh() {
796
        //rect = m_attributes.obtainRect(false, rect, getWidth(), getHeight());
797
        setStatus(DESACTUALIZADO);
798
        repaint();
799
    }
800 312 fernando
801 2835 caballero
    /**
802
     * Obtiene el rect?ngulo que representa el folio con las caracter?sticas
803
     * que contiene attributes y diferenciando si es para visualizar en
804
     * pantalla o para imprimir.
805
     *
806
     * @param isPrint si es para imprimir.
807
     */
808
    public void obtainRect(boolean isPrint) {
809
        m_attributes.obtainRect(isPrint, rect, getWidth(), getHeight());
810
    }
811 312 fernando
812 2835 caballero
    /**
813
     * Muestra el di?logo de configuraci?n del Layout.
814
     */
815
    public void showFConfig() {
816
        FConfigLayoutDialog m_configLayout = new FConfigLayoutDialog(this);
817
        PluginServices.getMDIManager().addView(m_configLayout);
818
    }
819 312 fernando
820 2835 caballero
    /**
821
     * Mestra el di?logo de propiedades del Layout.
822
     */
823
    public void showFProperties() {
824
        if (map == null) {
825
            map = new ProjectMap();
826
            map.setModel(this);
827
            map.setName(getName());
828
        }
829 312 fernando
830 2835 caballero
        m_propertiesLayout = new MapProperties(map);
831
        PluginServices.getMDIManager().addView(m_propertiesLayout);
832
    }
833 312 fernando
834 2835 caballero
    /**
835
     * Muestra el di?logo de imprimir pasandole el printerJob como par?metro.
836
     *
837
     * @param job
838
     */
839
    public void showPrintDialog(PrinterJob job) {
840
        if (job != null) {
841
            job.printDialog();
842 312 fernando
843 2835 caballero
            try {
844
                job.setPrintable((Printable) PluginServices.getExtension(
845
                        com.iver.cit.gvsig.Print.class));
846
                job.print();
847
            } catch (PrinterException e) {
848
                e.printStackTrace();
849
            }
850
        } else {
851
            //Actualizar attributes
852
            att = m_attributes.toPrintAttributes();
853 312 fernando
854 2835 caballero
            //------------------ The Printing things --------------------- //
855
            DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
856 312 fernando
857 2835 caballero
            // returns the set of printers that support printing a specific document type (such as GIF)
858
            // with a specific set of attributes (such as two sided).
859
            // PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
860
            // interestingly, the printer dialog's default behavior has changed with the new API: by default the dialog is not shown.
861
            // So we must use the ServiceUI class to create a print dialog
862
            // returns the default print service.
863
            if (m_cachePrintServices == null) {
864
                m_cachePrintServices = PrintServiceLookup.lookupPrintServices(flavor,
865
                        null);
866
            }
867 312 fernando
868 2835 caballero
            PrintService defaultService = null;
869 312 fernando
870 2835 caballero
            if (m_cachePrintService == null) {
871
                defaultService = PrintServiceLookup.lookupDefaultPrintService();
872
            }
873 312 fernando
874 2835 caballero
            if ((defaultService == null) && (m_cachePrintService == null)) {
875
                JOptionPane.showMessageDialog((Component) PluginServices.getMainFrame(),
876
                    "ninguna_impresora_configurada");
877 312 fernando
878 2835 caballero
                return;
879
            }
880 312 fernando
881 2835 caballero
            if (m_cachePrintService == null) {
882
                m_cachePrintService = ServiceUI.printDialog(null, 200, 200,
883
                        m_cachePrintServices, defaultService, flavor, att);
884 312 fernando
885 2835 caballero
                // m_cachePrintRequestAtributeSet = new HashPrintRequestAttributeSet();
886
                // m_cachePrintRequestAtributeSet.addAll(pras);
887
            } else {
888
                m_cachePrintService = ServiceUI.printDialog(null, 200, 200,
889
                        m_cachePrintServices, m_cachePrintService, flavor, att);
890
            }
891 312 fernando
892 2835 caballero
            if (m_cachePrintService != null) {
893
                DocPrintJob jobNuevo = m_cachePrintService.createPrintJob();
894
                PrintJobListener pjlistener = new PrintJobAdapter() {
895
                        public void printDataTransferCompleted(PrintJobEvent e) {
896
                            System.out.println("Fin de impresi?n");
897
                            fullRect();
898
                        }
899
                    };
900 312 fernando
901 2835 caballero
                jobNuevo.addPrintJobListener(pjlistener);
902 312 fernando
903 2835 caballero
                // DocAttributeSet das = new HashDocAttributeSet();
904
                doc = new SimpleDoc((Printable) PluginServices.getExtension(
905
                            com.iver.cit.gvsig.Print.class), flavor, null);
906 312 fernando
907 2835 caballero
                try {
908
                    jobNuevo.print(doc, att);
909 312 fernando
910 2835 caballero
                    // m_attributes.
911
                } catch (PrintException pe) {
912
                    pe.printStackTrace();
913
                }
914
            }
915
        }
916 312 fernando
917 2835 caballero
        /* try {
918
           print = job.printDialog(att);
919
           } catch (Exception e) {
920
               logger.error("Abriendo el Di?logo de imprimir"); //System.out.println("Excepci?n "+e);
921
           }
922
           if (print) {
923
               job.setPrintable((Printable) App.instance.getPc().getExtension(com.iver.cit.gvsig.Print.class));
924
               try {
925
                   job.print(att);
926
               } catch (Exception ex) {
927
                   ex.printStackTrace();
928
               }
929
           } */
930
    }
931 312 fernando
932 2835 caballero
    /**
933
     * Sustituye el puntero del rat?n por la imagen que se le pasa como
934
     * par?metro.
935
     *
936
     * @param image
937
     */
938
    public void setMapCursor(Image image) {
939
        Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(image,
940
                new Point(16, 16), "");
941
        setCursor(cur);
942
    }
943 312 fernando
944 2835 caballero
    /**
945
     * Cambia el puntero del raton al cusor que se le introduce como par?metro.
946
     *
947
     * @param cursor cursor a mostrar en el puntero del rat?n.
948
     */
949
    public void setMapCursor(Cursor cursor) {
950
        setCursor(cursor);
951
    }
952 312 fernando
953 2835 caballero
    /**
954
     * Pone como seleccionada a la herramienta a partir de su n?mero.
955
     *
956
     * @param i
957
     */
958
    public void setTool(int i) {
959
        tool = i;
960 312 fernando
961 2835 caballero
        if (getTool() == PAN) {
962
            setMapCursor(ipan);
963
        } else if (getTool() == ZOOM_MAS) {
964
            setMapCursor(izoomin);
965
        } else if (getTool() == ZOOM_MENOS) {
966
            setMapCursor(izoomout);
967
        } else if (getTool() == RECTANGLEVIEW) {
968
            setMapCursor(icrux);
969
        } else if (getTool() == RECTANGLEPICTURE) {
970
            setMapCursor(icrux);
971
        } else if (getTool() == RECTANGLESCALEBAR) {
972
            setMapCursor(icrux);
973
        } else if (getTool() == RECTANGLELEGEND) {
974
            setMapCursor(icrux);
975
        } else if (getTool() == RECTANGLETEXT) {
976
            setMapCursor(icrux);
977 2914 caballero
        } else if (getTool() == RECTANGLENORTH) {
978
            setMapCursor(icrux);
979 3610 caballero
        } else if (getTool() == RECTANGLEBOX) {
980
            setMapCursor(icrux);
981 2835 caballero
        } else if (getTool() == SELECT) {
982
            setCursor(Cursor.getDefaultCursor());
983
        } else if (getTool() == SET_TAG) {
984
            setMapCursor(itag);
985
        } else if (getTool() == POINT) {
986
            setMapCursor(iPoint);
987
        } else if (getTool() == LINE) {
988 3548 caballero
            setMapCursor(iRect);
989 2835 caballero
        } else if (getTool() == RECTANGLESIMPLE) {
990
            setMapCursor(iRectangle);
991
        } else if (getTool() == POLYLINE) {
992
            setMapCursor(iLine);
993
        } else if (getTool() == POLYGON) {
994
            setMapCursor(iPoligon);
995
        } else if (getTool() == CIRCLE) {
996
            setMapCursor(iCircle);
997 4120 caballero
        }
998 3548 caballero
        if (getTool() == EDIT){
999
                setMapCursor(icrux);
1000
                startEdit();
1001
        }else{
1002
                stopEdit();
1003 2835 caballero
        }
1004 3548 caballero
        initGeometryAdapter();
1005 2835 caballero
    }
1006 312 fernando
1007 2835 caballero
    /**
1008
     * Se crean aqu? los dialogos cada vez que se necesitan.
1009
     *
1010
     * @param fframe Rectangle que representa el lugar que ocupara el elemento
1011
     *        a?adido.
1012
     *
1013
     * @return true si se debe de a?adir el fframe.
1014
     */
1015
    public boolean openFFrameDialog(IFFrame fframe) {
1016
        switch (tool) {
1017
            case RECTANGLEVIEW:
1018
                fframedialog = new FFrameViewDialog(this, (FFrameView) fframe);
1019 312 fernando
1020 2835 caballero
                break;
1021 312 fernando
1022 2835 caballero
            case RECTANGLEPICTURE:
1023
                fframedialog = new FFramePictureDialog(this,
1024
                        (FFramePicture) fframe);
1025 312 fernando
1026 2835 caballero
                break;
1027 312 fernando
1028 2835 caballero
            case RECTANGLESCALEBAR:
1029
                fframedialog = new FFrameScaleBarDialog(this,
1030
                        (FFrameScaleBar) fframe);
1031 312 fernando
1032 2835 caballero
                break;
1033 312 fernando
1034 2835 caballero
            case RECTANGLELEGEND:
1035
                fframedialog = new FFrameLegendDialog(this,
1036
                        (FFrameLegend) fframe);
1037 312 fernando
1038 2835 caballero
                break;
1039 396 vcaballero
1040 2835 caballero
            case RECTANGLETEXT:
1041
                fframedialog = new FFrameTextDialog(this, (FFrameText) fframe);
1042 312 fernando
1043 2835 caballero
                break;
1044 312 fernando
1045 2835 caballero
            case GRAPHICS:
1046
                fframedialog = new FFrameGraphicsDialog(this,
1047
                        (FFrameGraphics) fframe);
1048 312 fernando
1049 2835 caballero
                break;
1050 312 fernando
1051 2835 caballero
            case RECTANGLEGROUP:
1052
                fframedialog = new FFrameGroupDialog(this, (FFrameGroup) fframe);
1053 312 fernando
1054 2835 caballero
                break;
1055 2914 caballero
            case RECTANGLENORTH:
1056
                fframedialog = new FFrameNorthDialog(this, (FFrameNorth) fframe);
1057 312 fernando
1058 2914 caballero
                break;
1059 3610 caballero
            case RECTANGLEBOX:
1060
                fframedialog = new FFrameBoxDialog(this, (FFrameBox) fframe);
1061
1062
                break;
1063 2835 caballero
            default:
1064
                return true;
1065
        }
1066 312 fernando
1067 2835 caballero
        if (fframedialog != null) {
1068
            fframedialog.setRectangle(fframe.getBoundingBox(m_MatrizTransf));
1069
            PluginServices.getMDIManager().addView(fframedialog);
1070
        }
1071 312 fernando
1072 2835 caballero
        return fframedialog.getIsAcepted();
1073
    }
1074 312 fernando
1075 2835 caballero
    /**
1076
     * Devuelve el Rectangle2D que representa en pixels al folio.
1077
     *
1078
     * @return Rectangle2D.Double
1079
     */
1080
    public Rectangle2D.Double getRect() {
1081
        return rect;
1082
    }
1083 312 fernando
1084 2835 caballero
    /**
1085
     * Obtiene un entero que representa la herramienta seleccionada.
1086
     *
1087
     * @return entero.
1088
     */
1089
    public int getTool() {
1090
        return tool;
1091
    }
1092 312 fernando
1093 2835 caballero
    /**
1094
     * Devuelve la Matriz transformada que se esta plicando al Layout.
1095
     *
1096
     * @return AffineTransform
1097
     */
1098
    public AffineTransform getAT() {
1099
        return m_MatrizTransf;
1100
    }
1101 312 fernando
1102 2835 caballero
    /**
1103
     * Devuelve los atributos del Mapa.
1104
     *
1105
     * @return Attributes.
1106
     */
1107
    public Attributes getAtributes() {
1108
        return m_attributes;
1109
    }
1110 312 fernando
1111 2835 caballero
    /**
1112
     * Pone el estado que se quiera.
1113
     *
1114
     * @param s estado.
1115
     */
1116
    public void setStatus(int s) {
1117
        status = s;
1118
    }
1119 312 fernando
1120 2835 caballero
    /**
1121
     * Devuelve el punto que representa la esquina noroeste del mapa.
1122
     *
1123
     * @return un punto.
1124
     */
1125
    public Point getRectOrigin() {
1126
        return rectOrigin;
1127
    }
1128 312 fernando
1129 2835 caballero
    /**
1130
     * Devuelve el punto del primer click de rat?n.
1131
     *
1132
     * @return un punto.
1133
     */
1134
    public Point getFirstPoint() {
1135
        return m_FirstPoint;
1136
    }
1137 312 fernando
1138 2835 caballero
    /**
1139
     * Devuelve el punto de click de rat?n anterior.
1140
     *
1141
     * @return un punto.
1142
     */
1143
    public Point getPointAnt() {
1144
        return m_PointAnt;
1145
    }
1146 312 fernando
1147 2835 caballero
    /**
1148
     * Devuelve el punto donde se solt? el bot?n del rat?n.
1149
     *
1150
     * @return un punto.
1151
     */
1152
    public Point getLastPoint() {
1153
        return m_LastPoint;
1154
    }
1155 312 fernando
1156 2835 caballero
    /**
1157
     * Rellena el primer punto de click de rat?n.
1158
     *
1159
     * @param p punto.
1160
     */
1161
    public void setFirstPoint(Point p) {
1162
        m_FirstPoint = p;
1163
    }
1164 312 fernando
1165 2835 caballero
    /**
1166
     * Rellena el punto de click de rat?n anterior.
1167
     *
1168
     * @param p punto.
1169
     */
1170
    public void setPointAnt(Point p) {
1171
        m_PointAnt = p;
1172
    }
1173 312 fernando
1174 2835 caballero
    /**
1175
     * Rellena el punto donde se solto el bot?n del rat?n.
1176
     *
1177
     * @param p punto.
1178
     */
1179
    public void setLastPoint(Point p) {
1180
        m_LastPoint = p;
1181
    }
1182 312 fernando
1183 2835 caballero
    /**
1184
     * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
1185
     */
1186
    public ViewInfo getViewInfo() {
1187
        m_viewinfo.setWidth(500);
1188
        m_viewinfo.setHeight(400);
1189 312 fernando
1190 2835 caballero
        m_viewinfo.setTitle(PluginServices.getText(this, "Mapa") + " : " +
1191
            getName());
1192 312 fernando
1193 2835 caballero
        return m_viewinfo;
1194
    }
1195 312 fernando
1196 2835 caballero
    /**
1197
     * Inserta si se muestra o no la regla del Layout.
1198
     *
1199
     * @param b True si se muestra la regla.
1200
     */
1201
    public void setRuler(boolean b) {
1202
        m_showRuler = b;
1203
    }
1204 312 fernando
1205 2835 caballero
    /**
1206
     * Devuelve si se muestra la regla del Layout.
1207
     *
1208
     * @return True si se muestra la regla.
1209
     */
1210
    public boolean getRuler() {
1211
        return m_showRuler;
1212
    }
1213 312 fernando
1214 2835 caballero
    /**
1215
     * Devuelve si se esta aplicando en los fframes que se a?den al Layout la
1216
     * cuadr?cula, o no.
1217
     *
1218
     * @return true si se esta aplicando la cuadr?cula.
1219
     */
1220
    public boolean isCuadricula() {
1221
        return isCuadricula;
1222
    }
1223 312 fernando
1224 2835 caballero
    /**
1225
     * Se actualiza el estado de la cuadr?cula, si se aplica o no.
1226
     *
1227
     * @param b true si se aplica la cuadr?cula.
1228
     */
1229
    public void setIsCuadricula(boolean b) {
1230
        isCuadricula = b;
1231
    }
1232 312 fernando
1233 2835 caballero
    /**
1234
     * Realiza una exteni?n completa de las capas que contiene la vista del
1235
     * FFrameView.
1236
     *
1237
     * @throws DriverException
1238
     */
1239
    public void viewFull() throws DriverException {
1240 3548 caballero
        for (int i = 0; i < getFFrames().length; i++) {
1241 3680 caballero
            if (getFFrame(i) instanceof IFFrameUseFMap) {
1242
                IFFrameUseFMap fframe = (IFFrameUseFMap) getFFrame(i);
1243 312 fernando
1244 3680 caballero
                if ((((IFFrame)fframe).getSelected() != IFFrame.NOSELECT) &&
1245
                        (fframe.getFMap() != null)) {
1246 2835 caballero
                    fframe.getFMap().getViewPort().setExtent(fframe.getFMap()
1247
                                                                   .getFullExtent());
1248
                }
1249 3680 caballero
                fframe.refresh();
1250 2835 caballero
            }
1251
        }
1252 312 fernando
1253 2835 caballero
        setStatus(DESACTUALIZADO);
1254
        repaint();
1255
    }
1256 312 fernando
1257 2835 caballero
    /**
1258
     * Devuelve un Objeto XMLEntity con la informaci?n los atributos necesarios
1259
     * para poder despu?s volver a crear el objeto original.
1260
     *
1261
     * @return XMLEntity.
1262
     *
1263
     * @throws XMLException
1264
     */
1265 3185 caballero
    public XMLEntity getXMLEntity() {
1266 3548 caballero
            //getEFS().compact();
1267 2835 caballero
        XMLEntity xml = new XMLEntity();
1268
        xml.putProperty("className", this.getClass().getName());
1269
        xml.setName("layout");
1270
        xml.putProperty("isCuadricula", isCuadricula());
1271
        xml.putProperty("m_name", this.getName());
1272 3369 caballero
        xml.putProperty("isEditable",isEditable);
1273 2835 caballero
        xml.addChild(getAtributes().getXMLEntity());
1274 4120 caballero
1275 3548 caballero
        for (int i = 0; i < getFFrames().length; i++) {
1276 3185 caballero
                try{
1277 3548 caballero
                        XMLEntity xmlAux=((IFFrame) getFFrame(i)).getXMLEntity();
1278 3106 caballero
                        xmlAux.putProperty("level",i);
1279
                        xml.addChild(xmlAux);
1280 3185 caballero
                }catch (SaveException e) {
1281
                            e.showError();
1282
                    }
1283 3103 caballero
        }
1284 2835 caballero
        return xml;
1285
    }
1286
    /**
1287
     * Crea un Objeto de esta clase a partir de la informaci?n del XMLEntity.
1288
     *
1289
     * @param xml XMLEntity
1290
     * @param p Proyecto.
1291
     *
1292
     * @return Objeto de esta clase.
1293 4120 caballero
     * @throws OpenException
1294 2835 caballero
     */
1295 3185 caballero
    public static Layout createLayout(XMLEntity xml,Project p) throws OpenException {
1296 2835 caballero
        Layout layout = new Layout();
1297 3185 caballero
        try{
1298 2835 caballero
        layout.isCuadricula = xml.getBooleanProperty("isCuadricula");
1299
        layout.setName(xml.getStringProperty("m_name"));
1300
        layout.m_attributes = Attributes.createAtributes(xml.getChild(0));
1301 3548 caballero
         if (xml.contains("isEditable")){
1302 3369 caballero
                layout.setEditable(xml.getBooleanProperty("isEditable"));
1303
        }
1304 3548 caballero
        layout.getEFS().startComplexCommand();
1305 2835 caballero
        for (int i = 1; i < xml.getNumChild(); i++) {
1306 3185 caballero
                    try {
1307
                                        layout.addFFrame(FFrame.createFFrame(xml.getChild(i),p),
1308
                                            true, false);
1309
                                } catch (OpenException e) {
1310
                                        e.showError();
1311
                                }
1312 2835 caballero
        }
1313 3548 caballero
        layout.getEFS().endComplexCommand();
1314 3135 caballero
        IFFrame[] fframes=layout.getAllFFrames();
1315
        for (int i=0;i<fframes.length;i++){
1316 3548 caballero
                if (fframes[i] instanceof IFFrameLayoutDependence){
1317
                        ((IFFrameLayoutDependence)fframes[i]).setLayout(layout);
1318 3185 caballero
                }
1319 3135 caballero
                if (fframes[i] instanceof IFFrameViewDependence){
1320
                        ((IFFrameViewDependence)fframes[i]).initDependence(fframes);
1321
                }
1322
        }
1323 3185 caballero
        }catch(Exception e){
1324
                        throw new OpenException(e,layout.getClass().getName());
1325
                }
1326
       return layout;
1327 2835 caballero
    }
1328 312 fernando
1329 2835 caballero
    /**
1330
     * Crea un Objeto de esta clase a partir de la informaci?n del XMLEntity.
1331
     *
1332
     * @param xml XMLEntity
1333
     * @param p Proyecto.
1334
     *
1335
     * @return Objeto de esta clase.
1336
     */
1337
    public static Layout createLayout03(XMLEntity xml, Project p) {
1338
        Layout layout = new Layout();
1339
        layout.isCuadricula = xml.getBooleanProperty("isCuadricula");
1340
        layout.setName(xml.getStringProperty("m_name"));
1341
        layout.m_attributes = Attributes.createAtributes03(xml.getChild(0));
1342 312 fernando
1343 2835 caballero
        for (int i = 1; i < xml.getNumChild(); i++) {
1344
            if (xml.getChild(i).getStringProperty("className").equals("com.iver.cit.gvsig.gui.layout.fframe.FFrameView")) {
1345
                layout.addFFrame(FFrame.createFFrame03(xml.getChild(i), layout,
1346
                        p), true, false);
1347
            }
1348
        }
1349 312 fernando
1350 2835 caballero
        for (int i = 1; i < xml.getNumChild(); i++) {
1351
            if (!xml.getChild(i).getStringProperty("className").equals("com.iver.cit.gvsig.gui.layout.fframe.FFrameView")) {
1352
                layout.addFFrame(FFrame.createFFrame03(xml.getChild(i), layout,
1353
                        p), true, false);
1354
            }
1355
        }
1356 312 fernando
1357 2835 caballero
        return layout;
1358
    }
1359 362 vcaballero
1360 2835 caballero
    /**
1361
     * @see com.iver.mdiApp.ui.MDIManager.View#viewActivated()
1362
     */
1363
    public void viewActivated() {
1364
        repaint();
1365
        PluginServices.getMainFrame().getStatusBar().setMessage("1",
1366
            getAtributes().getNameUnit());
1367 899 vcaballero
1368 2835 caballero
        ///System.out.println("---------- 1 "+ getAtributes().getNameUnit());
1369
    }
1370 961 vcaballero
1371 2835 caballero
    /**
1372
     * @see com.iver.mdiApp.ui.MDIManager.SingletonView#getViewModel()
1373
     */
1374
    public Object getViewModel() {
1375
        return map;
1376
    }
1377 1550 vcaballero
1378 2835 caballero
    /**
1379
     * Devuelve si se dibuja el Grid en el Layout o no.
1380
     *
1381
     * @return True si se dibuja el Grid en el Layout.
1382
     */
1383
    public boolean getIsDrawGrid() {
1384
        return isDrawCuadricula;
1385
    }
1386 1550 vcaballero
1387 2835 caballero
    /**
1388
     * Inserta si se muestra el Grid del Layout.
1389
     *
1390
     * @param b True si se muestra el Grid del Layout.
1391
     */
1392
    public void setIsDrawGrid(boolean b) {
1393
        isDrawCuadricula = b;
1394
    }
1395 1210 vcaballero
1396 2835 caballero
    /**
1397
     * @see com.iver.cit.gvsig.fmap.ExtentListener#extentChanged(com.iver.cit.gvsig.fmap.ExtentEvent)
1398
     */
1399
    public void extentChanged(ExtentEvent e) {
1400
    }
1401 1550 vcaballero
1402 2835 caballero
    /**
1403
     * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
1404
     */
1405
    public void viewClosed() {
1406
        ///PluginServices.getMainFrame().getStatusBar().setMessage("1","");
1407
    }
1408 2342 vcaballero
1409 2835 caballero
    /**
1410
     * @see com.iver.cit.gvsig.fmap.ViewPortListener#backColorChanged(com.iver.cit.gvsig.fmap.ColorEvent)
1411
     */
1412
    public void backColorChanged(ColorEvent e) {
1413
        //        refresh();
1414
    }
1415 2342 vcaballero
1416 2835 caballero
    /**
1417
     * Devuelve un array con los FFrames seleccionados.
1418
     *
1419
     * @return Array con los FFrames seleccionados.
1420
     */
1421
    public IFFrame[] getFFrameSelected() {
1422
        ArrayList selecList = new ArrayList();
1423 2342 vcaballero
1424 3548 caballero
        for (int i = getFFrames().length - 1; i >= 0; i--) {
1425
            IFFrame fframe = (IFFrame) getFFrame(i);
1426 2835 caballero
1427
            if (fframe.getSelected() != IFFrame.NOSELECT) {
1428
                selecList.add(fframe);
1429
            }
1430
        }
1431
1432
        return (IFFrame[]) selecList.toArray(new IFFrame[0]);
1433
    }
1434
1435
    /**
1436 2846 caballero
     * Opens a dialog where to pick a PDF-file to save the current Layout
1437
     * suggesting a name for the file given by the first argument
1438
     *
1439
     * @param suggestedName DOCUMENT ME!
1440 2835 caballero
     */
1441 2846 caballero
    public void layoutToPDF(String suggestedName) {
1442 2835 caballero
        FileFilter pdfFilter = new GenericFileFilter("pdf",
1443
                PluginServices.getText(this, "pdf"));
1444
1445
        JFileChooser jfc = new JFileChooser();
1446 2846 caballero
        if (suggestedName!=null)
1447
        jfc.setSelectedFile(new File(suggestedName));
1448 2835 caballero
        jfc.addChoosableFileFilter(pdfFilter);
1449
        jfc.setFileFilter(pdfFilter);
1450
1451
        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
1452
            File f = jfc.getSelectedFile();
1453
            File faux = null;
1454
1455
            if (f.getName().endsWith(".pdf") || f.getName().endsWith(".PDF")) {
1456
                faux = f;
1457
            } else {
1458
                faux = new File(f.getPath() + ".pdf");
1459
            }
1460
1461
            layoutDraw.toPDF(faux);
1462
        }
1463
    }
1464 2846 caballero
1465
    /**
1466
     * Abre un di?logo para seleccionar un fichero pdf donde guardar el Layout
1467
     * en este formato.
1468
     */
1469
    public void layoutToPDF() {
1470
            layoutToPDF(null);
1471
    }
1472 3043 fjp
1473
    /**
1474
     * @return Returns the bModeDebug.
1475
     */
1476
    public boolean isModeDebug() {
1477
        return bModeDebug;
1478
    }
1479
1480
    /**
1481
     * @param modeDebug The bModeDebug to set.
1482
     */
1483
    public void setModeDebug(boolean modeDebug) {
1484
        bModeDebug = modeDebug;
1485
    }
1486 4120 caballero
1487 3548 caballero
    private ArrayList allFFrames(IFFrame[] fframes, ArrayList all){
1488
            for (int i=0;i<fframes.length;i++){
1489
                    if (fframes[i] instanceof FFrameGroup){
1490
                            return allFFrames(((FFrameGroup)fframes[i]).getFFrames(),all);
1491 4120 caballero
1492 3135 caballero
                    }else{
1493 3548 caballero
                            all.add(fframes[i]);
1494 3135 caballero
                    }
1495
            }
1496
            return all;
1497
    }
1498
        public IFFrame[] getAllFFrames() {
1499
                ArrayList all=new ArrayList();
1500
                return (IFFrame[])allFFrames(getFFrames(),all).toArray(new IFFrame[0]);
1501 3103 caballero
        }
1502 3548 caballero
1503
        public GeometryAdapter getGeometryAdapter() {
1504
                return geometryAdapter;
1505
        }
1506 3369 caballero
        public boolean isEditable(){
1507
                return isEditable;
1508 3106 caballero
        }
1509 3369 caballero
        public void setEditable(boolean b) {
1510
                isEditable=b;
1511 3106 caballero
        }
1512 3548 caballero
        public void initGeometryAdapter() {
1513
                if (getTool() == LINE) {
1514
                        geometryAdapter=new PolyLineAdapter();
1515
        } else if (getTool() == RECTANGLESIMPLE) {
1516
                geometryAdapter=new RectangleAdapter();
1517
        } else if (getTool() == POLYLINE) {
1518
            geometryAdapter=new PolyLineAdapter();
1519
        } else if (getTool() == POLYGON) {
1520
            geometryAdapter=new PolygonAdapter();
1521
        } else if (getTool() == CIRCLE) {
1522
                geometryAdapter=new CircleAdapter();
1523
        } else if (getTool() == POINT) {
1524
                geometryAdapter=new PointAdapter();
1525 4120 caballero
        }
1526 3548 caballero
        }
1527
        public void startEdit() {
1528
                for(int i=0;i<getFFrames().length;i++){
1529
                        IFFrame frame=(IFFrame)getFFrame(i);
1530
                        if (frame instanceof IFFrameEditable){
1531
                                if (frame.getSelected()!=IFFrame.NOSELECT){
1532
                                        ((IFFrameEditable)frame).startEditing();
1533
                                }else{
1534
                                        ((IFFrameEditable)frame).stopEditing();
1535
                                }
1536
                        }
1537 4120 caballero
1538 3548 caballero
                }
1539
                refresh();
1540
        }
1541
        public void stopEdit(){
1542
                boolean refresh=false;
1543
                for(int i=0;i<getFFrames().length;i++){
1544
                        IFFrame frame=(IFFrame)getFFrame(i);
1545
                        if (frame instanceof IFFrameEditable){
1546
                                if (((IFFrameEditable)frame).isEditing()){
1547
                                        ((IFFrameEditable)getFFrame(i)).stopEditing();
1548
                                        refresh=true;
1549
                                }
1550
                        }
1551
                }
1552
                if (refresh) refresh();
1553
        }
1554
        public void delFFrameSelected(){
1555 4120 caballero
                efs.startComplexCommand();
1556 3548 caballero
                for (int i = efs.getAllFFrames().length - 1; i >= 0; i--) {
1557
             IFFrame fframe = (IFFrame) efs.getFFrame(i);
1558
1559
             if (fframe.getSelected() != IFFrame.NOSELECT) {
1560
                     efs.removeFFrame(i);
1561
                    // getFFrames().remove(i);
1562
             }
1563
         }
1564
                efs.endComplexCommand();
1565
                updateFFrames();
1566
        }
1567
        public void delFFrame(int index){
1568
                for(int i=0;i<getEFS().getAllFFrames().length;i++){
1569
                        if (getEFS().getFFrame(i).equals(getFFrame(index))){
1570
                                getEFS().removeFFrame(i);
1571
                        }
1572
                }
1573
                updateFFrames();
1574
        }
1575
        public void delFFrame(IFFrame frame){
1576
                for(int i=0;i<getEFS().getAllFFrames().length;i++){
1577
                        if (getEFS().getFFrame(i).equals(frame)){
1578
                                getEFS().removeFFrame(i);
1579
                        }
1580
                }
1581
                updateFFrames();
1582
        }
1583
        public EditableFeatureSource getEFS(){
1584
                return efs;
1585
        }
1586 4120 caballero
1587
        public void executeCommand(CommandEvent e) {
1588
                this.updateFFrames();
1589
                this.refresh();
1590
        }
1591 3103 caballero
}