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 ; 10 11 import rero.bridges.bind.BindEnvironment; 12 13 public class KeyBindings implements KeyEventDispatcher 14 { 15 public static boolean is_dialog_active = false; 18 protected SessionManager session; 19 protected HashMap binds; 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 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 description = new StringBuffer (); 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 getKeyModifiers(KeyEvent ev) 78 { 79 StringBuffer modifiers = new StringBuffer (); 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 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 188 { 189 private BindEnvironment bind; 190 private String desc; 191 192 public ExecuteBind(String _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 |