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)