Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / layout / fframes / FFrameTable.java @ 28368

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 28368 2009-05-04 15:30:35Z vcaballero $
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.Cursor;
87
import java.awt.Graphics2D;
88
import java.awt.Image;
89
import java.awt.Point;
90
import java.awt.Toolkit;
91
import java.awt.event.MouseEvent;
92
import java.awt.geom.AffineTransform;
93
import java.awt.geom.Point2D;
94
import java.awt.geom.Rectangle2D;
95
import java.awt.image.BufferedImage;
96
import java.util.ArrayList;
97

    
98
import javax.swing.ImageIcon;
99

    
100
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
101
import com.iver.andami.PluginServices;
102
import com.iver.cit.gvsig.AddLayer;
103
import com.iver.cit.gvsig.ProjectExtension;
104
import com.iver.cit.gvsig.project.Project;
105
import com.iver.cit.gvsig.project.documents.exceptions.OpenException;
106
import com.iver.cit.gvsig.project.documents.exceptions.SaveException;
107
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.FFrameBoxDialog;
108
import com.iver.cit.gvsig.project.documents.layout.fframes.gui.dialogs.IFFrameDialog;
109
import com.iver.cit.gvsig.project.documents.layout.gui.Layout;
110
import com.iver.utiles.XMLEntity;
111

    
112

    
113
/**
114
 * DOCUMENT ME!
115
 *
116
 * @author Vicente Caballero Navarro
117
 */
118
public class FFrameTable extends FFrameGroup implements IFFrameGroupSelectable{
119
    private int numColumns = 2;
120
    private int numRows = 2;
121
    private boolean selectFFrameBasic=false;
122
    private static final Image iMove = PluginServices.getIconTheme().
123
            get("move-icon").getImage();
124
    private final Cursor curMove = Toolkit.getDefaultToolkit().createCustomCursor(iMove,
125
                        new Point(16, 16), "");
126

    
127

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

    
148
    private void drawRectangles(Graphics2D g, AffineTransform at,Rectangle2D rv,BufferedImage imgBase) {
149
        IFFrame[] fframes=getFFrames();
150
        for (int i =0;i<fframes.length;i++){
151
            FFrameBasic basic=(FFrameBasic)fframes[i];
152
            basic.draw(g,at,rv,imgBase);
153
        }
154
    }
155

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

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

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

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

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

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

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

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

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

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

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

    
284
    public void selectFFrame(boolean b) {
285
        selectFFrameBasic=b;
286
    }
287

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

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

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

    
313
            return null;
314
    }
315

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

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

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

    
345
    public void drawHandlers(Graphics2D g) {
346
        if (!selectFFrameBasic)
347
            super.drawHandlers(g);
348
        else{
349
            drawHandlersGroup(g);
350

    
351
        }
352
    }
353

    
354
    public int getContains(Point2D p) {
355
        if (!selectFFrameBasic)
356
            return super.getContains(p);
357
        return getContainsGroup(p);
358
    }
359

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

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

    
381
        for (int i = 0; i < selected.size(); i++) {
382

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

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

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

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

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

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

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

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

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

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

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

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

    
478
    }
479

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

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

    
528
    public int getSelectedGroup() {
529
        return 0;
530
    }
531

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

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

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

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