tuikit/driver/cursesw.py
changeset 111 b055add74b18
parent 110 cf3d49cdd6e2
child 113 6796adfdc7eb
equal deleted inserted replaced
110:cf3d49cdd6e2 111:b055add74b18
     1 import curses.ascii
     1 import curses.ascii
     2 import math
     2 import math
     3 import logging
     3 import logging
     4 
     4 
     5 from tuikit.driver.driver import Driver
     5 from tuikit.driver.driver import Driver
       
     6 from tuikit.core.events import ResizeEvent, KeypressEvent
     6 
     7 
     7 
     8 
     8 class CursesWDriver(Driver):
     9 class CursesWDriver(Driver):
     9 
    10 
    10     key_names = {
    11     key_names = {
   185             return res
   186             return res
   186         elif c == curses.KEY_MOUSE:
   187         elif c == curses.KEY_MOUSE:
   187             res += self._process_mouse()
   188             res += self._process_mouse()
   188         elif c == curses.KEY_RESIZE:
   189         elif c == curses.KEY_RESIZE:
   189             self.size.h, self.size.w = self.stdscr.getmaxyx()
   190             self.size.h, self.size.w = self.stdscr.getmaxyx()
   190             res += [('resize', self.size.w, self.size.h)]
   191             res.append(ResizeEvent(self.size.w, self.size.h))
   191         elif isinstance(c, int):
   192         elif isinstance(c, int):
   192             keyname, mod = self._split_keyname_mod(self.key_map[c])
   193             keyname, mods = self._split_keyname_mods(self.key_map[c])
   193             res += [('keypress', keyname, None, mod)]
   194             res.append(KeypressEvent(keyname, None, mods))
   194         else:
   195         else:
   195             keyname = self.key_names.get(c)
   196             keyname = self.key_names.get(c)
   196             res += [('keypress', keyname, c, set())]
   197             res.append(KeypressEvent(keyname, c, set()))
   197 
   198 
   198         return res
   199         return res
   199 
   200 
   200     def _process_mouse(self):
   201     def _process_mouse(self):
   201         out = []
   202         out = []
   238         if len(out) > 0 and out[-1][0] in ('mousedown', 'mouseup'):
   239         if len(out) > 0 and out[-1][0] in ('mousedown', 'mouseup'):
   239             self._mouse_last_pos = (None, None)
   240             self._mouse_last_pos = (None, None)
   240 
   241 
   241         return out
   242         return out
   242 
   243 
   243     def _split_keyname_mod(self, keyname):
   244     def _split_keyname_mods(self, keyname):
   244         """Parse keynames in form "shift+tab", return (keyname, mod)."""
   245         """Parse keynames in form "shift+tab", return (keyname, mod)."""
   245         mod_set = set()
   246         mod_set = set()
   246         if '+' in keyname:
   247         if '+' in keyname:
   247             parts = keyname.split('+')
   248             parts = keyname.split('+')
   248             for mod in parts[:-1]:
   249             for mod in parts[:-1]: