Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / layout / EventsHandler.java @ 4774

History | View | Annotate | Download (22.4 KB)

1
/*
2
 * Created on 27-jul-2004
3
 *
4
 */
5
/* 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
package com.iver.cit.gvsig.gui.layout;
46

    
47
import java.awt.Cursor;
48
import java.awt.Point;
49
import java.awt.event.ActionEvent;
50
import java.awt.event.ActionListener;
51
import java.awt.event.ComponentEvent;
52
import java.awt.event.ComponentListener;
53
import java.awt.event.KeyEvent;
54
import java.awt.event.KeyListener;
55
import java.awt.event.MouseEvent;
56
import java.awt.event.MouseListener;
57
import java.awt.event.MouseMotionListener;
58
import java.awt.geom.Point2D;
59
import java.awt.geom.Rectangle2D;
60
import java.util.ArrayList;
61

    
62
import com.iver.andami.PluginServices;
63
import com.iver.cit.gvsig.gui.layout.fframes.IFFrame;
64
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameEditable;
65
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameGroupSelectable;
66

    
67

    
68
/**
69
 * Eventos que se realizan sobre el Layout.
70
 *
71
 * @author Vicente Caballero Navarro
72
 */
73
public class EventsHandler implements ActionListener, ComponentListener,
74
    MouseMotionListener, MouseListener, KeyListener {
75
    private Layout layout = null;
76
    private Point2D.Double m_pointSelected = null;
77
    private int index = 0;
78
    private ArrayList lastSelect = new ArrayList();
79
    private FLayoutFunctions events = null;
80
    private FLayoutZooms zooms = null;
81
    private static IFFrame[] selectFFrames;
82
    private int difX;
83
    private int difY;
84
    /**
85
     * Crea un nuevo EventsHandler.
86
     *
87
     * @param l Referencia al Layout.
88
     */
89
    public EventsHandler(Layout l) {
90
        layout = l;
91
        events = new FLayoutFunctions(layout);
92
        zooms = new FLayoutZooms(layout);
93
    }
94

    
95
    /**
96
     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
97
     */
98
    public void componentHidden(ComponentEvent arg0) {
99
    }
100

    
101
    /**
102
     * @see java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent)
103
     */
104
    public void componentMoved(ComponentEvent arg0) {
105
    }
106

    
107
    /**
108
     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
109
     */
110
    public void componentResized(ComponentEvent arg0) {
111
        layout.fullRect();
112
    }
113

    
114
    /**
115
     * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)
116
     */
117
    public void componentShown(ComponentEvent arg0) {
118
    }
119

    
120
    /**
121
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
122
     */
123
    public void actionPerformed(ActionEvent arg0) {
124
        layout.repaint();
125
    }
126

    
127
    /**
128
     * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
129
     */
130
    public void mouseDragged(MouseEvent e) {
131
        if (e.getButton() != MouseEvent.BUTTON3) {
132
            layout.setLastPoint(e.getPoint());
133
            layout.repaint();
134
        }
135
        if (layout.getTool() == Layout.EDIT){
136
                IFFrame[] fframes=layout.getFFrames();
137
                for (int i=0;i<fframes.length;i++){
138
                        IFFrame frame=fframes[i];
139
                        if (frame instanceof IFFrameEditable){
140
                                ((IFFrameEditable)frame).pointDragged(FLayoutUtilities.toSheetPoint(e.getPoint(),layout.getAT()));
141
                                layout.setStatus(Layout.GRAPHICS);
142

    
143
                        }
144
                }
145

    
146
        }
147
    }
148

    
149
    /**
150
     * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
151
     */
152
    public void mouseMoved(MouseEvent E) {
153
       if ((layout.getTool() == Layout.POLYLINE) ||
154
                (layout.getTool() == Layout.POLYGON) ||
155
                (layout.getTool() == Layout.LINE) ||
156
                (layout.getTool() == Layout.CIRCLE) ||
157
                (layout.getTool() == Layout.RECTANGLESIMPLE)) {
158
            layout.getGeometryAdapter().pointPosition(FLayoutUtilities.toSheetPoint(
159
                    E.getPoint(), layout.getAT()));
160
            layout.setStatus(Layout.GRAPHICS);
161
            layout.repaint();
162
        }
163

    
164
        if (layout.getTool() == Layout.SELECT) {
165
            Cursor cursor = null;
166
            Point2D.Double p = new Point2D.Double(E.getX(), E.getY());
167
            IFFrame[] fframes=layout.getFFrameSelected();
168
            for (int i = 0; i < fframes.length; i++) {
169
                if (fframes[i].getContains(p)!=IFFrame.NOSELECT){
170
                        cursor=fframes[i].getMapCursor(p);
171
                }
172
                if (cursor != null) {
173
                    layout.setMapCursor(cursor);
174
                } else {
175
                    layout.setMapCursor(Layout.icrux);
176
                }
177
            }
178
            ///layout.setStatus(Layout.SELECT);
179
        }
180
    }
181

    
182
    /**
183
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
184
     */
185
    public void mouseClicked(MouseEvent E) {
186
            if ((E.getClickCount() == 2) &&
187
                ((layout.getTool() == Layout.POLYLINE) ||
188
                (layout.getTool() == Layout.POLYGON))) {
189
                    delLastPoint();
190
            endGraphic();
191
        } else {
192
            if (E.getButton() == MouseEvent.BUTTON1) {
193
                if (layout.getTool() == Layout.SELECT) {
194
                    m_pointSelected = new Point2D.Double(E.getX(), E.getY());
195
                    IFFrame[] fframes=layout.getFFrames();
196
                    if (fframes.length > 0) {
197
                        ArrayList listSelect = new ArrayList();
198
                        for (int j = 0; j < fframes.length; j++) {
199
                            if (fframes[j].getContains(
200
                                        m_pointSelected) != IFFrame.NOSELECT) {
201
                                listSelect.add(fframes[j]);
202
                            }
203
                        }
204

    
205
                        if (listSelect.size() > 0) {
206
                            for (int k = 0; k < listSelect.size(); k++) {
207
                                if (((IFFrame) listSelect.get(k)).getSelected() != IFFrame.NOSELECT) {
208
                                    index = listSelect.size() - k;
209

    
210
                                    break;
211
                                }
212
                            }
213

    
214
                            if (!FLayoutUtilities.isEqualList(listSelect,
215
                                        lastSelect) ||
216
                                    (index > (listSelect.size() - 1))) {
217
                                index = 0;
218
                            }
219
                            for (int j = 0; j < fframes.length;
220
                                    j++) {
221
                                IFFrame fframe = fframes[j];
222

    
223
                                if (!E.isShiftDown()) {
224
                                    fframe.setSelected(false);
225
                                } else {
226
                                    if (fframe.getSelected() != IFFrame.NOSELECT) {
227
                                        if (fframe.getContains(m_pointSelected) != IFFrame.NOSELECT) {
228
                                            fframe.setSelected(false);
229
                                        }
230
                                    }
231
                                }
232
                            }
233

    
234
                            ((IFFrame) listSelect.get((listSelect.size() - 1 -
235
                                index))).setSelected(true);
236
                            index++;
237
                            lastSelect = listSelect;
238
                        }
239

    
240
                        layout.setStatus(Layout.SELECT);
241
                        layout.repaint();
242

    
243
                        if (E.getClickCount() > 1) {
244
                            FLayoutGraphics flg = new FLayoutGraphics(layout);
245
                            flg.openFFrameDialog();
246
                            layout.setStatus(Layout.DESACTUALIZADO);
247
                            layout.repaint();
248

    
249
                            //layout.setStatus(Layout.SELECT);
250
                        }
251
                    }
252

    
253
                    PluginServices.getMainFrame().enableControls();
254
                }
255
            } else if (E.getButton() == MouseEvent.BUTTON2) {
256
            }
257
        }
258
    }
259

    
260
    /**
261
     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
262
     */
263
    public void mouseEntered(MouseEvent arg0) {
264
        /* TODO        PluginServices.getMainFrame().getStatusBar().setMessage("0",
265
           layout.getAtributes().getNameUnit());
266

267
        if (layout.getTool() == Layout.PAN) {
268
            layout.setMapCursor(Layout.iLayoutpan);
269
        } else if (layout.getTool() == Layout.ZOOM_MAS) {
270
            layout.setMapCursor(Layout.iLayoutzoomin);
271
        } else if (layout.getTool() == Layout.ZOOM_MENOS) {
272
            layout.setMapCursor(Layout.iLayoutzoomout);
273
        } else if (layout.getTool() == Layout.VIEW_PAN) {
274
            layout.setMapCursor(Layout.ipan);
275
        } else if (layout.getTool() == Layout.VIEW_ZOOMIN) {
276
            layout.setMapCursor(Layout.izoomin);
277
        } else if (layout.getTool() == Layout.VIEW_ZOOMOUT) {
278
            layout.setMapCursor(Layout.izoomout);
279
        }
280
        */
281
    }
282

    
283
    /**
284
     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
285
     */
286
    public void mouseExited(MouseEvent arg0) {
287
        ///TODO        PluginServices.getMainFrame().getStatusBar().setMessage("0", "");
288
    }
289

    
290
    /**
291
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
292
     */
293
    public void mousePressed(MouseEvent E) {
294
        if (E.getButton() == MouseEvent.BUTTON1) {
295
            Point pScreen = new Point(E.getX(), E.getY());
296
            layout.setPointAnt(pScreen);
297
            layout.setFirstPoint(layout.getPointAnt());
298

    
299
            if ((layout.getTool() == Layout.ZOOM_MAS) ||
300
                    (layout.getTool() == Layout.VIEW_ZOOMIN)) {
301
                layout.setStatus(Layout.ZOOM_MAS);
302
            } else if ((layout.getTool() == Layout.RECTANGLEVIEW) ||
303
                    (layout.getTool() == Layout.RECTANGLEPICTURE) ||
304
                    (layout.getTool() == Layout.RECTANGLESCALEBAR) ||
305
                    (layout.getTool() == Layout.RECTANGLELEGEND) ||
306
                    (layout.getTool() == Layout.RECTANGLENORTH) ||
307
                    (layout.getTool() == Layout.RECTANGLETEXT)||
308
                    (layout.getTool() == Layout.RECTANGLEBOX)) {
309
                layout.setStatus(Layout.RECTANGLE);
310
            } else if ((layout.getTool() == Layout.POINT) ) {
311
                    layout.getGeometryAdapter().addPoint(FLayoutUtilities.toSheetPoint(
312
                        E.getPoint(), layout.getAT()));
313
                    endGraphic();
314
                //layout.setStatus(Layout.GRAPHICS);
315
            } else if ((layout.getTool() == Layout.POLYLINE) ||
316
                    (layout.getTool() == Layout.POLYGON)) {
317
                layout.getGeometryAdapter().addPoint(FLayoutUtilities.toSheetPoint(
318
                        E.getPoint(), layout.getAT()));
319
                layout.setStatus(Layout.GRAPHICS);
320
            } else if ((layout.getTool() == Layout.LINE) ||
321
                    (layout.getTool() == Layout.CIRCLE) ||
322
                    (layout.getTool() == Layout.RECTANGLESIMPLE)) {
323
                if (layout.getGeometryAdapter().addPoint(FLayoutUtilities.toSheetPoint(
324
                                E.getPoint(), layout.getAT())) == 2) {
325
                    endGraphic();
326
                    layout.setStatus(Layout.DESACTUALIZADO);
327
                } else {
328
                    layout.setStatus(Layout.GRAPHICS);
329
                }
330
            } else if (layout.getTool() == Layout.PAN) {
331
                layout.getRectOrigin().setLocation(layout.getRect().x,
332
                    layout.getRect().y);
333
                layout.setStatus(Layout.PAN);
334
            } else if (layout.getTool() == Layout.VIEW_PAN) {
335
                /*        layout.getRectOrigin().setLocation(layout.getRect().x,
336
                   layout.getRect().y);
337
                 */
338
                layout.setStatus(Layout.VIEW_PAN);
339
            } else if (layout.getTool() == Layout.ZOOM_MENOS) {
340
                layout.setCancelDrawing(true);
341
            } else if ((layout.getTool() == Layout.ZOOM_MAS) ||
342
                    (layout.getTool() == Layout.PAN)) {
343
                layout.setCancelDrawing(true);
344
            } else if (layout.getTool() == Layout.SELECT) {
345
                m_pointSelected = new Point2D.Double(E.getX(), E.getY());
346
                IFFrame[] fframes=layout.getFFrames();
347
                for (int i = 0; i < fframes.length; i++) {
348
                    IFFrame fframe = fframes[i];
349

    
350
                    if (m_pointSelected != null) {
351
                        if (!E.isShiftDown()) {
352
                            if ((fframe.getSelected() != IFFrame.NOSELECT)) {
353
                                fframe.setSelected(m_pointSelected,E);
354
                            }
355
                        }else if (fframe instanceof IFFrameGroupSelectable){
356
                                    fframe.setSelected(m_pointSelected,E);
357
                        }
358
                    }
359

    
360
                    if (fframe.getSelected() != IFFrame.NOSELECT) {
361
                        layout.setIsReSel(false);
362
                    }
363
                }
364

    
365
                if ((layout.getLastPoint() != null) &&
366
                        (layout.getFirstPoint() != null)) {
367
                    layout.getLastPoint().setLocation(layout.getFirstPoint());
368
                }
369

    
370
                if (E.getClickCount() < 2) {
371
                    layout.setStatus(Layout.SELECT);
372
                    layout.repaint();
373
                }
374
            } else if (layout.getTool() == Layout.SET_TAG) {
375
                m_pointSelected = new Point2D.Double(E.getX(), E.getY());
376
                IFFrame[] fframes=layout.getFFrames();
377
                for (int i = 0; i < fframes.length; i++) {
378
                    IFFrame fframe = fframes[i];
379

    
380
                    if (m_pointSelected != null) {
381
                        if (fframe.contains(m_pointSelected)) {
382
                            fframe.openTag();
383
                        }
384
                    }
385
                }
386
            } else if (layout.getTool() == Layout.EDIT){
387
                    IFFrame[] fframes=layout.getFFrames();
388
                    for (int i=0;i<fframes.length;i++){
389
                            IFFrame frame=fframes[i];
390
                            if (frame instanceof IFFrameEditable){
391
                                    ((IFFrameEditable)frame).pointPressed(FLayoutUtilities.toSheetPoint(E.getPoint(),layout.getAT()));
392
                            }
393
                    }
394
            }
395
        } else if (E.getButton() == MouseEvent.BUTTON3) {
396
            new Popupmenu(layout, E.getPoint());
397
        }
398
    }
399

    
400
    /**
401
     * @see java.awt.event.MouseListener#mouseReleassed(java.awt.event.MouseEvent)
402
     */
403
    public void mouseReleased(MouseEvent E) {
404
        if (E.getButton() != MouseEvent.BUTTON3) {
405
            layout.setLastPoint(E.getPoint());
406
        }
407

    
408
        if (E.getButton() == MouseEvent.BUTTON1) {
409
            Point p1 = layout.getFirstPoint();
410
            Point p2 = new Point(E.getX(), E.getY());
411

    
412
            if (layout.getTool() == Layout.ZOOM_MAS) {
413
                zooms.setZoomIn(p1, p2);
414
                layout.refresh();
415
            } else if ((layout.getTool() == Layout.ZOOM_MENOS) ||
416
                    (E.getButton() == MouseEvent.BUTTON3)) {
417
                zooms.setZoomOut(p2);
418
                layout.refresh();
419
            } else if (layout.getTool() == Layout.SELECT) {
420
                events.setSelect();
421
                layout.refresh();
422
            } else if ((layout.getTool() == Layout.RECTANGLEVIEW) ||
423
                    (layout.getTool() == Layout.RECTANGLEPICTURE) ||
424
                    (layout.getTool() == Layout.RECTANGLESCALEBAR) ||
425
                    (layout.getTool() == Layout.RECTANGLELEGEND) ||
426
                    (layout.getTool() == Layout.RECTANGLETEXT) ||
427
                    (layout.getTool() == Layout.RECTANGLENORTH)||
428
                    (layout.getTool() == Layout.RECTANGLEBOX)) {
429
                events.addFFrame();
430
                PluginServices.getMainFrame().enableControls();
431
                layout.refresh();
432
            } else if (layout.getTool() == Layout.VIEW_ZOOMIN) {
433
                zooms.setViewZoomIn(p1, p2);
434
                layout.refresh();
435
            } else if (layout.getTool() == Layout.VIEW_ZOOMOUT) {
436
                zooms.setViewZoomOut(p2);
437
                layout.refresh();
438
            } else if (layout.getTool() == Layout.VIEW_PAN) {
439
                events.setViewPan(p1, p2);
440
                layout.refresh();
441
            } else if ((layout.getTool() == Layout.POLYLINE) ||
442
                    (layout.getTool() == Layout.POLYGON)) {
443
                layout.setStatus(Layout.GRAPHICS);
444
                layout.repaint();
445
            } else if (layout.getTool() == Layout.EDIT){
446
                    IFFrame[] fframes=layout.getFFrames();
447
                    for (int i=0;i<fframes.length;i++){
448
                            IFFrame frame=fframes[i];
449
                            if (frame instanceof IFFrameEditable){
450
                                    if (frame.getSelected()!=IFFrame.NOSELECT && ((IFFrameEditable)frame).isEditing()){
451
                                            /*IFFrame fframeAux=frame.cloneFFrame(layout);
452
                                            //((IFFrameEditable)fframeAux).startEditing();
453
                                            ((IFFrameEditable)fframeAux).pointReleased(FLayoutUtilities.toSheetPoint(E.getPoint(),layout.getAT()));
454
                                            layout.getEFS().modifyFFrame(frame,fframeAux);
455
                                            layout.updateFFrames();*/
456
                                            IFFrame fframeAux=frame.cloneFFrame(layout);
457
                                            ((IFFrameEditable)fframeAux).startEditing();
458
                                            ((IFFrameEditable)fframeAux).pointReleased(FLayoutUtilities.toSheetPoint(E.getPoint(),layout.getAT()),((IFFrameEditable)frame).getGeometry());
459
                                            layout.getEFS().modifyFFrame(frame,fframeAux);
460
                                            fframeAux.getBoundingBox(layout.getAT());
461
                                            layout.updateFFrames();
462
                                    }
463
                            }
464
                    }
465
                    layout.refresh();
466
            } else if (layout.getTool() == Layout.PAN) {
467
                layout.refresh();
468
            }
469
            ///layout.refresh();
470
            layout.setCancelDrawing(false);
471
        } else if (E.getButton() == MouseEvent.BUTTON3) {
472
        }
473

    
474

    
475
    }
476
    private void delLastPoint(){
477
            layout.getGeometryAdapter().delLastPoint();
478
    }
479
    /**
480
     * DOCUMENT ME!
481
     */
482
    private void endGraphic() {
483
        if ((layout.getTool() == Layout.LINE) ||
484
                (layout.getTool() == Layout.POLYLINE) ||
485
                (layout.getTool() == Layout.POLYGON) ||
486
                (layout.getTool() == Layout.CIRCLE) ||
487
                (layout.getTool() == Layout.RECTANGLESIMPLE) ||
488
                (layout.getTool() == Layout.POINT)) {
489
            layout.getGeometryAdapter().end();
490
            PluginServices.getMainFrame().enableControls();
491
            events.addFFrame();
492
            layout.initGeometryAdapter();
493
            layout.refresh();
494
        }
495
    }
496

    
497
        public void keyPressed(KeyEvent arg0) {
498
                IFFrame[] fframes=layout.getFFrameSelected();
499
                int dif=10;
500
                if (arg0.getModifiers()==KeyEvent.CTRL_MASK){
501
                switch(arg0.getKeyCode()){
502
                case (KeyEvent.VK_C):
503
                        selectFFrames=new IFFrame[fframes.length];
504
                        for (int i=0;i<fframes.length;i++){
505
                                selectFFrames[i]=fframes[i].cloneFFrame(layout);
506
                        }
507
                        break;
508
                case KeyEvent.VK_X:
509
                        selectFFrames=new IFFrame[fframes.length];
510
                        for (int i=0;i<fframes.length;i++){
511
                                selectFFrames[i]=fframes[i].cloneFFrame(layout);
512
                        }
513
                        layout.delFFrameSelected();
514
                        layout.refresh();
515
                        break;
516

    
517
                }
518
                }else{
519
                switch (arg0.getKeyCode()) {
520
                case KeyEvent.VK_LEFT:
521
                        difX=difX-dif;
522
                        break;
523
                case KeyEvent.VK_RIGHT:
524
                        difX=difX+dif;
525
                        break;
526
                case KeyEvent.VK_UP:
527
                        difY=difY-dif;
528
                        break;
529
                case KeyEvent.VK_DOWN:
530
                        difY=difY+dif;
531
                        break;
532
                }
533
        /*        if (isFirst){
534
                        layout.setFirstPoint(new Point((int)fframes[0].getBoundingBox(layout.getAT()).getX(),(int)fframes[0].getBoundingBox(layout.getAT()).getY()));
535
                        isFirst=false;
536
                }
537
                layout.setLastPoint(new Point((int)layout.getFirstPoint().getX()+difX,(int)layout.getFirstPoint().getY()+difY));
538
                layout.setStatus(Layout.SELECT);
539
                layout.repaint();
540
                */
541
                }
542
        }
543

    
544
        public void keyReleased(KeyEvent arg0) {
545
                IFFrame[] fframes=layout.getFFrameSelected();
546
                if (arg0.getModifiers()==KeyEvent.CTRL_MASK){
547
                        switch(arg0.getKeyCode()){
548
                        case KeyEvent.VK_V:
549
                                IFFrame copyFFrame=null;
550
                                layout.getEFS().startComplexCommand();
551
                                for (int i=0;i<selectFFrames.length;i++){
552
                                        copyFFrame=selectFFrames[i].cloneFFrame(layout);
553
                                        if (i==0)
554
                                                layout.addFFrame(copyFFrame,true,true);
555
                                        else
556
                                                layout.addFFrame(copyFFrame,false,true);
557
                                }
558
                                layout.getEFS().endComplexCommand();
559
                                layout.refresh();
560
                                break;
561
                        case KeyEvent.VK_Z:
562
                                layout.getEFS().undo();
563
                                layout.updateFFrames();
564
                                layout.refresh();
565
                                PluginServices.getMainFrame().enableControls();
566
                                break;
567
                        case KeyEvent.VK_Y:
568
                                layout.getEFS().redo();
569
                                layout.updateFFrames();
570
                                layout.refresh();
571
                                PluginServices.getMainFrame().enableControls();
572
                                break;
573
                        }
574
                }else{
575
                        switch (arg0.getKeyCode()) {
576
                        case KeyEvent.VK_LEFT:
577
                        case KeyEvent.VK_RIGHT:
578
                        case KeyEvent.VK_UP:
579
                        case KeyEvent.VK_DOWN:
580

    
581
                                layout.getEFS().startComplexCommand();
582
                                for (int i=0;i<fframes.length;i++){
583
                                        IFFrame fframeAux=fframes[i].cloneFFrame(layout);
584
                                        Rectangle2D r=getRectMove(fframes[i].getBoundingBox(layout.getAT()),difX,difY);
585
                                        fframeAux.setBoundBox(FLayoutUtilities.toSheetRect(r,layout.getAT()));
586
                                        layout.getEFS().modifyFFrame(fframes[i],fframeAux);
587
                                }
588
                                layout.getEFS().endComplexCommand();
589
                                layout.updateFFrames();
590
                                layout.refresh();
591
                                break;
592
                        }
593
                }
594
                        difX=0;
595
                        difY=0;
596

    
597
        }
598

    
599
        public void keyTyped(KeyEvent arg0) {
600
                // TODO Auto-generated method stub
601

    
602
        }
603
        private Rectangle2D getRectMove(Rectangle2D r,int difX,int difY) {
604
                Rectangle2D rectMove=new Rectangle2D.Double();
605
                rectMove.setRect(r.getX()+difX,r.getY()+difY,r.getWidth(),r.getHeight());
606
                return rectMove;
607
        }
608
}