1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from libxyz.ui import lowui
18 from libxyz.ui import align
19 from libxyz.ui import Border
20 from libxyz.ui import Keys
21
23 """
24 Simple list box
25 """
26
27
28 resolution = (u"list_box", u"box", u"widget")
29
30 - def __init__(self, xyz, body, walker, title, dim=None):
31 """
32 @param xyz: XYZ data
33 @param body: Top-level widget
34 @param walker: SimpleWalker or any walker-like instance
35 @param title: ListBox title
36
37 Required resources: title, border, box, selected
38 """
39
40 self.xyz = xyz
41
42 if dim is None:
43 _dim = self._get_dim()
44 else:
45 _dim = dim
46
47 self._walker = walker
48 self._keys = Keys()
49
50 self.listbox = lowui.ListBox(walker)
51 self.title = title
52 self._listbox = lowui.AttrWrap(self.listbox, self._attr(u"box"))
53
54 self._box = Border(self._listbox, title, self._attr(u"title"),
55 self._attr(u"border"))
56
57 _box = lowui.Overlay(self._box, body, align.CENTER, _dim[0],
58 align.MIDDLE, _dim[1])
59
60 super(XYZListBox, self).__init__(_box)
61
62
63
64 - def show(self, dim=None, exit_keys=None):
65 """
66 Show list
67 """
68
69 exit_keys = exit_keys or []
70
71 if dim is None:
72 dim = self.xyz.screen.get_cols_rows()
73
74 while True:
75 self.xyz.screen.draw_screen(dim, self.render(dim, True))
76
77 _i = self.xyz.input.get()
78
79 if self.xyz.input.WIN_RESIZE in _i:
80 dim = self.xyz.screen.get_cols_rows()
81 continue
82
83 if _i:
84 for _k in _i:
85 if _k == self._keys.ESC:
86 return
87 elif _k == "j":
88 _k = self._keys.DOWN
89 elif _k == "k":
90 _k = self._keys.UP
91
92 self._listbox.keypress(dim, _k)
93
94
95 if _k in exit_keys:
96 return
97
98
99
101 """
102 Change title
103 """
104
105 self.title = title
106 self._box.set_title(title)
107
108
109
116
117
118
120 _dim = self.xyz.screen.get_cols_rows()
121
122 return (_dim[0] - 4, _dim[1] - 4)
123