author | Radek Brich <radek.brich@devl.cz> |
Fri, 14 Dec 2012 10:20:14 +0100 | |
changeset 32 | 088b92ffb119 |
parent 30 | 05500124d7fb |
child 34 | e3beacd5e536 |
permissions | -rw-r--r-- |
0 | 1 |
# -*- coding: utf-8 -*- |
2 |
||
18
e6c3a5ee91aa
Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents:
16
diff
changeset
|
3 |
from tuikit.widget import Widget |
0 | 4 |
|
5 |
||
6 |
class Button(Widget): |
|
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
7 |
|
13
19ebde2fd594
Add more generated documentation.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
8 |
'''Clickable button.''' |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
9 |
|
0 | 10 |
def __init__(self, label=''): |
13
19ebde2fd594
Add more generated documentation.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
11 |
'''Create button with given label, size according to label.''' |
16
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
12 |
w = len(label) + 4 |
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
13 |
h = 1 |
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
14 |
Widget.__init__(self, w, h) |
0 | 15 |
|
13
19ebde2fd594
Add more generated documentation.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
16 |
#: Button label. |
0 | 17 |
self.label = label |
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
18 |
#: Text or graphics to be added before label |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
19 |
self.prefix = '[' |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
20 |
#: Text or graphics to be added after label |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
21 |
self.suffix = ']' |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
22 |
#: How should label be aligned if button has excess space - center | left | right |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
23 |
self.align = 'center' |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
24 |
|
7
d4a291b31cbb
New color management - named colors.
Radek Brich <radek.brich@devl.cz>
parents:
2
diff
changeset
|
25 |
self.bg = 'button' |
d4a291b31cbb
New color management - named colors.
Radek Brich <radek.brich@devl.cz>
parents:
2
diff
changeset
|
26 |
self.bghi = 'button-active' |
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
27 |
self.highlight = False |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
28 |
|
16
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
29 |
# size |
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
30 |
self.sizereq.w = w |
8791a7da6835
Update VerticalLayout/HorizontalLayout. Add layout demo. Add Size, Borders to common. Update Coords, Rect.
Radek Brich <radek.brich@devl.cz>
parents:
13
diff
changeset
|
31 |
self.sizereq.h = h |
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
32 |
|
0 | 33 |
self.connect('draw', self.on_draw) |
34 |
self.connect('mousedown', self.on_mousedown) |
|
35 |
self.connect('mouseup', self.on_mouseup) |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
36 |
self.connect('keypress', self.on_keypress) |
0 | 37 |
|
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
38 |
self.add_events('click') |
0 | 39 |
|
40 |
||
41 |
def on_draw(self, screen, x, y): |
|
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
42 |
pad = self.width - len(self.label) - len(self.prefix) - len(self.suffix) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
43 |
lpad, rpad = self._divide_padding(pad) |
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
44 |
screen.pushcolor(self.getcolor()) |
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
45 |
# prefix |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
46 |
screen.puts(x, y, self.prefix) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
47 |
pos = len(self.prefix) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
48 |
# left pad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
49 |
screen.puts(x + pos, y, ' ' * lpad) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
50 |
pos += lpad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
51 |
# label |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
52 |
screen.puts(x + pos, y, self.label) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
53 |
pos += len(self.label) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
54 |
# right pad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
55 |
screen.puts(x + pos, y, ' ' * rpad) |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
56 |
pos += rpad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
57 |
# suffix |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
58 |
screen.puts(x + pos, y, self.suffix) |
0 | 59 |
screen.popcolor() |
60 |
||
61 |
||
62 |
def on_mousedown(self, ev): |
|
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
63 |
self.highlight = True |
0 | 64 |
self.redraw() |
65 |
||
66 |
||
67 |
def on_mouseup(self, ev): |
|
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
68 |
self.highlight = False |
0 | 69 |
self.redraw() |
70 |
||
71 |
if self.enclose(ev.px, ev.py): |
|
72 |
self.handle('click') |
|
73 |
||
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
74 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
75 |
def on_keypress(self, keyname, char): |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
76 |
if keyname == 'enter': |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
77 |
self.handle('click') |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
78 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
79 |
|
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
80 |
def getcolor(self): |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
7
diff
changeset
|
81 |
if self.highlight or self.hasfocus(): |
2
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
82 |
return self.bghi |
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
83 |
return self.bg |
684cdc352562
Menu, Window and other improvements.
Radek Brich <radek.brich@devl.cz>
parents:
0
diff
changeset
|
84 |
|
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
85 |
def _divide_padding(self, pad): |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
86 |
# default is 'left' |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
87 |
lpad, rpad = 0, pad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
88 |
if self.align == 'center': |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
89 |
lpad = pad // 2 |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
90 |
rpad = pad - lpad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
91 |
elif self.align == 'right': |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
92 |
lpad, rpad = pad, 0 |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
93 |
return lpad, rpad |
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
94 |