Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / layout / fframes / FFrameTable.java @ 6604

History | View | Annotate | Download (15.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$
44
 * $Log$
45
 * Revision 1.4  2006-08-01 09:16:24  caballero
46
 * optimizar c?digo
47
 *
48
 * Revision 1.3  2006/05/26 06:51:08  caballero
49
 * Proyectos de la versi?n 0.6
50
 *
51
 * Revision 1.2  2006/04/18 06:43:11  caballero
52
 * Editar v?rtice
53
 *
54
 * Revision 1.1  2006/04/10 06:37:07  caballero
55
 * FFrameTable
56
 *
57
 * Revision 1.1  2006/01/12 12:32:04  caballero
58
 * box
59
 *
60
 *
61
 */
62
package com.iver.cit.gvsig.gui.layout.fframes;
63

    
64
import java.awt.Color;
65
import java.awt.Cursor;
66
import java.awt.Graphics2D;
67
import java.awt.event.MouseEvent;
68
import java.awt.geom.AffineTransform;
69
import java.awt.geom.Point2D;
70
import java.awt.geom.Rectangle2D;
71
import java.awt.image.BufferedImage;
72
import java.util.ArrayList;
73

    
74
import com.iver.andami.PluginServices;
75
import com.iver.cit.gvsig.fmap.DriverException;
76
import com.iver.cit.gvsig.gui.layout.Layout;
77
import com.iver.cit.gvsig.gui.project.SaveException;
78
import com.iver.utiles.XMLEntity;
79

    
80

    
81
/**
82
 * DOCUMENT ME!
83
 *
84
 * @author Vicente Caballero Navarro
85
 */
86
public class FFrameTable extends FFrameGroup implements IFFrameGroupSelectable{
87
    private int numColumns = 2;
88
    private int numRows = 2;
89
    private boolean selectFFrameBasic=false;
90

    
91
    /**
92
     * DOCUMENT ME!
93
     *
94
     * @param g DOCUMENT ME!
95
     * @param at DOCUMENT ME!
96
     * @param rv DOCUMENT ME!
97
     * @param imgBase DOCUMENT ME!
98
     *
99
     * @throws DriverException DOCUMENT ME!
100
     */
101
    public void draw(Graphics2D g, AffineTransform at, Rectangle2D rv,
102
        BufferedImage imgBase) throws DriverException {
103
        Rectangle2D.Double r = getBoundingBox(at);
104
        g.setColor(Color.black);
105
        g.rotate(Math.toRadians(getRotation()), r.x + (r.width / 2),
106
                r.y + (r.height / 2));
107
        drawRectangles(g,at,rv,imgBase);
108
        g.rotate(Math.toRadians(-getRotation()), r.x + (r.width / 2),
109
                r.y + (r.height / 2));
110
        super.draw(g,at,rv,imgBase);
111
    }
112

    
113
    private void drawRectangles(Graphics2D g, AffineTransform at,Rectangle2D rv,BufferedImage imgBase) {
114
        IFFrame[] fframes=getFFrames();
115
        for (int i =0;i<fframes.length;i++){
116
            FFrameBasic basic=(FFrameBasic)fframes[i];
117
            try {
118
                basic.draw(g,at,rv,imgBase);
119
            } catch (DriverException e) {
120
                e.printStackTrace();
121
            }
122
        }
123
    }
124

    
125
    /**
126
     * DOCUMENT ME!
127
     *
128
     * @param r DOCUMENT ME!
129
     * @param g DOCUMENT ME!
130
     */
131
    public void drawBox(Rectangle2D r, Graphics2D g) {
132
        calculateTable(r);
133
        IFFrame[] fframes=getFFrames();
134
        for (int i =0;i<fframes.length;i++){
135
            FFrameBasic basic=(FFrameBasic)fframes[i];
136
            try {
137
                basic.draw(g,new AffineTransform(),null,null);
138
            } catch (DriverException e) {
139
                e.printStackTrace();
140
            }
141
        }
142
    }
143

    
144
    /**
145
     * DOCUMENT ME!
146
     *
147
     * @param g DOCUMENT ME!
148
     * @param at DOCUMENT ME!
149
     *
150
     * @throws DriverException DOCUMENT ME!
151
     */
152
    public void print(Graphics2D g, AffineTransform at)
153
        throws DriverException {
154
        draw(g, at, null, null);
155
    }
156

    
157
    /**
158
     * DOCUMENT ME!
159
     *
160
     * @return DOCUMENT ME!
161
     *
162
     * @throws SaveException DOCUMENT ME!
163
     */
164
    public XMLEntity getXMLEntity() throws SaveException {
165
        XMLEntity xml = super.getXMLEntity();
166
        xml.putProperty("numColumns",numColumns);
167
        xml.putProperty("numRows",numRows);
168
        return xml;
169
    }
170

    
171
    /**
172
     * DOCUMENT ME!
173
     *
174
     * @param xml DOCUMENT ME!
175
     */
176
    public void setXMLEntity(XMLEntity xml) {
177
        super.setXMLEntity(xml);
178
        numColumns=xml.getIntProperty("numColumns");
179
        numRows=xml.getIntProperty("numRows");
180
    }
181

    
182
    /**
183
     * DOCUMENT ME!
184
     *
185
     * @param xml DOCUMENT ME!
186
     * @param l DOCUMENT ME!
187
     */
188
    public void setXMLEntity03(XMLEntity xml, Layout l) {
189
        // TODO Auto-generated method stub
190
    }
191

    
192
    /**
193
     * DOCUMENT ME!
194
     *
195
     * @return DOCUMENT ME!
196
     */
197
    public String getNameFFrame() {
198
        return PluginServices.getText(this, "box") + num;
199
    }
200

    
201
    /**
202
     * DOCUMENT ME!
203
     *
204
     * @return DOCUMENT ME!
205
     */
206
    public int getNumColumns() {
207
        return numColumns;
208
    }
209

    
210
    /**
211
     * DOCUMENT ME!
212
     *
213
     * @param numColumns DOCUMENT ME!
214
     */
215
    public void setNumColumns(int numColumns) {
216
        this.numColumns = numColumns;
217
    }
218

    
219
    /**
220
     * DOCUMENT ME!
221
     *
222
     * @return DOCUMENT ME!
223
     */
224
    public int getNumRows() {
225
        return numRows;
226
    }
227

    
228
    /**
229
     * DOCUMENT ME!
230
     *
231
     * @param numRows DOCUMENT ME!
232
     */
233
    public void setNumRows(int numRows) {
234
        this.numRows = numRows;
235
    }
236

    
237
    public void calculateTable(Rectangle2D r) {
238
            double wC = r.getWidth() / numColumns;
239
            double hR = r.getHeight() / numRows;
240
            int rows = numRows;
241
            clearFFrames();
242
            for (int i = 0; i < numColumns; i++) {
243
                 for (int j = 0; j < rows; j++) {
244
                     double x=r.getX() + (wC * i);
245
                     double y=r.getY() + (hR * j);
246
                     double w=wC;
247
                     double h=hR;
248
                     Rectangle2D rBasic=new Rectangle2D.Double(x,y,w,h);
249
                     FFrameBasic basic=new FFrameBasic(rBasic);
250
                     addFFrame(basic);
251
                 }
252
            }
253
    }
254

    
255
    public void selectFFrame(boolean b) {
256
        selectFFrameBasic=b;
257
    }
258

    
259
    public IFFrame joinFFrame() {
260
            IFFrame[] fframes=this.getFFrames();
261
            Rectangle2D r=null;
262

    
263
            for (int i=fframes.length-1;i>=0;i--){
264
                    if (fframes[i].getSelected()!=IFFrame.NOSELECT){
265
                            if (r==null){
266
                                    r=(Rectangle2D)fframes[i].getBoundBox().clone();
267
                            }else{
268
                                    r.add(fframes[i].getBoundBox());
269
                            }
270
                            this.removeFFrame(i);
271
                    }
272

    
273
                    //removeFFrame(fframes[i]);
274
            }
275
            if (r!=null){
276
                    //Layout layout=(Layout)PluginServices.getMDIManager().getActiveView();
277
                    IFFrame fframe=new FFrameBasic(r);
278
                    this.addFFrame(fframe);
279
                    return this;
280
            }
281

    
282
            return null;
283
    }
284

    
285
/*
286
    public int getSelected() {
287
//                if (!selectFFrameBasic)
288
            return super.getSelected();
289
//                IFFrame[] fframes=getFFrames();
290
//                for (int i = 0;i<fframes.length;i++){
291
//                        int selection=fframes[i].getSelected();
292
//                        if (selection>0){
293
//                                return selection;
294
//                        }
295
//                }
296
//                return 0;
297

298
    }
299
*/
300
    public void setSelected(Point2D p,MouseEvent e) {
301
        if (!selectFFrameBasic)
302
            super.setSelected(p,e);
303
        else{
304
            setSelectedGroup(p,e);
305
        }
306
    }
307

    
308
    public boolean contains(Point2D p) {
309
        if (!selectFFrameBasic)
310
            return super.contains(p);
311
        return contains(p);
312
    }
313

    
314
    public void drawHandlers(Graphics2D g) {
315
        if (!selectFFrameBasic)
316
            super.drawHandlers(g);
317
        else{
318
            drawHandlersGroup(g);
319

    
320
        }
321
    }
322

    
323
    public int getContains(Point2D p) {
324
        if (!selectFFrameBasic)
325
            return super.getContains(p);
326
        return getContainsGroup(p);
327
    }
328

    
329
    public Rectangle2D getMovieRect(int difx, int dify) {
330
        //TODO Esto de momento lo dejo que no se pueda mover
331
            //cuando se tiene seleccionada la herramienta de selecci?n de un FFrameBasic.
332
            Rectangle2D r= super.getMovieRect(difx,dify);
333
        if (!selectFFrameBasic)
334
            return r;
335
        r= super.getMovieRect(0,0);
336
        return r;
337
    }
338

    
339
    public Rectangle2D getMovieRectGroup(int difX, int difY) {
340
        Rectangle2D r=null;
341
        IFFrame[] fframes = getFFrames();
342
        ArrayList selected=new ArrayList();
343
        for (int i = 0; i < fframes.length; i++) {
344
            IFFrame fframe = fframes[i];
345
            if (fframe.getSelected()!=IFFrame.NOSELECT){
346
                selected.add(fframe);
347
            }
348
        }
349

    
350
        for (int i = 0; i < selected.size(); i++) {
351

    
352
            if (i==0){
353
                r=((IFFrame)selected.get(i)).getMovieRect(difX,difY);
354
            }else
355
                r.add(((IFFrame)selected.get(i)).getMovieRect(difX,difY));
356
        }
357
        return r;
358
    }
359

    
360
    public int getContainsGroup(Point2D p) {
361
        ArrayList selected=new ArrayList();
362
        IFFrame[] fframes = getFFrames();
363
        for (int i = 0; i < fframes.length; i++) {
364
            IFFrame fframe = fframes[i];
365
            int contains=fframe.getContains(p);
366
            if (contains != IFFrame.NOSELECT) {
367
                if (contains == IFFrame.RECT){
368
                    selected.add(fframe);
369
                }else{
370
                    return contains;
371
                }
372
            }
373
        }
374
        if (selected.size()>0){
375
            return ((IFFrame)selected.get(0)).getContains(p);
376
        }
377
        return 0;
378
    }
379

    
380
    /**
381
     * Dibuja los handlers sobre el boundingBox en el graphics que se pasa como
382
     * par?metro.
383
     *
384
     * @param g Graphics sobre el que dibujar.
385
     */
386
    public void drawHandlersGroup(Graphics2D g) {
387
        int size = 8;
388
        g.setColor(Color.gray);
389
        IFFrame[] fframes=getFFrames();
390
         for (int i = 0; i < fframes.length; i++) {
391
             IFFrame fframe = fframes[i];
392
             if (fframe.getSelected()!=IFFrame.NOSELECT){
393
                     Rectangle2D r = fframe.getBoundingBox(null);
394
                 Point2D p = new Point2D.Double();
395
                 g.rotate(Math.toRadians(getRotation()), r.getX() + (r.getWidth() / 2),
396
                     r.getY() + (r.getHeight() / 2));
397

    
398
                 AffineTransform atRotate = new AffineTransform();
399
                 atRotate.rotate(Math.toRadians(getRotation()),
400
                     r.getX() + (r.getWidth() / 2), r.getY() + (r.getHeight() / 2));
401

    
402
                 g.fillRect((int) r.getX() - size/2, (int) r.getY() - size/2, size, size);
403
                 atRotate.transform(new Point2D.Double(r.getX() - size/2, r.getY() - size/2),
404
                     p);
405
                 no.setRect((int) p.getX(), (int) p.getY(), size, size);
406

    
407
                 g.fillRect((int) r.getMaxX()- size/2, (int) r.getY() - size/2, size, size);
408
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2, r.getY() - size/2), p);
409
                 ne.setRect((int) p.getX(), (int) p.getY(), size, size);
410

    
411
                 g.fillRect((int) r.getX() - size/2, (int) r.getMaxY()-size/2, size, size);
412
                 atRotate.transform(new Point2D.Double(r.getX() - size/2, r.getMaxY()-size/2), p);
413
                 so.setRect((int) p.getX(), (int) p.getY(), size, size);
414

    
415
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getMaxY()-size/2, size, size);
416
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2, r.getMaxY()-size/2), p);
417
                 se.setRect((int) p.getX(), (int) p.getY(), size, size);
