Package dtk :: Package ui :: Module keymap

Source Code for Module dtk.ui.keymap

  1  #! /usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3   
  4  # Copyright (C) 2011 Deepin, Inc. 
  5  #               2011 Wang Yong 
  6  # 
  7  # Author:     Wang Yong <lazycat.manatee@gmail.com> 
  8  # Maintainer: Wang Yong <lazycat.manatee@gmail.com> 
  9  # 
 10  # This program is free software: you can redistribute it and/or modify 
 11  # it under the terms of the GNU General Public License as published by 
 12  # the Free Software Foundation, either version 3 of the License, or 
 13  # any later version. 
 14  # 
 15  # This program is distributed in the hope that it will be useful, 
 16  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 17  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 18  # GNU General Public License for more details. 
 19  # 
 20  # You should have received a copy of the GNU General Public License 
 21  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 22   
 23  import gtk.gdk as gdk 
 24  import pygtk 
 25  pygtk.require('2.0') 
 26   
27 -def get_key_name(keyval):
28 ''' 29 Get key name with given key value. 30 31 @param keyval: Key value. 32 @return: Return key name with given key value. 33 ''' 34 key_unicode = gdk.keyval_to_unicode(keyval) 35 if key_unicode == 0: 36 return gdk.keyval_name(keyval) 37 else: 38 return str(unichr(key_unicode))
39
40 -def get_key_event_modifiers(key_event):
41 ''' 42 Get key modifiers with given key event. 43 44 @param key_event: Key event. 45 @return: Return key modifier list with given key event. 46 ''' 47 modifiers = [] 48 49 # Add Ctrl modifier. 50 if key_event.state & gdk.CONTROL_MASK: 51 modifiers.append("Ctrl") 52 53 # Add Super modifiers. 54 if key_event.state & gdk.SUPER_MASK: 55 modifiers.append("Super") 56 57 # Add Hyper modifiers. 58 if key_event.state & gdk.HYPER_MASK: 59 modifiers.append("Hyper") 60 61 # Add Alt modifier. 62 if key_event.state & gdk.MOD1_MASK: 63 modifiers.append("Alt") 64 65 # Don't need add Shift modifier if keyval is upper character. 66 if key_event.state & gdk.SHIFT_MASK and (len(get_key_name(key_event.keyval)) != 1 or not gdk.keyval_is_upper(key_event.keyval)): 67 modifiers.append("Shift") 68 69 return modifiers
70
71 -def get_keyevent_name(key_event):
72 ''' 73 Get key event name. 74 75 @param key_event: Key event. 76 @return: Return key event string. 77 ''' 78 if key_event.is_modifier: 79 return "" 80 else: 81 key_modifiers = get_key_event_modifiers(key_event) 82 key_name = get_key_name(key_event.keyval) 83 if key_name == " ": 84 key_name = "Space" 85 86 if key_modifiers == []: 87 return key_name 88 else: 89 return " + ".join(key_modifiers) + " + " + key_name
90
91 -def parse_keyevent_name(keyevent_name):
92 ''' 93 Parse keyevent name. 94 95 @param keyevent_name: Key event name that return by function L{ I{get_keyevent_name} <get_keyevent_name>}. 96 @return: Return tuple that contain key value and modifier mask, (keyval, modifier_mask). 97 ''' 98 keys = keyevent_name.split(" + ") 99 if len(keys) == 1: 100 keyval = int(gdk.keyval_from_name(keys[0])) 101 modifier_mask = 0 102 else: 103 keyval = int(gdk.keyval_from_name(keys[-1])) 104 modifier_mask = 0 105 106 for modifier in keys[0:-1]: 107 if modifier == "Ctrl": 108 modifier_mask = modifier_mask | gdk.CONTROL_MASK 109 elif modifier == "Super": 110 modifier_mask = modifier_mask | gdk.SUPER_MASK 111 elif modifier == "Hyper": 112 modifier_mask = modifier_mask | gdk.HYPER_MASK 113 elif modifier == "Alt": 114 modifier_mask = modifier_mask | gdk.MOD1_MASK 115 elif modifier == "Shift": 116 modifier_mask = modifier_mask | gdk.SHIFT_MASK 117 118 if gdk.keyval_is_upper(keyval) and len(get_key_name(keyval)) == 1: 119 keyval = gdk.keyval_to_lower(keyval) 120 modifier_mask = modifier_mask | gdk.SHIFT_MASK 121 122 return (keyval, modifier_mask)
123
124 -def has_ctrl_mask(key_event):
125 ''' 126 Whether has ctrl mask in key event. 127 128 @param key_event: Key event. 129 @return: Return true if key event has ctrl mask. 130 ''' 131 return get_key_name(key_event.keyval) in ["Control_L", "Control_R"]
132
133 -def has_shift_mask(key_event):
134 ''' 135 Whether has shift mask in key event. 136 137 @param key_event: Key event. 138 @return: Return true if key event has shift mask. 139 ''' 140 return get_key_name(key_event.keyval) in ["Shift_L", "Shift_R"]
141