Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / layout / LayoutKeyEvent.java @ 21358

History | View | Annotate | Download (4.77 KB)

1 7304 caballero
package com.iver.cit.gvsig.project.documents.layout;
2
3
import java.awt.KeyEventDispatcher;
4
import java.awt.event.KeyEvent;
5
import java.awt.geom.Rectangle2D;
6
7
import com.iver.andami.PluginServices;
8
import com.iver.andami.ui.mdiManager.IWindow;
9
import com.iver.cit.gvsig.project.documents.layout.fframes.IFFrame;
10 9392 caballero
import com.iver.cit.gvsig.project.documents.layout.gui.Layout;
11 7304 caballero
12
public class LayoutKeyEvent implements KeyEventDispatcher{
13 9807 caballero
        private static IFFrame[] selectFFrames=new IFFrame[0];
14 7304 caballero
    private int difX;
15
    private int difY;
16
17 9807 caballero
        public static boolean copy(Layout layout) {
18
                IFFrame[] fframes = layout.getLayoutContext().getFFrameSelected();
19
                if (fframes.length==0)
20
                        return false;
21
                selectFFrames = new IFFrame[fframes.length];
22
                for (int i = 0; i < fframes.length; i++) {
23
                        selectFFrames[i] = fframes[i].cloneFFrame(layout);
24
                }
25
                return true;
26
        }
27
        public static boolean cut(Layout layout) {
28
                IFFrame[] fframes = layout.getLayoutContext().getFFrameSelected();
29
                if (fframes.length==0)
30
                        return false;
31
                selectFFrames = new IFFrame[fframes.length];
32
                for (int i = 0; i < fframes.length; i++) {
33
                        selectFFrames[i] = fframes[i].cloneFFrame(layout);
34
                }
35
                layout.getLayoutContext().delFFrameSelected();
36
                layout.getLayoutContext().callLayoutDrawListeners();
37
                return true;
38
        }
39
        public static boolean paste(Layout layout) {
40
                IFFrame copyFFrame = null;
41 21358 vcaballero
                layout.getLayoutContext().getFrameCommandsRecord().startComplex();
42 9807 caballero
                for (int i = 0; i < selectFFrames.length; i++) {
43
                        copyFFrame = selectFFrames[i].cloneFFrame(layout);
44
                        if (i == 0)
45
                                layout.getLayoutContext().addFFrame(copyFFrame, true, true);
46
                        else
47
                                layout.getLayoutContext().addFFrame(copyFFrame, false, true);
48
                }
49 21358 vcaballero
                layout.getLayoutContext().getFrameCommandsRecord().endComplex(
50 9807 caballero
                                PluginServices.getText(layout, "paste_elements"));
51
                layout.getLayoutContext().callLayoutDrawListeners();
52
                return true;
53
        }
54
        public static boolean undo(Layout layout) {
55 21358 vcaballero
                layout.getLayoutContext().getFrameCommandsRecord().undo();
56 9807 caballero
                layout.getLayoutContext().updateFFrames();
57
                layout.getLayoutContext().callLayoutDrawListeners();
58
                PluginServices.getMainFrame().enableControls();
59
                return true;
60
        }
61
        public static boolean redo(Layout layout) {
62 21358 vcaballero
                layout.getLayoutContext().getFrameCommandsRecord().redo();
63 9807 caballero
                layout.getLayoutContext().updateFFrames();
64
                layout.getLayoutContext().callLayoutDrawListeners();
65
                PluginServices.getMainFrame().enableControls();
66
                return true;
67
        }
68
69
    public boolean dispatchKeyEvent(KeyEvent e) {
70 7304 caballero
                IWindow view = PluginServices.getMDIManager().getActiveWindow();
71
72 9807 caballero
                if (e.getID() == KeyEvent.KEY_PRESSED || !(view instanceof Layout) || !(e.getSource() instanceof LayoutControl))
73 7304 caballero
                        return false;
74
                Layout layout=(Layout)view;
75 9392 caballero
                if (!layout.getLayoutContext().isEditable())
76 7304 caballero
                        return false;
77 9392 caballero
                IFFrame[] fframes = layout.getLayoutContext().getFFrameSelected();
78 7304 caballero
                int dif = 10;
79
                if (e.getModifiers() == KeyEvent.CTRL_MASK) {
80
                        switch (e.getKeyCode()) {
81
                        case KeyEvent.VK_C:
82 9807 caballero
                                copy(layout);
83 7304 caballero
                                break;
84
                        case KeyEvent.VK_X:
85 9807 caballero
                                cut(layout);
86 7304 caballero
                                break;
87
                        case KeyEvent.VK_V:
88 9807 caballero
                                paste(layout);
89 7304 caballero
                                break;
90
                        case KeyEvent.VK_Z:
91 9807 caballero
                                undo(layout);
92 7304 caballero
                                break;
93
                        case KeyEvent.VK_Y:
94 9807 caballero
                                redo(layout);
95 7304 caballero
                                break;
96
                        }
97
                } else {
98
                        switch (e.getKeyCode()) {
99
                        case KeyEvent.VK_LEFT:
100
                                difX = difX - dif;
101
                                break;
102
103
                        case KeyEvent.VK_RIGHT:
104
                                difX = difX + dif;
105
                                break;
106
                        case KeyEvent.VK_UP:
107
                                difY = difY - dif;
108
                                break;
109
                        case KeyEvent.VK_DOWN:
110
                                difY = difY + dif;
111
                                break;
112
                        case KeyEvent.VK_DELETE:
113
                        case KeyEvent.VK_BACK_SPACE:
114 9392 caballero
                                layout.getLayoutContext().delFFrameSelected();
115
                                layout.getLayoutControl().refresh();
116 7304 caballero
                                break;
117
                        }
118
                        if (e.getKeyCode()==KeyEvent.VK_LEFT || e.getKeyCode()==KeyEvent.VK_RIGHT || e.getKeyCode()==KeyEvent.VK_UP || e.getKeyCode()==KeyEvent.VK_DOWN) {
119
                                if (fframes.length==0)
120
                                        return false;
121 21358 vcaballero
                                layout.getLayoutContext().getFrameCommandsRecord().startComplex();
122 7304 caballero
                        for (int i = 0; i < fframes.length; i++) {
123
                                IFFrame fframeAux = fframes[i].cloneFFrame(layout);
124
                                Rectangle2D r = getRectMove(fframes[i]
125 9392 caballero
                                                .getBoundingBox(layout.getLayoutControl().getAT()), difX, difY);
126 7304 caballero
                                fframeAux.setBoundBox(FLayoutUtilities.toSheetRect(r,
127 9392 caballero
                                                layout.getLayoutControl().getAT()));
128 21358 vcaballero
                                layout.getLayoutContext().getFrameCommandsRecord().update(fframes[i], fframeAux);
129 7304 caballero
                        }
130 21358 vcaballero
                        layout.getLayoutContext().getFrameCommandsRecord().endComplex(
131 7304 caballero
                                        PluginServices.getText(this, "move_elements"));
132 9392 caballero
                        layout.getLayoutContext().updateFFrames();
133
                        layout.getLayoutControl().refresh();
134 7304 caballero
                        }
135
                        difX = 0;
136
                        difY = 0;
137
138
                }
139
                return true;
140
        }
141
        private Rectangle2D getRectMove(Rectangle2D r,int difX,int difY) {
142
                Rectangle2D rectMove=new Rectangle2D.Double();
143
                rectMove.setRect(r.getX()+difX,r.getY()+difY,r.getWidth(),r.getHeight());
144
                return rectMove;
145
        }
146 9807 caballero
        public static boolean hasSelection() {
147
                return selectFFrames.length>0;
148
        }
149 7304 caballero
150
}