418

    
419
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getY() - size/2,
420
                     size, size);
421
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
422
                         r.getY() - size/2), p);
423
                 n.setRect((int) p.getX(), (int) p.getY(), size, size);
424

    
425
                 g.fillRect((int) r.getCenterX() - (size / 2), (int) r.getMaxY()-size/2, size,
426
                     size);
427
                 atRotate.transform(new Point2D.Double(r.getCenterX() - (size / 2),
428
                         r.getMaxY()-size/2), p);
429
                 s.setRect((int) p.getX(), (int) p.getY(), size, size);
430

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

    
437
                 g.fillRect((int) r.getMaxX()-size/2, (int) r.getCenterY() - (size / 2), size,
438
                     size);
439
                 atRotate.transform(new Point2D.Double(r.getMaxX()-size/2,
440
                         r.getCenterY() - (size / 2)), p);
441
                 e.setRect((int) p.getX()-size/2, (int) p.getY()-size/2, size, size);
442
                 g.rotate(Math.toRadians(-getRotation()), r.getX() + (r.getWidth() / 2),
443
                     r.getY() + (r.getHeight() / 2));
444
             }
445
        }
446

    
447
    }
448

    
449
  /*  public void drawHandlersGroup(Graphics2D g) {
450
        g.setColor(Color.gray);
451
        IFFrame[] fframes=getFFrames();
452
         for (int i = 0; i < fframes.length; i++) {
453
             IFFrame fframe = fframes[i];
454
             if (fframe.getSelected()!=IFFrame.NOSELECT){
455
                 fframe.drawHandlers(g);
456
             }
457
        }
458
    }
459
*/
460
    public boolean containsGroup(Point2D p) {
461
        IFFrame[] fframes=getFFrames();
462
         for (int i = 0; i < fframes.length; i++) {
463
            IFFrame fframe = fframes[i];
464
            if (fframe.contains(p)){
465
                return true;
466
            }
467
       }
468
     return false;
469
    }
