Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / org / gvsig / app / project / documents / layout / fframes / FFrameTable.java @ 29596

History | View | Annotate | Download (16.8 KB)

1
/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib��ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
/* CVS MESSAGES:
42
 *
43
 * $Id: FFrameTable.java 29596 2009-06-29 16:02:00Z jpiera $
44
 * $Log$
45
 * Revision 1.5  2007-03-08 11:33:01  caballero
46
 * Exceptions
47
 *
48
 * Revision 1.4  2007/03/06 16:36:19  caballero
49
 * Exceptions
50
 *
51
 * Revision 1.3  2007/01/23 13:10:17  caballero
52
 * valor no num�rico
53
 *
54
 * Revision 1.2  2007/01/03 12:02:54  caballero
55
 * Extensibilidad FFrames
56
 *
57
 * Revision 1.1  2006/12/20 14:42:06  caballero
58
 * Remodelado Layout
59
 *
60
 * Revision 1.6  2006/12/11 17:40:35  caballero
61
 * ajustar a grid en el Layout
62
 *
63
 * Revision 1.5  2006/09/15 10:41:30  caballero
64
 * extensibilidad de documentos
65
 *
66
 * Revision 1.4  2006/08/01 09:16:24  caballero
67
 * optimizar c�digo
68
 *
69
 * Revision 1.3  2006/05/26 06:51:08  caballero
70
 * Proyectos de la versi�n 0.6
71
 *
72
 * Revision 1.2  2006/04/18 06:43:11  caballero
73
 * Editar v�rtice
74
 *
75
 * Revision 1.1  2006/04/10 06:37:07  caballero
76
 * FFrameTable
77
 *
78
 * Revision 1.1  2006/01/12 12:32:04  caballero
79
 * box
80
 *
81
 *
82
 */
83
package org.gvsig.app.project.documents.layout.fframes;
84

    
85
import java.awt.Color;
86
import java.awt.Graphics2D;
87
import java.awt.Image;
88
import java.awt.event.MouseEvent;
89
import java.awt.geom.AffineTransform;
90
import java.awt.geom.Point2D;
91
import java.awt.geom.Rectangle2D;
92
import java.awt.image.BufferedImage;
93
import java.util.ArrayList;
94

    
95
import org.gvsig.andami.PluginServices;
96
import org.gvsig.app.extension.ProjectExtension;
97
import org.gvsig.app.project.Project;
98
import org.gvsig.app.project.documents.exceptions.OpenException;
99
import org.gvsig.app.project.documents.exceptions.SaveException;
100
import org.gvsig.app.project.documents.layout.fframes.gui.dialogs.FFrameBoxDialog;
101
import org.gvsig.app.project.documents.layout.fframes.gui.dialogs.IFFrameDialog;
102
import org.gvsig.app.project.documents.layout.gui.Layout;
103
import org.gvsig.fmap.dal.exception.ReadException;
104
import org.gvsig.utils.XMLEntity;
105

    
106

    
107

    
108
/**
109
 * DOCUMENT ME!
110
 *
111
 * @author Vicente Caballero Navarro
112
 */
113
public class FFrameTable extends FFrameGroup implements IFFrameGroupSelectable{
114
    private int numColumns = 2;
115
    private int numRows = 2;
116
    private static AffineTransform identity=new AffineTransform();
117
    private boolean selectFFrameBasic=false;
118
    private static final Image iMove = PluginServices.getIconTheme().
119
            get("move-icon").getImage();
120

    
121

    
122
    /**
123
     * DOCUMENT ME!
124
     *
125
     * @param g DOCUMENT ME!
126
     * @param at DOCUMENT ME!
127
     * @param rv DOCUMENT ME!
128
     * @param imgBase DOCUMENT ME!
129
     */
130
    public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv,
131
        BufferedImage imgBase) {
132
        Rectangle2D.Double r = getBoundingBox(at);
133
        g.setColor(Color.black);
134
        g.rotate(Math.toRadians(getRotation()), r.x + (r.width / 2),
135
                r.y + (r.height / 2));
136
        drawRectangles(g,at,rv,imgBase);
137
        g.rotate(Math.toRadians(-getRotation()), r.x + (r.width / 2),
138
                r.y + (r.height / 2));
139
        super.draw(g,at,rv,imgBase);
140
    }
