view clients/editor/scripts/gui/faketabwidget.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
children 6add14ebe9f5
line wrap: on
line source

from pychan import widgets
from pychan.tools import callbackWithArguments as cbwa
from resizablebase import ResizableBase

import scripts

class FakeTabWidget(widgets.VBox, ResizableBase):
	def __init__(self, resizable=None, *args, **kwargs):
		if resizable == None:
			resizable = False

		widgets.VBox.__init__(self, *args, **kwargs)
		ResizableBase.__init__(self, resizable, *args, **kwargs)
		
		self.tabs = []
		
		self.buttonbox = widgets.HBox()
		self.widgetarea = widgets.VBox()
		self.buttonbox.hexpand = 1
		self.buttonbox.vexpand = 0
		self.widgetarea.hexpand = 1
		self.widgetarea.vexpand = 1
		
		self.addChild(self.buttonbox)
		self.addChild(self.widgetarea)
	
		self.resizable_top = False
		self.resizable_left = False
		self.resizable_right = False
		self.resizable_bottom = False
		
	def __del__(self):
		# Force deletion of C++ object
		if self.real_widget:
			self.real_widget.__del__()
			self.real_widget = None
		
	def addTab(self, widget, title):
		for tab in self.tabs:
			if tab[1] == widget:
				return
	
		widget.max_size = (5000, 5000)
		widget.hexpand = 1
		widget.vexpand = 1
	
		button = widgets.ToggleButton(text=title, group="faketab_"+str(id(self)))
		self.buttonbox.addChild(button)
		
		tab = (title, widget, button)
		self.tabs.append( tab )

		button.capture(cbwa(self.showTab, tab))
		self.showTab(tab)
		
		return tab
		
	def removeTab(self, widget):
		for i, tab in enumerate(self.tabs):
			if tab[1] == widget:
				if widget.parent == self.widgetarea:
					self.widgetarea.removeChild(widget)
				self.buttonbox.removeChild(tab[2])
				del self.tabs[i]
				break
		else: return
			
		if len(self.tabs) > 0:
			self.showTab(self.tabs[0])
		
	def showTab(self, tab):
		tab[2].toggled = True
		self.widgetarea.removeAllChildren()
		self.widgetarea.addChild(tab[1])
		self.widgetarea.adaptLayout()