--- a/tuikit/layouts/fixed.py Sun Feb 15 12:52:46 2015 +0100
+++ b/tuikit/layouts/fixed.py Sun Feb 15 17:50:24 2015 +0100
@@ -3,7 +3,38 @@
class FixedLayout(Layout):
- def update(self, _w, _h):
+ """Widgets are placed on fixed position as specified in `sizereq`.
+
+ Align hints (kwargs to :meth:`add`):
+ * halign = 'left' (default) | 'right' | 'fill' | 'center'
+ * valign = 'top' (default) | 'bottom' | 'fill' | 'center'
+
+ """
+
+ def __init__(self):
+ Layout.__init__(self)
+ self._widget_hints = {} # Widget : (halign, valign)
+
+ def add(self, widget, *args, **kwargs):
+ Layout.add(self, widget)
+ assert len(args) == 0, \
+ "FixedLayout does not support positional hint args: %s" % args
+ assert all(key in ('halign', 'valign') for key in kwargs.keys()), \
+ "Unsupported hints: %s" % tuple(kwargs.keys())
+ halign = kwargs.get('halign', 'left')
+ valign = kwargs.get('valign', 'top')
+ self._widget_hints[widget] = (halign, valign)
+
+ def update(self, w, h):
for widget in self._managed_widgets:
- widget.resize(*widget.sizereq)
- widget.pos.update(*widget.posreq)
+ halign, valign = self._widget_hints[widget]
+ px, py = widget.posreq
+ sw, sh = widget.sizereq
+ if halign == 'right': px = w - px
+ if valign == 'bottom': py = h - py
+ if halign == 'fill': px = 0; sw = w
+ if valign == 'fill': py = 0; sh = h
+ if halign == 'center': px = (w - sw) // 2
+ if valign == 'center': py = (h - sh) // 2
+ widget.resize(sw, sh)
+ widget.pos.update(px, py)