Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
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)