Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / layout / fframes / FFrameTable.java @ 24759

History | View | Annotate | Download (17.1 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 24759 2008-11-04 16:08:30Z jmvivo $
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 com.iver.cit.gvsig.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.fmap.dal.exception.ReadException;
96

    
97
import com.iver.andami.PluginServices;
98
import com.iver.cit.gvsig.ProjectExtension;
99
import com.iver.cit.gvsig.project.Project;
100
import com.iver.cit.gvsig.project.documents.exceptions.OpenException;
101
import com.iver.cit.gvsig.project.documents.exceptions.SaveException;
102
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.FFrameBoxDialog;
103
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.IFFrameDialog;
104
import com.iver.cit.gvsig.project.documents.layout.gui.Layout;
105
import com.iver.utiles.XMLEntity;
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) throws ReadException {
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
            try {
147
                basic.draw(g,at,rv,imgBase);
148
            } catch (ReadException e) {
149
                e.printStackTrace();
150
            }
151
        }
152
    }
153

    
154
    /**
155
     * DOCUMENT ME!
156
     *
157
     * @param r DOCUMENT ME!
158
     * @param g DOCUMENT ME!
159
     */
160
    public void drawBox(Rectangle2D r, Graphics2D g) {
161
        calculateTable(r);
162
        IFFrame[] fframes=getFFrames();
163
        for (int i =0;i<fframes.length;i++){
164
            FFrameBasic basic=(FFrameBasic)fframes[i];
165
            try {
166
                    basic.draw(g,identity,null,null);
167
            } catch (ReadException e) {
168
                e.printStackTrace();
169
            }
170
        }
171
    }
172

    
173
    /**
174
     * DOCUMENT ME!
175
     *
176
     * @param g DOCUMENT ME!
177
     * @param at DOCUMENT ME!
178
     *
179
     * @throws ReadDriverException
180
     */
181
    public void print(Graphics2D g, AffineTransform at)
182
        throws ReadException {
183
        draw(g, at, null, null);
184
    }
185

    
186
    /**
187
     * DOCUMENT ME!
188
     *
189
     * @return DOCUMENT ME!
190
     *
191
     * @throws SaveException DOCUMENT ME!
192
     */
193
    public XMLEntity getXMLEntity() throws SaveException {
194
        XMLEntity xml = super.getXMLEntity();
195
        xml.putProperty("numColumns",numColumns);
196
        xml.putProperty("numRows",numRows);
197
        return xml;
198
    }
199

    
200
    /**
201
     * DOCUMENT ME!
202
     *
203
     * @param xml DOCUMENT ME!
204
     */
205
    public void setXMLEntity(XMLEntity xml) {
206
        super.setXMLEntity(xml);
207
        numColumns=xml.getIntProperty("numColumns");
208
        numRows=xml.getIntProperty("numRows");
209
    }
210

    
211
    /**
212
     * DOCUMENT ME!
213
     *
214
     * @param xml DOCUMENT ME!
215
     * @param l DOCUMENT ME!
216
     */
217
    public void setXMLEntity03(XMLEntity xml, Layout l) {
218
        // TODO Auto-generated method stub
219
    }
220

    
221
    /**
222
     * DOCUMENT ME!
223
     *
224
     * @return DOCUMENT ME!
225
     */
226
    public String getNameFFrame() {
227
        return PluginServices.getText(this, "box") + num;
228
    }
229

    
230
    /**
231
     * DOCUMENT ME!
232
     *
233
     * @return DOCUMENT ME!
234
     */
235
    public int getNumColumns() {
236
        return numColumns;
237
    }
238

    
239
    /**
240
     * DOCUMENT ME!
241
     *
242
     * @param numColumns DOCUMENT ME!
243
     */
244
    public void setNumColumns(int numColumns) {
245
        this.numColumns = numColumns;
246
    }
247

    
248
    /**
249
     * DOCUMENT ME!
250
     *
251
     * @return DOCUMENT ME!
252
     */
253
    public int getNumRows() {
254
        return numRows;
255
    }
256

    
257
    /**
258
     * DOCUMENT ME!
259
     *
260
     * @param numRows DOCUMENT ME!
261
     */
262
    public void setNumRows(int numRows) {
263
        this.numRows = numRows;
264
    }
265

    
266
    public void calculateTable(Rectangle2D r) {
267
            double wC = r.getWidth() / numColumns;
268
            double hR = r.getHeight() / numRows;
269
            int rows = numRows;
270
            clearFFrames();
271
            for (int i = 0; i < numColumns; i++) {
272
                 for (int j = 0; j < rows; j++) {
273
                     double x=r.getX() + (wC * i);
274
                     double y=r.getY() + (hR * j);
275
                     double w=wC;
276
                     double h=hR;
277
                     Rectangle2D rBasic=new Rectangle2D.Double(x,y,w,h);
278
                     FFrameBasic basic=(FFrameBasic)FrameFactory.createFrameFromName(FFrameBasicFactory.registerName);
279
                     basic.setRectangle(rBasic);
280
                     basic.setLayout(getLayout());
281
                     addFFrame(basic);
282
                 }
283
            }
284
    }