141

    
142
    private void drawRectangles(Graphics2D g, AffineTransform at,Rectangle2D rv,BufferedImage imgBase) {
143
        IFFrame[] fframes=getFFrames();
144
        for (int i =0;i<fframes.length;i++){
145
            FFrameBasic basic=(FFrameBasic)fframes[i];
146
            basic.draw(g,at,rv,imgBase);
147
        }
148
    }
149

    
150
    /**
151
     * DOCUMENT ME!
152
     *
153
     * @param r DOCUMENT ME!
154
     * @param g DOCUMENT ME!
155
     */
156
    public void drawBox(Rectangle2D r, Graphics2D g) {
157
        calculateTable(r);
158
        IFFrame[] fframes=getFFrames();
159
        for (int i =0;i<fframes.length;i++){
160
            FFrameBasic basic=(FFrameBasic)fframes[i];
161
            basic.draw(g,identity,null,null);
162
        }
163
    }
164

    
165
    /**
166
     * DOCUMENT ME!
167
     *
168
     * @param g DOCUMENT ME!
169
     * @param at DOCUMENT ME!
170
     *
171
     * @throws ReadDriverException
172
     */
173
    public void print(Graphics2D g, AffineTransform at)
174
        throws ReadException {
175
        draw(g, at, null, null);
176
    }
177

    
178
    /**
179
     * DOCUMENT ME!
180
     *
181
     * @return DOCUMENT ME!
182
     *
183
     * @throws SaveException DOCUMENT ME!
184
     */
185
    public XMLEntity getXMLEntity() throws SaveException {
186
        XMLEntity xml = super.getXMLEntity();
187
        xml.putProperty("numColumns",numColumns);
188
        xml.putProperty("numRows",numRows);
189
        return xml;
190
    }
191

    
192
    /**
193
     * DOCUMENT ME!
194
     *
195
     * @param xml DOCUMENT ME!
196
     */
197
    public void setXMLEntity(XMLEntity xml) {
198
        super.setXMLEntity(xml);
199
        numColumns=xml.getIntProperty("numColumns");
200
        numRows=xml.getIntProperty("numRows");
201
    }
202

    
203
    /**
204
     * DOCUMENT ME!
205
     *
206
     * @param xml DOCUMENT ME!
207
     * @param l DOCUMENT ME!
208
     */
209
    public void setXMLEntity03(XMLEntity xml, Layout l) {
210
        // TODO Auto-generated method stub
211
    }
212

    
213
    /**
214
     * DOCUMENT ME!
215
     *
216
     * @return DOCUMENT ME!
217
     */
218
    public String getNameFFrame() {
219
        return PluginServices.getText(this, "box") + num;
220
    }
221

    
222
    /**
223
     * DOCUMENT ME!
224
     *
225
     * @return DOCUMENT ME!
226
     */
227
    public int getNumColumns() {
228
        return numColumns;
229
    }
230

    
231
    /**
232
     * DOCUMENT ME!
233
     *
234
     * @param numColumns DOCUMENT ME!
235
     */
236
    public void setNumColumns(int numColumns) {
237
        this.numColumns = numColumns;
238
    }
239

    
240
    /**
241
     * DOCUMENT ME!
242
     *
243
     * @return DOCUMENT ME!
244
     */
245
    public int getNumRows() {
246
        return numRows;
247
    }
248

    
249
    /**
250
     * DOCUMENT ME!
251
     *
252
     * @param numRows DOCUMENT ME!
253
     */
254
    public void setNumRows(int numRows) {
255
        this.numRows = numRows;
256
    }
