author | Radek Brich <radek.brich@devl.cz> |
Sun, 15 Feb 2015 17:50:24 +0100 | |
changeset 116 | 165b5d65e1cb |
parent 115 | b4ff7392003a |
child 117 | 8680c2333546 |
permissions | -rw-r--r-- |
93 | 1 |
from .layout import Layout |
2 |
||
3 |
||
4 |
class FixedLayout(Layout): |
|
5 |
||
116
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
6 |
"""Widgets are placed on fixed position as specified in `sizereq`. |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
7 |
|
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
8 |
Align hints (kwargs to :meth:`add`): |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
9 |
* halign = 'left' (default) | 'right' | 'fill' | 'center' |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
10 |
* valign = 'top' (default) | 'bottom' | 'fill' | 'center' |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
11 |
|
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
12 |
""" |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
13 |
|
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
14 |
def __init__(self): |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
15 |
Layout.__init__(self) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
16 |
self._widget_hints = {} # Widget : (halign, valign) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
17 |
|
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
18 |
def add(self, widget, *args, **kwargs): |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
19 |
Layout.add(self, widget) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
20 |
assert len(args) == 0, \ |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
21 |
"FixedLayout does not support positional hint args: %s" % args |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
22 |
assert all(key in ('halign', 'valign') for key in kwargs.keys()), \ |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
23 |
"Unsupported hints: %s" % tuple(kwargs.keys()) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
24 |
halign = kwargs.get('halign', 'left') |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
25 |
valign = kwargs.get('valign', 'top') |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
26 |
self._widget_hints[widget] = (halign, valign) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
27 |
|
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
28 |
def update(self, w, h): |
93 | 29 |
for widget in self._managed_widgets: |
116
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
30 |
halign, valign = self._widget_hints[widget] |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
31 |
px, py = widget.posreq |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
32 |
sw, sh = widget.sizereq |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
33 |
if halign == 'right': px = w - px |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
34 |
if valign == 'bottom': py = h - py |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
35 |
if halign == 'fill': px = 0; sw = w |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
36 |
if valign == 'fill': py = 0; sh = h |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
37 |
if halign == 'center': px = (w - sw) // 2 |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
38 |
if valign == 'center': py = (h - sh) // 2 |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
39 |
widget.resize(sw, sh) |
165b5d65e1cb
Drop AnchorLayout, merge its features into FixedLayout.
Radek Brich <radek.brich@devl.cz>
parents:
115
diff
changeset
|
40 |
widget.pos.update(px, py) |