285

    
286
    public void selectFFrame(boolean b) {
287
        selectFFrameBasic=b;
288
    }
289

    
290
    public IFFrame joinFFrame() {
291
            IFFrame[] fframes=this.getFFrames();
292
            Rectangle2D r=null;
293

    
294
            for (int i=fframes.length-1;i>=0;i--){
295
                    if (fframes[i].getSelected()!=IFFrame.NOSELECT){
296
                            if (r==null){
297
                                    r=(Rectangle2D)fframes[i].getBoundBox().clone();
298
                            }else{
299
                                    r.add(fframes[i].getBoundBox());
300
                            }
301
                            this.removeFFrame(i);
302
                    }
303

    
304
                    //removeFFrame(fframes[i]);
305
            }
306
            if (r!=null){
307
                    //Layout layout=(Layout)PluginServices.getMDIManager().getActiveView();
308
                    FFrameBasic basic=(FFrameBasic)FrameFactory.createFrameFromName(FFrameBasicFactory.registerName);
309
            basic.setRectangle(r);
310
                    basic.setLayout(getLayout());
311
                    this.addFFrame(basic);
312
                    return this;
313
            }
314

    
315
            return null;
316
    }
317

    
318
/*
319
    public int getSelected() {
320
//                if (!selectFFrameBasic)
321
            return super.getSelected();
322
//                IFFrame[] fframes=getFFrames();
323
//                for (int i = 0;i<fframes.length;i++){
324
//                        int selection=fframes[i].getSelected();
325
//                        if (selection>0){
326
//                                return selection;
327
//                        }
328
//                }
329
//                return 0;
330

331
    }
332
*/
333
    public void setSelected(Point2D p,MouseEvent e) {
334
        if (!selectFFrameBasic) {
335
                        super.setSelected(p,e);
336
                } else{
337
            setSelectedGroup(p,e);
338
        }
339
    }
340

    
341
    public boolean contains(Point2D p) {
342
        if (!selectFFrameBasic) {
343
                        return super.contains(p);
344
                }
345
        return contains(p);
346
    }
347

    
348
    public void drawHandlers(Graphics2D g) {
349
        if (!selectFFrameBasic) {
350
                        super.drawHandlers(g);
351
                } else{
352
            drawHandlersGroup(g);
353

    
354
        }
355
    }
356

    
357
    public int getContains(Point2D p) {
358
        if (!selectFFrameBasic) {
359
                        return super.getContains(p);
360
                }
361
        return getContainsGroup(p);
362
    }
363

    
364
    public Rectangle2D getMovieRect(int difx, int dify) {
365
        //TODO Esto de momento lo dejo que no se pueda mover
366
            //cuando se tiene seleccionada la herramienta de selecci�n de un FFrameBasic.
367
            Rectangle2D r= super.getMovieRect(difx,dify);
368
        if (!selectFFrameBasic) {
369
                        return r;
370
                }
371
        r= super.getMovieRect(0,0);
372
        return r;
373
    }
374

    
375
    public Rectangle2D getMovieRectGroup(int difX, int difY) {
376
        Rectangle2D r=null;
377
        IFFrame[] fframes = getFFrames();
378
        ArrayList selected=new ArrayList();
379
        for (int i = 0; i < fframes.length; i++) {
380
            IFFrame fframe = fframes[i];
381
            if (fframe.getSelected()!=IFFrame.NOSELECT){
382
                selected.add(fframe);
383
            }
384
        }
385

    
386
        for (int i = 0; i < selected.size(); i++) {
387

    
388
            if (i==0){
389
                r=((IFFrame)selected.get(i)).getMovieRect(difX,difY);
390
            } else {
391
                                r.add(((IFFrame)selected.get(i)).getMovieRect(difX,difY));
392
                        }
393
        }
394
        return r;
395
    }
396

    
397
    public int getContainsGroup(Point2D p) {
398
        ArrayList selected=new ArrayList();
399
        IFFrame[] fframes = getFFrames();
400
        for (int i = 0; i < fframes.length; i++) {
401
            IFFrame fframe = fframes[i];
402
            int contains=fframe.getContains(p);
403
            if (contains != IFFrame.NOSELECT) {
404
                if (contains == IFFrame.RECT){
405
                    selected.add(fframe);
406
                }else{
407
                    return contains;
408
                }
409
            }
410
        }
411
        if (selected.size()>0){
412
            return ((IFFrame)selected.get(0)).getContains(p);
413
        }
414
        return 0;
415
    }
