comparison clients/editor/scripts/gui/cameradialog.py @ 345:e3efe2cde5a9

Forgot to add CameraDialog... oops!
author cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
date Tue, 25 Aug 2009 12:26:59 +0000
parents
children 8b125ec749d7
comparison
equal deleted inserted replaced
344:5a9e5f1c897d 345:e3efe2cde5a9
1 import fife
2 import pychan
3
4 class CameraDialog(object):
5 """
6 B{CameraDialog} provides a gui dialog for camera creation. The callback is called when camera creation is complete. A
7 partial specification of the camera parameters may optionally be given.
8 """
9 def __init__(self, engine, callback=None, onCancel=None, map=None, layer=None):
10 self.engine = engine
11 self.callback = callback
12 self.onCancel = onCancel
13 self._widget = pychan.loadXML('gui/cameradialog.xml')
14
15 if map:
16 self._widget.distributeData({
17 'mapBox' : unicode(map.getId()),
18 })
19
20 if layer:
21 self._widget.distributeData({
22 'layerBox' : unicode(layer.getId()),
23 })
24
25 self._widget.mapEvents({
26 'okButton' : self._finished,
27 'cancelButton' : self._cancelled
28 })
29
30 self._widget.show()
31
32 def _cancelled(self):
33 if self.onCancel:
34 self.onCancel()
35 self._widget.hide()
36
37
38 def _finished(self):
39 id = self._widget.collectData('idBox')
40 if id == '':
41 print 'Please enter a camera id.'
42 return
43
44 try:
45 map = self.engine.getModel().getMap(str(self._widget.collectData('mapBox')))
46 except fife.Exception:
47 print 'Cannot find the specified map id.'
48 return
49
50 try:
51 layer = map.getLayer(str(self._widget.collectData('layerBox')))
52 except fife.Exception:
53 print 'Cannot find the specified layer id.'
54 return
55
56 try:
57 vals = self._widget.collectData('viewBox').split(',')
58 if len(vals) != 4:
59 raise ValueError
60
61 viewport = fife.Rect(*[int(c) for c in vals])
62 except ValueError:
63 print 'Please enter 4 comma (,) delimited values for viewport x,y,width,height.'
64 return
65
66 try:
67 refh = int(self._widget.collectData('refhBox'))
68 refw = int(self._widget.collectData('refwBox'))
69 except ValueError:
70 print 'Please enter positive integer values for reference width and height.'
71 return
72
73 try:
74 rot = int(self._widget.collectData('rotBox'))
75 tilt = int(self._widget.collectData('tiltBox'))
76 except ValueError:
77 print 'Please enter positive integer values for rotation and tilt.'
78 return
79
80 cam = self.engine.getView().addCamera(str(id), layer, viewport, fife.ExactModelCoordinate(0,0,0))
81 cam.setCellImageDimensions(refw, refh)
82 cam.setRotation(rot)
83 cam.setTilt(tilt)
84
85 self._widget.hide()
86
87 if self.callback:
88 self.callback()