KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > rero > gui > KeyBindings


1 package rero.gui;
2
3 import java.awt.*;
4 import java.awt.event.*;
5
6 import java.util.*;
7 import rero.client.*;
8
9 import javax.swing.SwingUtilities JavaDoc;
10
11 import rero.bridges.bind.BindEnvironment;
12
13 public class KeyBindings implements KeyEventDispatcher
14 {
15    public static boolean is_dialog_active = false; // bad idea I know, but what can ya do? - used so scripted key bindings don't
16
// mess up dialog keyboard shortcuts.
17

18    protected SessionManager session;
19    protected HashMap binds; // a hashmap referencing the bound reference for each "session"
20

21    public KeyBindings(SessionManager s)
22    {
23        session = s;
24        binds = new HashMap();
25    }
26
27    public void removeSession(IRCSession session)
28    {
29        Iterator i = binds.keySet().iterator();
30        while (i.hasNext())
31        {
32           Object JavaDoc temp = i.next();
33           if (temp == session)
34              i.remove();
35        }
36    }
37
38    public boolean dispatchKeyEvent(KeyEvent ev)
39    {
40        if (ev.getID() != KeyEvent.KEY_PRESSED || is_dialog_active)
41        {
42            return false;
43        }
44
45        BindEnvironment temp = (BindEnvironment)binds.get(session.getActiveSession());
46
47        if (temp == null)
48        {
49           binds.put(session.getActiveSession(), session.getActiveSession().getCapabilities().getDataStructure("bindBridge"));
50           temp = (BindEnvironment)binds.get(session.getActiveSession());
51        }
52
53        StringBuffer JavaDoc description = new StringBuffer JavaDoc();
54        if (ev.getModifiers() != 0)
55        {
56           description.append(getKeyModifiers(ev));
57        }
58        
59        description.append(getKeyText(ev));
60
61        if (temp != null && temp.isBound(description.toString()))
62        {
63           SwingUtilities.invokeLater(new ExecuteBind(description.toString(), temp));
64           ev.consume();
65           return true;
66        }
67
68        if (ev.isControlDown() && ev.getKeyCode() == 9)
69        {
70           ev.consume();
71           return true;
72        }
73
74        return false;
75    }
76
77    private static String JavaDoc getKeyModifiers(KeyEvent ev)
78    {
79        StringBuffer JavaDoc modifiers = new StringBuffer JavaDoc();
80        if (ev.isShiftDown()) modifiers.append("Shift+");
81        if (ev.isControlDown()) modifiers.append("Ctrl+");
82        if (ev.isAltDown()) modifiers.append("Alt+");
83        if (ev.isMetaDown()) modifiers.append("Meta+");
84
85        return modifiers.toString();
86    }
87
88    private static String JavaDoc getKeyText(KeyEvent ev)
89    {
90       switch (ev.getKeyCode())
91       {
92          case KeyEvent.VK_ACCEPT:
93             return "Accept";
94          case KeyEvent.VK_BACK_QUOTE:
95             return "Back_Quote";
96          case KeyEvent.VK_BACK_SPACE:
97             return "Backspace";
98          case KeyEvent.VK_CAPS_LOCK:
99             return "Caps_Lock";
100          case KeyEvent.VK_CLEAR:
101             return "Clear";
102          case KeyEvent.VK_CONVERT:
103             return "Convert";
104          case KeyEvent.VK_DELETE:
105             return "Delete";
106          case KeyEvent.VK_DOWN:
107             return "Down";
108          case KeyEvent.VK_END:
109             return "End";
110          case KeyEvent.VK_ENTER:
111             return "Enter";
112          case KeyEvent.VK_ESCAPE:
113             return "Escape";
114          case KeyEvent.VK_F1:
115             return "F1";
116          case KeyEvent.VK_F2:
117             return "F2";
118          case KeyEvent.VK_F3:
119             return "F3";
120          case KeyEvent.VK_F4:
121             return "F4";
122          case KeyEvent.VK_F5:
123             return "F5";
124          case KeyEvent.VK_F6:
125             return "F6";
126          case KeyEvent.VK_F7:
127             return "F7";
128          case KeyEvent.VK_F8:
129             return "F8";
130          case KeyEvent.VK_F9:
131             return "F9";
132          case KeyEvent.VK_F10:
133             return "F10";
134          case KeyEvent.VK_F11:
135             return "F11";
136          case KeyEvent.VK_F12:
137             return "F12";
138          case KeyEvent.VK_FINAL:
139             return "Final";
140          case KeyEvent.VK_HELP:
141             return "Help";
142          case KeyEvent.VK_HOME:
143             return "Home";
144          case KeyEvent.VK_INSERT:
145             return "Insert";
146          case KeyEvent.VK_LEFT:
147             return "Left";
148          case KeyEvent.VK_NUM_LOCK:
149             return "Num_Lock";
150          case KeyEvent.VK_MULTIPLY:
151             return "NumPad_*";
152          case KeyEvent.VK_PLUS:
153             return "NumPad_+";
154          case KeyEvent.VK_COMMA:
155             return "NumPad_,";
156          case KeyEvent.VK_SUBTRACT:
157             return "NumPad_-";
158          case KeyEvent.VK_PERIOD:
159             return "Period";
160          case KeyEvent.VK_SLASH:
161             return "NumPad_/";
162          case KeyEvent.VK_PAGE_DOWN:
163             return "Page_Down";
164          case KeyEvent.VK_PAGE_UP:
165             return "Page_Up";
166          case KeyEvent.VK_PAUSE:
167             return "Pause";
168          case KeyEvent.VK_PRINTSCREEN:
169             return "Print_Screen";
170          case KeyEvent.VK_QUOTE:
171             return "Quote";
172          case KeyEvent.VK_RIGHT:
173             return "Right";
174          case KeyEvent.VK_SCROLL_LOCK:
175             return "Scroll_Lock";
176          case KeyEvent.VK_SPACE:
177             return "Space";
178          case KeyEvent.VK_TAB:
179             return "Tab";
180          case KeyEvent.VK_UP:
181             return "Up";
182          default:
183             return ev.getKeyText(ev.getKeyCode());
184       }
185    }
186
187    private static class ExecuteBind implements Runnable JavaDoc
188    {
189        private BindEnvironment bind;
190        private String JavaDoc desc;
191
192        public ExecuteBind(String JavaDoc _desc, BindEnvironment _bind)
193        {
194           desc = _desc;
195           bind = _bind;
196        }
197
198        public void run()
199        {
200           bind.processEvent(desc);
201        }
202    }
203 }
204
Popular Tags