Audio/AudioControl: Commit loads of long uncommited changes
[audiocontrol.git] / Keyboard.py
1 import Views, Events
2 import sys, curses, curses.ascii
3
4 class Source(Events.EventSource):
5
6     def __init__(self, context, win):
7         Events.EventSource.__init__(self, sys.stdin, context)
8         self._win = win
9
10     def readEvents(self):
11         return [Events.Event(self.context(),  self._win.getch())]
12
13
14 class View(Views.View):
15
16     def __init__(self, context, label, x, y, dx, dy, size=9):
17         Views.View.__init__(self, context, label, x, y, dx, dy)
18         self._size = size
19
20     def updateView(self, bindings):
21         self.win().clear()
22         self.drawFrame()
23         keys = bindings.keys()
24         keys.sort()
25         column = 2
26         row = 1
27         for key in keys:
28             keyname = curses.keyname(key.code)
29             if keyname.startswith('KEY_'):
30                 keyname = '%s' % keyname[4:10].lower()
31             if keyname[-2:-1] == '^':
32                 keyname = '%sC-%s' % (keyname[:-2],keyname[-1:].lower())
33             if curses.ascii.isupper(ord(keyname[-1:])):
34                 keyname = '%sS-%s' % (keyname[:-1],keyname[-1:].lower())
35             self.win().addstr(row, column, '%-6s %s'
36                               % (keyname, bindings[key].label[:self._size]))
37             row += 1
38             if row >= self.dy-1:
39                 row = 1
40                 column += self._size+10
41                 if column+self._size+7 >= self.dx : break
42                 self.win().vline(1,column-2,curses.ACS_VLINE,self.dy-2)
43         self.win().nooutrefresh()
44
45 def register( viewmanager,
46               dispatcher,
47               context,
48               label,
49               x,
50               y,
51               dx,
52               dy,
53               size=9):
54     viewmanager.registerView( View(context, label, x,y,dx,dy,size) )
55     dispatcher.registerSource( Source(context, viewmanager.win()) )