Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / layout / EventsHandler.java @ 6071

History | View | Annotate | Download (22.2 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.IFFrameEditableVertex;
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 IFFrameEditableVertex){
140
                                ((IFFrameEditableVertex)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 IFFrameEditableVertex){
391
                                    ((IFFrameEditableVertex)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 IFFrameEditableVertex){
450
                                    if (frame.getSelected()!=IFFrame.NOSELECT && ((IFFrameEditableVertex)frame).isEditing()){
451
                                            IFFrame fframeAux=frame.cloneFFrame(layout);
452
                                            ((IFFrameEditableVertex)fframeAux).startEditing();
453
                                            ((IFFrameEditableVertex)fframeAux).pointReleased(FLayoutUtilities.toSheetPoint(E.getPoint(),layout.getAT()),((IFFrameEditableVertex)frame).getGeometry());
454
                                            layout.getEFS().modifyFFrame(frame,fframeAux);
455
                                            fframeAux.getBoundingBox(layout.getAT());
456
                                            layout.updateFFrames();
457
                                    }
458
                            }
459
                    }
460
                    layout.refresh();
461
            } else if (layout.getTool() == Layout.PAN) {
462
                zooms.setPan(p1,p2);
463
                    layout.refresh();
464
            }
465
            layout.setCancelDrawing(false);
466
        } else if (E.getButton() == MouseEvent.BUTTON3) {
467
        }
468

    
469

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

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

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

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

    
576
                                layout.getEFS().startComplexCommand();
577
                                for (int i=0;i<fframes.length;i++){
578
                                        IFFrame fframeAux=fframes[i].cloneFFrame(layout);
579
                                        Rectangle2D r=getRectMove(fframes[i].getBoundingBox(layout.getAT()),difX,difY);
580
                                        fframeAux.setBoundBox(FLayoutUtilities.toSheetRect(r,layout.getAT()));
581
                                        layout.getEFS().modifyFFrame(fframes[i],fframeAux);
582
                                }
583
                                layout.getEFS().endComplexCommand(PluginServices.getText(this,"move_elements"));
584
                                layout.updateFFrames();
585
                                layout.refresh();
586
                                break;
587
                        }
588
                }
589
                        difX=0;
590
                        difY=0;
591

    
592
        }
593

    
594
        public void keyTyped(KeyEvent arg0) {
595
                // TODO Auto-generated method stub
596

    
597
        }
598
        private Rectangle2D getRectMove(Rectangle2D r,int difX,int difY) {
599
                Rectangle2D rectMove=new Rectangle2D.Double();
600
                rectMove.setRect(r.getX()+difX,r.getY()+difY,r.getWidth(),r.getHeight());
601
                return rectMove;
602
        }
603
}