diff -r e77c95c4c7fc -r 336d515096b1 dialogs/FBDBlockDialog.py --- a/dialogs/FBDBlockDialog.py Tue Jun 11 09:03:35 2013 +0200 +++ b/dialogs/FBDBlockDialog.py Tue Jun 11 12:37:50 2013 +0200 @@ -31,6 +31,13 @@ from BlockPreviewDialog import BlockPreviewDialog #------------------------------------------------------------------------------- +# Helpers +#------------------------------------------------------------------------------- + +def GetBlockTypeDefaultNameModel(blocktype): + return re.compile("%s[0-9]+" % blocktype if blocktype is not None else ".*") + +#------------------------------------------------------------------------------- # Set Block Parameters Dialog #------------------------------------------------------------------------------- @@ -136,11 +143,14 @@ right_gridsizer.AddWindow(self.PreviewLabel, flag=wx.GROW) right_gridsizer.AddWindow(self.Preview, flag=wx.GROW) + # Add buttons sizer to sizers main_sizer.AddSizer(self.ButtonSizer, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) self.SetSizer(main_sizer) + # Dictionary containing correspondence between parameter exchanged and + # control to fill with parameter value self.ParamsControl = { "extension": self.Inputs, "executionOrder": self.ExecutionOrder, @@ -184,10 +194,11 @@ # Show error message if an error is detected if message is not None: - self.ShowMessage(message) + self.ShowErrorMessage(message) # Test block name validity if necessary - elif not name_enabled or self.TestBlockName(block_name): + elif not name_enabled or self.TestElementName(block_name): + # Call BlockPreviewDialog function BlockPreviewDialog.OnOK(self, event) def SetValues(self, values): @@ -200,21 +211,16 @@ # Define regular expression for determine if block name is block # default name - default_name_model = re.compile( - "%s[0-9]+" % blocktype if blocktype is not None else ".*") - - # Select block type in library panel - if blocktype is not None: - self.LibraryPanel.SelectTreeItem(blocktype, - values.get("inputs", None)) + default_name_model = GetBlockTypeDefaultNameModel(blocktype) # For each parameters defined, set corresponding control value for name, value in values.items(): + + # Parameter is block name if name == "name": - # Parameter is block name if value != "": - # Set default block name for testing - self.DefaultBlockName = value + # Set default graphic element name for testing + self.DefaultElementName = value # Test if block name is type default block name and save # block name if not (name have been typed by user) @@ -223,11 +229,17 @@ self.BlockName.ChangeValue(value) + # Set value of other controls else: control = self.ParamsControl.get(name, None) if control is not None: control.SetValue(value) + # Select block type in library panel + if blocktype is not None: + self.LibraryPanel.SelectTreeItem(blocktype, + values.get("inputs", None)) + # Refresh preview panel self.RefreshPreview() @@ -239,7 +251,7 @@ values = self.LibraryPanel.GetSelectedBlock() if self.BlockName.IsEnabled() and self.BlockName.GetValue() != "": values["name"] = self.BlockName.GetValue() - values["width"], values["height"] = self.Block.GetSize() + values["width"], values["height"] = self.Element.GetSize() values.update({ name: control.GetValue() for name, control in self.ParamsControl.iteritems()}) @@ -270,11 +282,22 @@ # current block name wasn't typed by user if blocktype is not None and blocktype["type"] != "function": self.BlockName.Enable(True) - self.BlockName.ChangeValue( - self.CurrentBlockName - if self.CurrentBlockName is not None - else self.Controller.GenerateNewName( - self.TagName, None, values["type"]+"%d", 0)) + + if self.CurrentBlockName is None: + # Generate new block name according to block type, taking + # default element name if it was already a default name for this + # block type + default_name_model = GetBlockTypeDefaultNameModel(values["type"]) + block_name = ( + self.DefaultElementName + if (self.DefaultElementName is not None and + default_name_model.match(self.DefaultElementName)) + else self.Controller.GenerateNewName( + self.TagName, None, values["type"]+"%d", 0)) + else: + block_name = self.CurrentBlockName + + self.BlockName.ChangeValue(block_name) else: self.BlockName.Enable(False) self.BlockName.ChangeValue("") @@ -328,13 +351,11 @@ # If a block type is selected in library panel if values is not None: - blockname = (self.BlockName.GetValue() - if self.BlockName.IsEnabled() - else "") - # Set graphic element displayed, creating a FBD block element - self.Block = FBD_Block(self.Preview, values["type"], - blockname, + self.Element = FBD_Block(self.Preview, values["type"], + (self.BlockName.GetValue() + if self.BlockName.IsEnabled() + else ""), extension = self.Inputs.GetValue(), inputs = values["inputs"], executionControl = self.ExecutionControl.GetValue(), @@ -342,7 +363,7 @@ # Reset graphic element displayed else: - self.Block = None + self.Element = None # Call BlockPreviewDialog function BlockPreviewDialog.RefreshPreview(self)