470

    
471
    public void setSelectedGroup(Point2D p, MouseEvent e) {
472
        IFFrame[] fframes = getFFrames();
473
        if (!e.isShiftDown()) {
474
            for (int j = 0; j < fframes.length; j++) {
475
                fframes[j].setSelected(false);
476
            }
477
            for (int i = 0; i < fframes.length; i++) {
478
                IFFrame fframe = fframes[i];
479
                //if ((fframe.getSelected() == IFFrame.NOSELECT)) {
480
                    fframe.setSelected(p, e);
481
                //}
482
            }
483
        }else{
484
                 for (int i = 0; i < fframes.length; i++) {
485
                 IFFrame fframe = fframes[i];
486
                 if (fframe.contains(p)) {
487
                                        if ((fframe.getSelected() == IFFrame.NOSELECT)) {
488
                                                fframe.setSelected(p, e);
489
                                        } else {
490
                                                fframe.setSelected(false);
491
                                        }
492
                                }
493
             }
494
        }
495
    }
496

    
497
    public int getSelectedGroup() {
498
        return 0;
499
    }
500

    
501
        public Cursor getMapCursor(Point2D p) {
502
                if (!selectFFrameBasic)
503
                        return super.getMapCursor(p);
504
               return getMapCursorGroup(p);
505
    }
506
        public Cursor getMapCursorGroup(Point2D p){
507
                 int select = getContains(p);
508
                switch (select) {
509
                    case (RECT):
510
                        return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);
511
                }
512
                return null;
513
        }
514

    
515
}