Mercurial > fife-parpg
diff engine/extensions/pychan/widgets/containers.py @ 255:51cc05d862f2
Merged editor_rewrite branch to trunk.
This contains changes that may break compatibility against existing clients.
For a list of changes that may affect your client, see: http://wiki.fifengine.de/Changes_to_pychan_and_FIFE_in_editor_rewrite_branch
author | cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Mon, 08 Jun 2009 16:00:02 +0000 |
parents | 1cc51d145af9 |
children | 48c99636453e |
line wrap: on
line diff
--- a/engine/extensions/pychan/widgets/containers.py Wed Jun 03 19:29:52 2009 +0000 +++ b/engine/extensions/pychan/widgets/containers.py Mon Jun 08 16:00:02 2009 +0000 @@ -38,6 +38,26 @@ self.children.append(widget) self.real_widget.add(widget.real_widget) + def insertChild(self, widget, position): + if position > len(self.children) or 0-position > len(self.children): + print "insertChild: Warning: Index overflow.", + if position >= 0: + self.addChild(widget) + else: + self.insertChild(widget, 0) + return + + children = self.children[0:position]+[widget]+self.children[position:] + #assert len(children) == len(self.children) + 1 + self.removeAllChildren() + for child in children: + self.addChild(child) + + def insertChildBefore(self, widget, before): + if before not in self.children: + raise RuntimeError("Couldn't find widget %s as child of %s - in insertChildBefore" % (str(widget),str(before))) + self.insertChild(widget, self.children.index(before)) + def removeChild(self,widget): if not widget in self.children: raise RuntimeError("%s does not have %s as direct child widget." % (str(self),str(widget))) @@ -57,10 +77,14 @@ if not self.children: return 0 return max(widget.height for widget in self.children) - def deepApply(self,visitorFunc): - for child in self.children: - child.deepApply(visitorFunc) + def deepApply(self,visitorFunc, leaves_first = True): + if leaves_first: + for child in self.children: + child.deepApply(visitorFunc, leaves_first = leaves_first) visitorFunc(self) + if not leaves_first: + for child in self.children: + child.deepApply(visitorFunc, leaves_first = leaves_first) def beforeShow(self): self._resetTiling() @@ -97,7 +121,7 @@ self._background_image = image map(self.real_widget.remove,self._background) self._background = [] - + return # Background generation is done in _resetTiling if not isinstance(image, fife.GuiImage): @@ -124,6 +148,9 @@ widgets above the spacer are aligned to the top, while widgets below the spacer are aligned to the bottom. """ + DEFAULT_HEXPAND = 0 + DEFAULT_VEXPAND = 1 + def __init__(self,padding=5,**kwargs): super(VBox,self).__init__(**kwargs) self.padding = padding @@ -135,6 +162,9 @@ Please see L{VBox} for details - just change the directions :-). """ + DEFAULT_HEXPAND = 1 + DEFAULT_VEXPAND = 0 + def __init__(self,padding=5,**kwargs): super(HBox,self).__init__(**kwargs) self.padding = padding @@ -180,25 +210,3 @@ def _getHeight(self): return self.real_widget.getHeight() - self.titlebar_height height = property(_getHeight,_setHeight) - -# Spacer - -class Spacer(object): - """ A spacer represents expandable 'whitespace' in the GUI. - - In a XML file you can get this by adding a <Spacer /> inside a VBox or - HBox element (Windows implicitly are VBox elements). - - The effect is, that elements before the spacer will be left (top) - and elements after the spacer will be right (bottom) aligned. - - There can only be one spacer in VBox (HBox). - """ - def __init__(self,parent=None,**kwargs): - self._parent = parent - - def __str__(self): - return "Spacer(parent.name='%s')" % getattr(self._parent,'name','None') - - def __repr__(self): - return "<Spacer(parent.name='%s') at %x>" % (getattr(self._parent,'name','None'),id(self))