home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / gui / uberwidgets / keycatcher.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  2.6 KB  |  70 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import wx
  5. from collections import defaultdict
  6. from util.primitives.funcs import Delegate
  7. from gui.input import keycodes
  8. _ids = set()
  9.  
  10. def MyNewId():
  11.     if not len(_ids):
  12.         return wx.NewId()
  13.     return _ids.pop()
  14.  
  15.  
  16. def ReleaseIds(ids):
  17.     _ids.update(ids)
  18.  
  19.  
  20. class KeyCatcher(wx.EvtHandler):
  21.     
  22.     def __init__(self, frame):
  23.         frame.Bind(wx.EVT_MENU, self._oncommandevent)
  24.         self.frame = frame
  25.         self.cbs = defaultdict((lambda : Delegate(ignore_exceptions = wx.PyDeadObjectError)))
  26.         self.idcbs = { }
  27.  
  28.     
  29.     def OnDown(self, shortcut, callback):
  30.         sc = str(shortcut)
  31.         accel = keycodes(sc, accel = True)
  32.         self.cbs[accel].insert(0, callback)
  33.         self.update_table()
  34.         
  35.         def rem(accel = accel, callback = callback, shortcut = (sc,)):
  36.             self.cbs[accel].remove(callback)
  37.  
  38.         return rem
  39.  
  40.     
  41.     def update_table(self):
  42.         idcbs = self.idcbs
  43.         ReleaseIds(idcbs.keys())
  44.         idcbs.clear()
  45.         entries = []
  46.         for modifiers, key in self.cbs.iteritems():
  47.             callback = None
  48.             wxid = MyNewId()
  49.             idcbs[wxid] = callback
  50.             entries.append((modifiers, key, wxid))
  51.         
  52.         atable = wx.AcceleratorTableFromSequence(entries)
  53.         if not atable.IsOk():
  54.             print 'warning: accelerator table is not OK'
  55.         
  56.         self.frame.SetAcceleratorTable(atable)
  57.  
  58.     
  59.     def _oncommandevent(self, e):
  60.         
  61.         try:
  62.             cbs = self.idcbs[e.Id]
  63.         except KeyError:
  64.             e.Skip()
  65.  
  66.         cbs(e)
  67.         e.Skip()
  68.  
  69.  
  70.