--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tuikit/core/size.py Mon Mar 17 20:40:04 2014 +0100
@@ -0,0 +1,58 @@
+class Size:
+
+ """Size class.
+
+ Implements attribute access (.w, .h) and list-like access([0],[1]).
+
+ """
+
+ def __init__(self, *args, **kwargs):
+ self.w = 0
+ self.h = 0
+ self.update(*args, **kwargs)
+
+ def __getitem__(self, key):
+ return (self.w, self.h)[key]
+
+ def __repr__(self):
+ return 'Size(w={0.w},h={0.h})'.format(self)
+
+ def update(self, *args, **kwargs):
+ if len(args) == 2:
+ # (w:int, h:int)
+ self.w, self.h = args
+ elif len(args) == 1:
+ # (size:Size)
+ self.w, self.h = args[0]
+ elif len(args):
+ raise ValueError('Too many args.')
+ for key, val in kwargs.items():
+ if key in ('w', 'h'):
+ setattr(self, key, val)
+ else:
+ raise ValueError('Bad keyword arg: %r' % key)
+
+ def readonly(self):
+ return ReadonlySize(self)
+
+
+class ReadonlySize:
+
+ """Wrapper for Size which makes it read-only."""
+
+ def __init__(self, size):
+ self._size = size
+
+ @property
+ def w(self):
+ return self._size.w
+
+ @property
+ def h(self):
+ return self._size.h
+
+ def __getitem__(self, key):
+ return self._size[key]
+
+ def __repr__(self):
+ return 'ReadonlySize(w={0.w},h={0.h})'.format(self._size)