Mercurial > fife-parpg
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) -