257

    
258
    public void calculateTable(Rectangle2D r) {
259
            double wC = r.getWidth() / numColumns;
260
            double hR = r.getHeight() / numRows;
261
            int rows = numRows;
262
            clearFFrames();
263
            for (int i = 0; i < numColumns; i++) {
264
                 for (int j = 0; j < rows; j++) {
265
                     double x=r.getX() + (wC * i);
266
                     double y=r.getY() + (hR * j);
267
                     double w=wC;
268
                     double h=hR;
269
                     Rectangle2D rBasic=new Rectangle2D.Double(x,y,w,h);
270
                     FFrameBasic basic=(FFrameBasic)FrameFactory.createFrameFromName(FFrameBasicFactory.registerName);
271
                     basic.setRectangle(rBasic);
272
                     basic.setLayout(getLayout());
273
                     addFFrame(basic);
274
                 }
275
            }
276
    }
277

    
278
    public void selectFFrame(boolean b) {
279
        selectFFrameBasic=b;
280
    }
281

    
282
    public IFFrame joinFFrame() {
283
            IFFrame[] fframes=this.getFFrames();
284
            Rectangle2D r=null;
285

    
286
            for (int i=fframes.length-1;i>=0;i--){
287
                    if (fframes[i].getSelected()!=IFFrame.NOSELECT){
288
                            if (r==null){
289
                                    r=(Rectangle2D)fframes[i].getBoundBox().clone();
290
                            }else{
291
                                    r.add(fframes[i].getBoundBox());
292
                            }
293
                            this.removeFFrame(i);
294
                    }
295

    
296
                    //removeFFrame(fframes[i]);
297
            }
298
            if (r!=null){
299
                    //Layout layout=(Layout)PluginServices.getMDIManager().getActiveView();
300
                    FFrameBasic basic=(FFrameBasic)FrameFactory.createFrameFromName(FFrameBasicFactory.registerName);
301
            basic.setRectangle(r);
302
                    basic.setLayout(getLayout());
303
                    this.addFFrame(basic);
304
                    return this;
305
            }
306

    
307
            return null;
308
    }
309

    
310
/*
311
    public int getSelected() {
312
//                if (!selectFFrameBasic)
313
            return super.getSelected();
314
//                IFFrame[] fframes=getFFrames();
315
//                for (int i = 0;i<fframes.length;i++){
316
//                        int selection=fframes[i].getSelected();
317
//                        if (selection>0){
318
//                                return selection;
319
//                        }
320
//                }
321
//                return 0;
322

323
    }
324
*/
325
    public void setSelected(Point2D p,MouseEvent e) {
326
        if (!selectFFrameBasic) {
327
                        super.setSelected(p,e);
328
                } else{
329
            setSelectedGroup(p,e);
330
        }
331
    }
332

    
333
    public boolean contains(Point2D p) {
334
        if (!selectFFrameBasic) {
335
                        return super.contains(p);
336
                }
337
        return contains(p);
338
    }
339

    
340
    public void drawHandlers(Graphics2D g) {
341
        if (!selectFFrameBasic) {
342
                        super.drawHandlers(g);
343
                } else{
344
            drawHandlersGroup(g);
345

    
346
        }
347
    }
348

    
349
    public int getContains(Point2D p) {
350
        if (!selectFFrameBasic) {
351
                        return super.getContains(p);
352
                }
353
        return getContainsGroup(p);
354
    }
355

    
356
    public Rectangle2D getMovieRect(int difx, int dify) {
357
        //TODO Esto de momento lo dejo que no se pueda mover
358
            //cuando se tiene seleccionada la herramienta de selecci�n de un FFrameBasic.
359
            Rectangle2D r= super.getMovieRect(difx,dify);
360
        if (!selectFFrameBasic) {
361
                        return r;
362
                }
363
        r= super.getMovieRect(0,0);
364
        return r;
365
    }
