view clients/editor/selection.py @ 145:e7a431577c95

Cleaned the basic model up. Code is cleaner now and a bit faster. Some code path were never tested in depth :-( Added a 'time_to_load' attribute to XMLMapLoader, which records the seconds it took to load a map. Down from 6s to 5.6s for reio de hola. Yay!
author phoku@33b003aa-7bff-0310-803a-e67f0ece8222
date Thu, 09 Oct 2008 08:23:13 +0000
parents 4a0efb7baf70
children 28532ae6f9f6
line wrap: on
line source

import pychan
import pychan.widgets as widgets

class Selection():
	"""
	Selection displays a list of options for the user to select from. The result is passed to onSelection.
	list - the list to select from
	onSelection - the function to call when a selection is made. Accepts one argument: an element of the list.
	"""
	def __init__(self, list, onSelection):
		self.list = list
		self._callback = onSelection

		self._widget = pychan.loadXML('content/gui/selection.xml')

		self._widget.mapEvents({
			'okButton'     : self._selected,
			'cancelButton' : self._widget.hide
		})

		self._widget.distributeInitialData({
			'optionDrop' : list
		})
		self._widget.show()

	def _selected(self):
		selection = self._widget.collectData('optionDrop')
		if selection < 0: return
		self._callback(self.list[selection])
		self._widget.hide()

class ClickSelection():
	"""
	ClickSelection displays a list of options for the user to select from. The result is passed to onSelection.
	Differs from Selection: the selection is made when a list element is clicked, rather than when the box is closed.	
	list - the list to select from
	onSelection - the function to call when a selection is made. Accepts one argument: an element of the list.
	"""
	def __init__(self, list, onSelection):
		self.list = list
		self._callback = onSelection

		self._widget = pychan.loadXML('content/gui/selection.xml')

		self._widget.mapEvents({
			'okButton'     : self._widget.hide,
			'cancelButton' : self._widget.hide,
			'optionDrop'   : self._selected
		})

		self._widget.distributeInitialData({
			'optionDrop' : list
		})
		self._widget.show()

	def _selected(self):
		selection = self._widget.collectData('optionDrop')
		if selection < 0: return
		self._callback(self.list[selection])