Mercurial > fife-parpg
diff engine/python/fife/extensions/pychan/widgets/scrollarea.py @ 378:64738befdf3b
bringing in the changes from the build_system_rework branch in preparation for the 0.3.0 release. This commit will require the Jan2010 devkit. Clients will also need to be modified to the new way to import fife.
author | vtchill@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Mon, 11 Jan 2010 23:34:52 +0000 |
parents | |
children | 637384c8de04 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/engine/python/fife/extensions/pychan/widgets/scrollarea.py Mon Jan 11 23:34:52 2010 +0000 @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- + +# #################################################################### +# Copyright (C) 2005-2009 by the FIFE team +# http://www.fifengine.de +# This file is part of FIFE. +# +# FIFE is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# #################################################################### + +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") ] + DEFAULT_HEXPAND = 1 + DEFAULT_VEXPAND = 1 + + 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, leaves_first = True): + if leaves_first: + if self._content: self._content.deepApply(visitorFunc, leaves_first = leaves_first) + visitorFunc(self) + if not leaves_first: + if self._content: self._content.deepApply(visitorFunc, leaves_first = leaves_first) + + def resizeToContent(self,recurse=True): + if self._content is None: return + if recurse: + self.content.resizeToContent(recurse=recurse) + self.size = self.min_size + + 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() ) + + def sizeChanged(self): + if self.content: + self.content.width = max(self.content.width,self.width-5) + self.content.height = max(self.content.height,self.height-5) + + vertical_scrollbar = property(_getVerticalScrollbar,_setVerticalScrollbar) + horizontal_scrollbar = property(_getHorizontalScrollbar,_setHorizontalScrollbar)