366

    
367
    public Rectangle2D getMovieRectGroup(int difX, int difY) {
368
        Rectangle2D r=null;
369
        IFFrame[] fframes = getFFrames();
370
        ArrayList selected=new ArrayList();
371
        for (int i = 0; i < fframes.length; i++) {
372
            IFFrame fframe = fframes[i];
373
            if (fframe.getSelected()!=IFFrame.NOSELECT){
374
                selected.add(fframe);
375
            }
376
        }
377

    
378
        for (int i = 0; i < selected.size(); i++) {
379

    
380
            if (i==0){
381
                r=((IFFrame)selected.get(i)).getMovieRect(difX,difY);
382
            } else {
383
                                r.add(((IFFrame)selected.get(i)).getMovieRect(difX,difY));
384
                        }
385
        }
386
        return r;
387
    }
388

    
389
    public int getContainsGroup(Point2D p) {
390
        ArrayList selected=new ArrayList();
391
        IFFrame[] fframes = getFFrames();
392
        for (int i = 0; i < fframes.length; i++) {
393
            IFFrame fframe = fframes[i];
394
            int contains=fframe.getContains(p);
395
            if (contains != IFFrame.NOSELECT) {
396
                if (contains == IFFrame.RECT){
397
                    selected.add(fframe);
398
                }else{
399
                    return contains;
400
                }
401
            }
402
        }
403
        if (selected.size()>0){
404
            return ((IFFrame)selected.get(0)).getContains(p);
405
        }
406
        return 0;
407
    }
408

    
409
    /**
410
     * Dibuja los handlers sobre el boundingBox en el graphics que se pasa como
411
     * par�metro.
412
     *
413
     * @param g Graphics sobre el que dibujar.
414
     */
415
    public void drawHandlersGroup(Graphics2D g) {
416
        int size = 8;
417
        g.setColor(Color.gray);
418
        IFFrame[] fframes=getFFrames();
419
         for (int i = 0; i < fframes.length; i++) {
420
             IFFrame fframe = fframes[i];
421
             if (fframe.getSelected()!=IFFrame.NOSELECT){
422
                     Rectangle2D r = fframe.getBoundingBox(null);
423
                 Point2D p = new Point2D.Double();
424
                 g.rotate(Math.toRadians(getRotation()), r.getX() + (r.getWidth() / 2),
425
                     r.getY() + (r.getHeight() / 2));
426

    
427
                 AffineTransform atRotate = new AffineTransform();
428
                 atRotate.rotate(Math.toRadians(getRotation()),
429
                     r.getX() + (r.getWidth() / 2), r.getY() + (r.getHeight() / 2));
430

    
431
                 g.fillRect((int) r.getX() - size/2, (int) r.getY() - size/2, size, size);
432
                 atRotate.transform(new Point2D.Double(r.getX() - size/2, r.getY() - size/2),
433
                     p);
434
                 no.setRect((int) p.getX(), (int) p.getY(), size, size);
435

    
436
                 g.fillRect((int) r.getMaxX()- size/2, (int) r.getY() - size/2, size, size);
437
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2, r.getY() - size/2), p);
438
                 ne.setRect((int) p.getX(), (int) p.getY(), size, size);
439

    
440
                 g.fillRect((int) r.getX() - size/2, (int) r.getMaxY()-size/2, size, size);
441
                 atRotate.transform(new Point2D.Double(r.getX() - size/2, r.getMaxY()-size/2), p);
442
                 so.setRect((int) p.getX(), (int) p.getY(), size, size);
443

    
444
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getMaxY()-size/2, size, size);
445
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2, r.getMaxY()-size/2), p);
446
                 se.setRect((int) p.getX(), (int) p.getY(), size, size);
447

    
448
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getY() - size/2,
449
                     size, size);
450
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
451
                         r.getY() - size/2), p);
452
                 n.setRect((int) p.getX(), (int) p.getY(), size, size);
453

    
454
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getMaxY()-size/2, size,
455
                     size);
456
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
457
                         r.getMaxY()-size/2), p);
458
                 s.setRect((int) p.getX(), (int) p.getY(), size, size);
