diff clients/editor/plugins/LayerTool.py @ 343:8e71629c4c43

Several changes to layer, camera and map dialogs: * Renamed CameraEditor and LayerEditor to CameraDialog and LayerDialog * Moved CameraDialog and LayerDialog into their own modules in scripts.gui so other components can use them. * Prettier camera dialog * Added LayerDialog to map wizard
author cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
date Tue, 25 Aug 2009 01:21:00 +0000
parents 7e5717105212
children 8f64a9d1e7ab
line wrap: on
line diff
--- a/clients/editor/plugins/LayerTool.py	Tue Aug 25 00:31:16 2009 +0000
+++ b/clients/editor/plugins/LayerTool.py	Tue Aug 25 01:21:00 2009 +0000
@@ -31,6 +31,7 @@
 import pychan
 import pychan.widgets as widgets
 from pychan.tools import callbackWithArguments as cbwa
+from scripts.gui.layerdialog import LayerDialog
 
 # default should be pychan default, highlight can be choosen (format: r,g,b)
 _DEFAULT_BACKGROUND_COLOR = pychan.internal.DEFAULT_STYLE['default']['base_color']
@@ -162,7 +163,7 @@
 		if not self._mapview: return
 		
 		if self._layer_wizard: self._layer_wizard._widget.hide()
-		self._layer_wizard = LayerEditor(self._editor.getEngine(), self._mapview.getMap(), callback=self._layerCreated)
+		self._layer_wizard = LayerDialog(self._editor.getEngine(), self._mapview.getMap(), callback=self._layerCreated)
 		
 	def _layerCreated(self, layer):
 		self.update(self._mapview)
@@ -174,7 +175,7 @@
 		if not layer: return
 		
 		if self._layer_wizard: self._layer_wizard._widget.hide()
-		self._layer_wizard = LayerEditor(self._editor.getEngine(), self._mapview.getMap(), layer=layer, callback=cbwa(self.update, self._mapview))
+		self._layer_wizard = LayerDialog(self._editor.getEngine(), self._mapview.getMap(), layer=layer, callback=cbwa(self.update, self._mapview))
 		
 	def clear(self):
 		""" remove all subwrappers """
@@ -243,7 +244,7 @@
 			self.wrapper.addChild(subwrapper)
 			self.subwrappers.append(subwrapper)
 		
-		self.container.adaptLayout(False)		
+		self.container.adaptLayout()		
 			
 	def toggle_layer_visibility(self, event, widget):
 		""" Callback for ToggleButtons 
@@ -314,7 +315,6 @@
 		widget.background_color = _HIGHLIGHT_BACKGROUND_COLOR
 		widget.foreground_color = _HIGHLIGHT_BACKGROUND_COLOR
 		widget.base_color = _HIGHLIGHT_BACKGROUND_COLOR
-		self.container.adaptLayout(False)
 		
 		self._mapview.getController().selectLayer(layerid)
 
@@ -333,135 +333,4 @@
 			self._adjust_position()
 
 
-class LayerEditor(object):
-	""" The B{LayerEditor} provides a gui dialog for creating and editing layers.
-	
-		FIXME:
-			- gridtypes can only be square for now
-			- pathing strategy 
-	"""
-	def __init__(self, engine, map, callback=None, onCancel=None, layer=None):
-		self.engine = engine
-		self.model = engine.getModel()
-		self.map = map
-		self.layer = layer
-		self.callback = callback
-		self.onCancel = onCancel
-		self._widget = pychan.loadXML('gui/layereditor.xml')
 
-		# TODO: Add access method for adopted grid types?
-		self._widget.findChild(name="gridBox").items = ['square', 'hexagonal']
-		
-		# TODO: Ditto for pather?
-		self._widget.findChild(name="pathingBox").items = ['cell_edges_only', 'cell_edges_and_diagonals', 'freeform']
-
-		if layer:
-			cg = layer.getCellGrid()
-			cgtype = 0
-			if cg.getType() == 'hexagonal':
-				cgtype = 1
-			
-			self._widget.distributeData({
-				"layerBox" : unicode(layer.getId()),
-				"xScaleBox" : unicode(cg.getXScale()),
-				"yScaleBox" : unicode(cg.getYScale()),
-				"rotBox" : unicode(cg.getRotation()),
-				"xOffsetBox" : unicode(cg.getXShift()),
-				"yOffsetBox" : unicode(cg.getYShift())
-			})
-			
-			self._widget.findChild(name="pathingBox").selected = int(layer.getPathingStrategy())
-			self._widget.findChild(name="gridBox").selected = int(cgtype)
-		else:
-			self._widget.findChild(name="pathingBox").selected = 0
-			self._widget.findChild(name="gridBox").selected = 0
-
-		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):
-		""" """
-		# Collect and validate data
-		layerId = self._widget.collectData('layerBox')
-		if layerId == '':
-			print 'Please enter a layer id.'
-			return
-			
-		try:
-			x_offset = float(self._widget.collectData('xOffsetBox'))
-			y_offset = float(self._widget.collectData('yOffsetBox'))
-		except ValueError:
-			print 'Please enter integer or decimal values for offset.'
-			return
-
-		try:
-			x_scale = float(self._widget.collectData('xScaleBox'))
-			y_scale = float(self._widget.collectData('yScaleBox'))
-		except ValueError:
-			print 'Please enter integer or decimal values for scale.'
-			return
-
-		try:
-			rotation = float(self._widget.collectData('rotBox'))
-		except ValueError:
-			print 'Please enter integer or decimal value for rotation.'
-			return
-			
-		grid_type = int(self._widget.collectData('gridBox'))
-		pathing = int(self._widget.collectData('pathingBox'))
-
-		if grid_type == 0:
-			grid_type = "square"
-		else:
-			grid_type = "hexagonal"
-
-		# Set up layer
-		layer = self.layer
-		cellgrid = None
-		
-		cellgrid = self.model.getCellGrid(grid_type)
-		if not cellgrid:
-			print "Invalid grid type"
-			return
-
-		cellgrid.setRotation(rotation)
-		cellgrid.setXScale(x_scale)
-		cellgrid.setYScale(y_scale)
-		cellgrid.setXShift(x_offset)
-		cellgrid.setYShift(y_offset)
-	
-		if not self.layer:
-			try:
-				layer = self.map.createLayer(str(layerId), cellgrid)
-				
-			except fife.NameClash:
-				print 'The layer ' + str(layerId) + ' already exists!'
-				return
-		else:
-			layer.setCellGrid(cellgrid)
-			try:
-				layer.setId(str(layerId))
-			except fife.NameClash:
-				print 'The layer ' + str(layerId) + ' already exists!'
-				return
-		
-		layer.setPathingStrategy(pathing)
-		
-		self.engine.getView().resetRenderers()
-		
-		# Hide dialog and call back
-		self._widget.hide()
-		
-		if self.callback:
-			pychan.tools.applyOnlySuitable(self.callback, layer=layer)
-