changeset 345:e3efe2cde5a9

Forgot to add CameraDialog... oops!
author cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
date Tue, 25 Aug 2009 12:26:59 +0000
parents 5a9e5f1c897d
children 66db8ce5dfa2
files clients/editor/scripts/gui/cameradialog.py
diffstat 1 files changed, 88 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clients/editor/scripts/gui/cameradialog.py	Tue Aug 25 12:26:59 2009 +0000
@@ -0,0 +1,88 @@
+import fife
+import pychan
+
+class CameraDialog(object):
+	"""
+	B{CameraDialog} provides a gui dialog for camera creation. The callback is called when camera creation is complete. A
+	partial specification of the camera parameters may optionally be given.
+	"""
+	def __init__(self, engine, callback=None, onCancel=None, map=None, layer=None):
+		self.engine = engine
+		self.callback = callback
+		self.onCancel = onCancel
+		self._widget = pychan.loadXML('gui/cameradialog.xml')
+
+		if map:
+			self._widget.distributeData({
+				'mapBox'	: unicode(map.getId()),
+			})
+
+		if layer:
+			self._widget.distributeData({
+				'layerBox'	: unicode(layer.getId()),
+			})
+
+		self._widget.mapEvents({
+			'okButton'     : self._finished,
+			'cancelButton' : self._cancelled
+		})
+
+		self._widget.show()
+		
+	def _cancelled(self):
+		if self.onCancel:
+			self.onCancel()
+		self._widget.hide()
+		
+
+	def _finished(self):
+		id = self._widget.collectData('idBox')
+		if id == '':
+			print 'Please enter a camera id.'
+			return
+
+		try:
+			map = self.engine.getModel().getMap(str(self._widget.collectData('mapBox')))
+		except fife.Exception:
+			print 'Cannot find the specified map id.'
+			return
+
+		try:
+			layer = map.getLayer(str(self._widget.collectData('layerBox')))
+		except fife.Exception:
+			print 'Cannot find the specified layer id.'	
+			return
+
+		try:
+			vals = self._widget.collectData('viewBox').split(',')
+			if len(vals) != 4:
+				raise ValueError	
+
+			viewport = fife.Rect(*[int(c) for c in vals])
+		except ValueError:
+			print 'Please enter 4 comma (,) delimited values for viewport x,y,width,height.'
+			return
+
+		try:
+			refh = int(self._widget.collectData('refhBox'))
+			refw = int(self._widget.collectData('refwBox'))
+		except ValueError:
+			print 'Please enter positive integer values for reference width and height.'
+			return
+
+		try:
+			rot = int(self._widget.collectData('rotBox'))
+			tilt = int(self._widget.collectData('tiltBox'))
+		except ValueError:
+			print 'Please enter positive integer values for rotation and tilt.'
+			return
+
+		cam = self.engine.getView().addCamera(str(id), layer, viewport, fife.ExactModelCoordinate(0,0,0))
+		cam.setCellImageDimensions(refw, refh)
+		cam.setRotation(rot)
+		cam.setTilt(tilt)
+	
+		self._widget.hide()
+
+		if self.callback:
+			self.callback()
\ No newline at end of file