459

    
460
                 g.fillRect((int) r.getX() - size/2, (int) r.getCenterY() - (size / 2),
461
                     size, size);
462
                 atRotate.transform(new Point2D.Double(r.getX() - size/2,
463
                         r.getCenterY() - (size / 2)), p);
464
                 o.setRect((int) p.getX(), (int) p.getY(), size, size);
465

    
466
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getCenterY() - (size / 2), size,
467
                     size);
468
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2,
469
                         r.getCenterY() - (size / 2)), p);
470
                 e.setRect((int) p.getX()-size/2, (int) p.getY()-size/2, size, size);
471
                 g.rotate(Math.toRadians(-getRotation()), r.getX() + (r.getWidth() / 2),
472
                     r.getY() + (r.getHeight() / 2));
473
             }
474
        }
475

    
476
    }
477

    
478
  /*  public void drawHandlersGroup(Graphics2D g) {
479
        g.setColor(Color.gray);
480
        IFFrame[] fframes=getFFrames();
481
         for (int i = 0; i < fframes.length; i++) {
482
             IFFrame fframe = fframes[i];
483
             if (fframe.getSelected()!=IFFrame.NOSELECT){
484
                 fframe.drawHandlers(g);
485
             }
486
        }
487
    }
488
*/
489
    public boolean containsGroup(Point2D p) {
490
        IFFrame[] fframes=getFFrames();
491
         for (int i = 0; i < fframes.length; i++) {
492
            IFFrame fframe = fframes[i];
493
            if (fframe.contains(p)){
494
                return true;
495
            }
496
       }
497
     return false;
498
    }
499

    
500
    public void setSelectedGroup(Point2D p, MouseEvent e) {
501
        IFFrame[] fframes = getFFrames();
502
        if (!e.isShiftDown()) {
503
            for (int j = 0; j < fframes.length; j++) {
504
                fframes[j].setSelected(false);
505
            }
506
            for (int i = 0; i < fframes.length; i++) {
507
                IFFrame fframe = fframes[i];
508
                //if ((fframe.getSelected() == IFFrame.NOSELECT)) {
509
                    fframe.setSelected(p, e);
510
                //}
511
            }
512
        }else{
513
                 for (int i = 0; i < fframes.length; i++) {
514
                 IFFrame fframe = fframes[i];
515
                 if (fframe.contains(p)) {
516
                                        if ((fframe.getSelected() == IFFrame.NOSELECT)) {
517
                                                fframe.setSelected(p, e);
518
                                        } else {
519
                                                fframe.setSelected(false);
520
                                        }
521
                                }
522
             }
523
        }
524
    }
525

    
526
    public int getSelectedGroup() {
527
        return 0;
528
    }
529

    
530
        public Image getMapCursor(Point2D p) {
531
                if (!selectFFrameBasic) {
532
                        return super.getMapCursor(p);
533
                }
534
               return getMapCursorGroup(p);
535
    }
536
        public Image getMapCursorGroup(Point2D p){
537
                 int select = getContains(p);
538
                switch (select) {
539
                    case (RECT):
540
                        return iMove;
541
                }
542
                return null;
543
        }
544

    
545
        public IFFrameDialog getPropertyDialog() {
546
                return new FFrameBoxDialog(getLayout(),this);
547
        }
548
        public IFFrame cloneFFrame(Layout layout) {
549
        Project p = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
550
        IFFrame frame = null;
551

    
552
        try {
553
            frame = createFromXML(this.getXMLEntity(), p,layout);
554
        } catch (OpenException e) {
555
            e.showError();
556
        } catch (SaveException e) {
557
            e.showError();
558
        }
559
        frame.setLayout(layout);
560

    
561
        if (frame instanceof IFFrameViewDependence) {
562
            ((IFFrameViewDependence) frame).initDependence(layout.getLayoutContext().getAllFFrames());
563
        }
564
        frame.setFrameLayoutFactory(factory);
565
        cloneActions(frame);
566
        return frame;
567
    }
568
}