Changeset 355:214cd900a1d2


Ignore:
Timestamp:
03/25/10 14:51:35 (3 years ago)
Author:
ddangelo
Branch:
default
Convert:
svn:76c98907-0e80-4c83-94c7-b346fc2aefc2/trunk@361
Message:

The keyboard device now supports adding bool fields which trigger on a specific key code at runtime.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • avango-display/python/avango/display/_device.py

    r351 r355  
    5656    KeyF11 = avango.SFBool() 
    5757    KeyF12 = avango.SFBool() 
     58     
     59    Key0 = avango.SFBool() 
     60    Key1 = avango.SFBool() 
     61    Key2 = avango.SFBool() 
     62    Key3 = avango.SFBool() 
     63    Key4 = avango.SFBool() 
     64    Key5 = avango.SFBool() 
     65    Key6 = avango.SFBool() 
     66    Key7 = avango.SFBool() 
     67    Key8 = avango.SFBool() 
     68    Key9 = avango.SFBool() 
     69     
     70    KeyX = avango.SFBool() 
     71    KeyZ = avango.SFBool() 
     72     
     73    KeyBackslash = avango.SFBool() 
     74    KeyCloseBracket = avango.SFBool() 
    5875  
    5976    def __init__(self): 
    6077        self.super(KeyboardDevice).__init__() 
    6178         
     79        self.__prev_keys_pressed = [] 
     80         
     81        self.__keymap = {} 
     82         
     83        self.__keymap[48] = self.Key1 
     84        self.__keymap[49] = self.Key1 
     85        self.__keymap[50] = self.Key2 
     86        self.__keymap[51] = self.Key3 
     87        self.__keymap[52] = self.Key4 
     88        self.__keymap[53] = self.Key5 
     89        self.__keymap[54] = self.Key6 
     90        self.__keymap[55] = self.Key7 
     91        self.__keymap[56] = self.Key8 
     92        self.__keymap[57] = self.Key9 
     93         
     94        self.__keymap[120] = self.KeyX 
     95        self.__keymap[122] = self.KeyZ 
     96         
     97        self.__keymap[92] = self.KeyBackslash 
     98        self.__keymap[41] = self.KeyCloseBracket 
     99         
     100    def add_key(self,name,id): 
     101        """ 
     102        Add a SFBool, which will be connected to the key press with the given id 
     103        The naming convention says that you should pass Key<Name> as name parameter.  
     104        E.g.: If you want to add the key <1> call add_key("Key1",48) 
     105        """ 
     106         
     107        #if a field with the given name is already known, no new field will be added 
     108        field = self._get_field(name) 
     109        if field: 
     110            return False 
     111         
     112        self.add_and_init_field(avango.SFBool(), name, id) 
     113        self.__keymap[id] = getattr(self, name) 
     114        self.__keymap[id].value = False 
     115         
     116        return True 
     117         
     118    def evaluate(self): 
     119         
     120        pressed_keys = [] 
     121        for k in self.KeysPressed.value: 
     122            pressed_keys.append(k) 
     123             
     124        #pressed keys 
     125        for key in pressed_keys: 
     126            if key in self.__keymap: 
     127                self.__keymap[key].value = True 
     128 
     129        #release keys 
     130        released_keys=filter(lambda x:x not in pressed_keys, self.__prev_keys_pressed) 
     131        for key in released_keys: 
     132            if key in self.__keymap: 
     133                self.__keymap[key].value = False 
     134         
     135        self.__prev_keys_pressed = pressed_keys 
     136         
     137                 
    62138    def connect(self, eventfields): 
    63139         
Note: See TracChangeset for help on using the changeset viewer.