416

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

    
435
                 AffineTransform atRotate = new AffineTransform();
436
                 atRotate.rotate(Math.toRadians(getRotation()),
437
                     r.getX() + (r.getWidth() / 2), r.getY() + (r.getHeight() / 2));
438

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

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

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

    
452
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getMaxY()-size/2, size, size);
453
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2, r.getMaxY()-size/2), p);
454
                 se.setRect((int) p.getX(), (int) p.getY(), size, size);
455

    
456
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getY() - size/2,
457
                     size, size);
458
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
459
                         r.getY() - size/2), p);
460
                 n.setRect((int) p.getX(), (int) p.getY(), size, size);
461

    
462
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getMaxY()-size/2, size,
463
                     size);
464
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
465
                         r.getMaxY()-size/2), p);
466
                 s.setRect((int) p.getX(), (int) p.getY(), size, size);
467

    
468
                 g.fillRect((int) r.getX() - size/2, (int) r.getCenterY() - (size / 2),
469
                     size, size);
470
                 atRotate.transform(new Point2D.Double(r.getX() - size/2,
471
                         r.getCenterY() - (size / 2)), p);
472
                 o.setRect((int) p.getX(), (int) p.getY(), size, size);
473

    
474
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getCenterY() - (size / 2), size,
475
                     size);
476
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2,
477
                         r.getCenterY() - (size / 2)), p);
478
                 e.setRect((int) p.getX()-size/2, (int) p.getY()-size/2, size, size);
479
                 g.rotate(Math.toRadians(-getRotation()), r.getX() + (r.getWidth() / 2),
480
                     r.getY() + (r.getHeight() / 2));
481
             }
482
        }
483

    
484
    }
485

    
486
  /*  public void drawHandlersGroup(Graphics2D g) {
487
        g.setColor(Color.gray);
488
        IFFrame[] fframes=getFFrames();
489
         for (int i = 0; i < fframes.length; i++) {
490
             IFFrame fframe = fframes[i];
491
             if (fframe.getSelected()!=IFFrame.NOSELECT){
492
                 fframe.drawHandlers(g);
493
             }
494
        }
495
    }
496
*/
497
    public boolean containsGroup(Point2D p) {
498
        IFFrame[] fframes=getFFrames();
499
         for (int i = 0; i < fframes.length; i++) {
500
            IFFrame fframe = fframes[i];
501
            if (fframe.contains(p)){
502
                return true;
503
            }
504
       }
505
     return false;
506
    }
507

    
508
    public void setSelectedGroup(Point2D p, MouseEvent e) {
509
        IFFrame[] fframes = getFFrames();
510
        if (!e.isShiftDown()) {
511
            for (int j = 0; j < fframes.length; j++) {
512
                fframes[j].setSelected(false);
513
            }
514
            for (int i = 0; i < fframes.length; i++) {
515
                IFFrame fframe = fframes[i];
516
                //if ((fframe.getSelected() == IFFrame.NOSELECT)) {
517
                    fframe.setSelected(p, e);
518
                //}
519
            }
520
        }else{
521
                 for (int i = 0; i < fframes.length; i++) {
522
                 IFFrame fframe = fframes[i];
523
                 if (fframe.contains(p)) {
524
                                        if ((fframe.getSelected() == IFFrame.NOSELECT)) {
525
                                                fframe.setSelected(p, e);
526
                                        } else {
527
                                                fframe.setSelected(false);
528
                                        }
529
                                }
530
             }
531
        }
532
    }
533

    
534
    public int getSelectedGroup() {
535
        return 0;
536
    }
537

    
538
        public Image getMapCursor(Point2D p) {
539
                if (!selectFFrameBasic) {
540
                        return super.getMapCursor(p);
541
                }
542
               return getMapCursorGroup(p);
543
    }
544
        public Image getMapCursorGroup(Point2D p){
545
                 int select = getContains(p);
546
                switch (select) {
547
                    case (RECT):
548
                        return iMove;
549
                }
550
                return null;
551
        }
552

    
553
        public IFFrameDialog getPropertyDialog() {
554
                return new FFrameBoxDialog(getLayout(),this);
555
        }
556
        public IFFrame cloneFFrame(Layout layout) {
557
        Project p = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
558
        IFFrame frame = null;
559

    
560
        try {
561
            frame = createFromXML(this.getXMLEntity(), p,layout);
562
        } catch (OpenException e) {
563
            e.showError();
564
        } catch (SaveException e) {
565
            e.showError();
566
        }
567
        frame.setLayout(layout);
568

    
569
        if (frame instanceof IFFrameViewDependence) {
570
            ((IFFrameViewDependence) frame).initDependence(layout.getLayoutContext().getAllFFrames());
571
        }
572
        frame.setFrameLayoutFactory(factory);
573
        cloneActions(frame);
574
        return frame;
575
    }
576
}