Mercurial > fife-parpg
diff engine/extensions/pychan/widgets/scrollarea.py @ 248:a2d5e2721489
widgets.py split up.
author | phoku@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Thu, 26 Mar 2009 16:20:16 +0000 |
parents | |
children | 51cc05d862f2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/engine/extensions/pychan/widgets/scrollarea.py Thu Mar 26 16:20:16 2009 +0000 @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- + +from common import * +from widget import Widget + +class ScrollArea(Widget): + """ + A wrapper around another (content) widget. + + New Attributes + ============== + + - content: The wrapped widget. + - vertical_scrollbar: Boolean: Set this to False to hide the Vertical scrollbar + - horizontal_scrollbar: Boolean: Set this to False to hide the Horizontal scrollbar + + """ + + ATTRIBUTES = Widget.ATTRIBUTES + [ BoolAttr("vertical_scrollbar"),BoolAttr("horizontal_scrollbar") ] + + def __init__(self,**kwargs): + self.real_widget = fife.ScrollArea() + self._content = None + super(ScrollArea,self).__init__(**kwargs) + + def addChild(self,widget): + self.content = widget + widget.parent = self + + def removeChild(self,widget): + if self._content != widget: + raise RuntimeError("%s does not have %s as direct child widget." % (str(self),str(widget))) + self.content = None + widget.parent = None + + def _setContent(self,content): + if content is None: + self.real_widget.setContent(content) + else: + self.real_widget.setContent(content.real_widget) + self._content = content + def _getContent(self): return self._content + content = property(_getContent,_setContent) + + def deepApply(self,visitorFunc): + if self._content: self._content.deepApply(visitorFunc) + visitorFunc(self) + + def resizeToContent(self,recurse=True): + if self._content is None: return + if recurse: + self.content.resizeToContent(recurse=True) + self.content.width = max(self.content.width,self.width-5) + self.content.height = max(self.content.height,self.height-5) + + def _visibilityToScrollPolicy(self,visibility): + if visibility: + return fife.ScrollArea.SHOW_AUTO + return fife.ScrollArea.SHOW_NEVER + + def _scrollPolicyToVisibility(self,policy): + if policy == fife.ScrollArea.SHOW_NEVER: + return False + return True + + def _setHorizontalScrollbar(self,visibility): + self.real_widget.setHorizontalScrollPolicy( self._visibilityToScrollPolicy(visibility) ) + + def _setVerticalScrollbar(self,visibility): + self.real_widget.setVerticalScrollPolicy( self._visibilityToScrollPolicy(visibility) ) + + def _getHorizontalScrollbar(self): + return self._scrollPolicyToVisibility( self.real_widget.getHorizontalScrollPolicy() ) + + def _getVerticalScrollbar(self): + return self._scrollPolicyToVisibility( self.real_widget.getVerticalScrollPolicy() ) + + vertical_scrollbar = property(_getVerticalScrollbar,_setVerticalScrollbar) + horizontal_scrollbar = property(_getHorizontalScrollbar,_setHorizontalScrollbar)