dialogs/FBDBlockDialog.py
changeset 1244 336d515096b1
parent 1242 ec2c415fc65e
child 1250 7e6de17c687a
equal deleted inserted replaced
1243:e77c95c4c7fc 1244:336d515096b1
    27 import wx
    27 import wx
    28 
    28 
    29 from graphics.FBD_Objects import FBD_Block
    29 from graphics.FBD_Objects import FBD_Block
    30 from controls.LibraryPanel import LibraryPanel
    30 from controls.LibraryPanel import LibraryPanel
    31 from BlockPreviewDialog import BlockPreviewDialog
    31 from BlockPreviewDialog import BlockPreviewDialog
       
    32 
       
    33 #-------------------------------------------------------------------------------
       
    34 #                                    Helpers
       
    35 #-------------------------------------------------------------------------------
       
    36 
       
    37 def GetBlockTypeDefaultNameModel(blocktype):
       
    38     return re.compile("%s[0-9]+" % blocktype if blocktype is not None else ".*")
    32 
    39 
    33 #-------------------------------------------------------------------------------
    40 #-------------------------------------------------------------------------------
    34 #                         Set Block Parameters Dialog
    41 #                         Set Block Parameters Dialog
    35 #-------------------------------------------------------------------------------
    42 #-------------------------------------------------------------------------------
    36 
    43 
   134         
   141         
   135         # Add preview panel and associated label to sizers
   142         # Add preview panel and associated label to sizers
   136         right_gridsizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
   143         right_gridsizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
   137         right_gridsizer.AddWindow(self.Preview, flag=wx.GROW)
   144         right_gridsizer.AddWindow(self.Preview, flag=wx.GROW)
   138         
   145         
       
   146         # Add buttons sizer to sizers
   139         main_sizer.AddSizer(self.ButtonSizer, border=20, 
   147         main_sizer.AddSizer(self.ButtonSizer, border=20, 
   140               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   148               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   141         
   149         
   142         self.SetSizer(main_sizer)
   150         self.SetSizer(main_sizer)
   143         
   151         
       
   152         # Dictionary containing correspondence between parameter exchanged and
       
   153         # control to fill with parameter value
   144         self.ParamsControl = {
   154         self.ParamsControl = {
   145             "extension": self.Inputs,
   155             "extension": self.Inputs,
   146             "executionOrder": self.ExecutionOrder,
   156             "executionOrder": self.ExecutionOrder,
   147             "executionControl": self.ExecutionControl
   157             "executionControl": self.ExecutionControl
   148         }
   158         }
   182         elif name_enabled and block_name == "":
   192         elif name_enabled and block_name == "":
   183             message = _("Form isn't complete. Name must be filled!")
   193             message = _("Form isn't complete. Name must be filled!")
   184         
   194         
   185         # Show error message if an error is detected
   195         # Show error message if an error is detected
   186         if message is not None:
   196         if message is not None:
   187             self.ShowMessage(message)
   197             self.ShowErrorMessage(message)
   188         
   198         
   189         # Test block name validity if necessary
   199         # Test block name validity if necessary
   190         elif not name_enabled or self.TestBlockName(block_name):
   200         elif not name_enabled or self.TestElementName(block_name):
       
   201             # Call BlockPreviewDialog function
   191             BlockPreviewDialog.OnOK(self, event)
   202             BlockPreviewDialog.OnOK(self, event)
   192     
   203     
   193     def SetValues(self, values):
   204     def SetValues(self, values):
   194         """
   205         """
   195         Set default block parameters
   206         Set default block parameters
   198         # Extract block type defined in parameters
   209         # Extract block type defined in parameters
   199         blocktype = values.get("type", None)
   210         blocktype = values.get("type", None)
   200         
   211         
   201         # Define regular expression for determine if block name is block
   212         # Define regular expression for determine if block name is block
   202         # default name
   213         # default name
   203         default_name_model = re.compile(
   214         default_name_model = GetBlockTypeDefaultNameModel(blocktype)
   204             "%s[0-9]+" % blocktype if blocktype is not None else ".*")
       
   205         
       
   206         # Select block type in library panel    
       
   207         if blocktype is not None:
       
   208             self.LibraryPanel.SelectTreeItem(blocktype, 
       
   209                                              values.get("inputs", None))
       
   210         
   215         
   211         # For each parameters defined, set corresponding control value
   216         # For each parameters defined, set corresponding control value
   212         for name, value in values.items():
   217         for name, value in values.items():
       
   218             
       
   219             # Parameter is block name
   213             if name == "name":
   220             if name == "name":
   214                 # Parameter is block name
       
   215                 if value != "":
   221                 if value != "":
   216                     # Set default block name for testing
   222                     # Set default graphic element name for testing
   217                     self.DefaultBlockName = value
   223                     self.DefaultElementName = value
   218                     
   224                     
   219                     # Test if block name is type default block name and save
   225                     # Test if block name is type default block name and save
   220                     # block name if not (name have been typed by user)
   226                     # block name if not (name have been typed by user)
   221                     if default_name_model.match(value) is None:
   227                     if default_name_model.match(value) is None:
   222                         self.CurrentBlockName = value
   228                         self.CurrentBlockName = value
   223             
   229             
   224                 self.BlockName.ChangeValue(value)
   230                 self.BlockName.ChangeValue(value)
   225             
   231             
       
   232             # Set value of other controls
   226             else:
   233             else:
   227                 control = self.ParamsControl.get(name, None)
   234                 control = self.ParamsControl.get(name, None)
   228                 if control is not None:
   235                 if control is not None:
   229                     control.SetValue(value)
   236                     control.SetValue(value)
   230         
   237         
       
   238         # Select block type in library panel    
       
   239         if blocktype is not None:
       
   240             self.LibraryPanel.SelectTreeItem(blocktype, 
       
   241                                              values.get("inputs", None))
       
   242         
   231         # Refresh preview panel
   243         # Refresh preview panel
   232         self.RefreshPreview()
   244         self.RefreshPreview()
   233 
   245 
   234     def GetValues(self):
   246     def GetValues(self):
   235         """
   247         """
   237         @return: {parameter_name: parameter_value,...}
   249         @return: {parameter_name: parameter_value,...}
   238         """
   250         """
   239         values = self.LibraryPanel.GetSelectedBlock()
   251         values = self.LibraryPanel.GetSelectedBlock()
   240         if self.BlockName.IsEnabled() and self.BlockName.GetValue() != "":
   252         if self.BlockName.IsEnabled() and self.BlockName.GetValue() != "":
   241             values["name"] = self.BlockName.GetValue()
   253             values["name"] = self.BlockName.GetValue()
   242         values["width"], values["height"] = self.Block.GetSize()
   254         values["width"], values["height"] = self.Element.GetSize()
   243         values.update({
   255         values.update({
   244             name: control.GetValue()
   256             name: control.GetValue()
   245             for name, control in self.ParamsControl.iteritems()})
   257             for name, control in self.ParamsControl.iteritems()})
   246         return values
   258         return values
   247         
   259         
   268         
   280         
   269         # Update block name with default value if block type is a function and
   281         # Update block name with default value if block type is a function and
   270         # current block name wasn't typed by user
   282         # current block name wasn't typed by user
   271         if blocktype is not None and blocktype["type"] != "function":
   283         if blocktype is not None and blocktype["type"] != "function":
   272             self.BlockName.Enable(True)
   284             self.BlockName.Enable(True)
   273             self.BlockName.ChangeValue(
   285             
   274                 self.CurrentBlockName
   286             if self.CurrentBlockName is None:
   275                 if self.CurrentBlockName is not None
   287                 # Generate new block name according to block type, taking
   276                 else self.Controller.GenerateNewName(
   288                 # default element name if it was already a default name for this
   277                     self.TagName, None, values["type"]+"%d", 0))
   289                 # block type
       
   290                 default_name_model = GetBlockTypeDefaultNameModel(values["type"])
       
   291                 block_name = (
       
   292                     self.DefaultElementName
       
   293                     if (self.DefaultElementName is not None and 
       
   294                         default_name_model.match(self.DefaultElementName))
       
   295                     else self.Controller.GenerateNewName(
       
   296                         self.TagName, None, values["type"]+"%d", 0))
       
   297             else:
       
   298                 block_name = self.CurrentBlockName
       
   299                 
       
   300             self.BlockName.ChangeValue(block_name)
   278         else:
   301         else:
   279             self.BlockName.Enable(False)
   302             self.BlockName.Enable(False)
   280             self.BlockName.ChangeValue("")
   303             self.BlockName.ChangeValue("")
   281         
   304         
   282         # Refresh preview panel
   305         # Refresh preview panel
   326         # Get type selected in library panel
   349         # Get type selected in library panel
   327         values = self.LibraryPanel.GetSelectedBlock()
   350         values = self.LibraryPanel.GetSelectedBlock()
   328         
   351         
   329         # If a block type is selected in library panel
   352         # If a block type is selected in library panel
   330         if values is not None:
   353         if values is not None:
   331             blockname = (self.BlockName.GetValue()
       
   332                          if self.BlockName.IsEnabled()
       
   333                          else "")
       
   334             
       
   335             # Set graphic element displayed, creating a FBD block element
   354             # Set graphic element displayed, creating a FBD block element
   336             self.Block = FBD_Block(self.Preview, values["type"], 
   355             self.Element = FBD_Block(self.Preview, values["type"], 
   337                     blockname, 
   356                     (self.BlockName.GetValue()
       
   357                      if self.BlockName.IsEnabled()
       
   358                      else ""), 
   338                     extension = self.Inputs.GetValue(), 
   359                     extension = self.Inputs.GetValue(), 
   339                     inputs = values["inputs"], 
   360                     inputs = values["inputs"], 
   340                     executionControl = self.ExecutionControl.GetValue(), 
   361                     executionControl = self.ExecutionControl.GetValue(), 
   341                     executionOrder = self.ExecutionOrder.GetValue())
   362                     executionOrder = self.ExecutionOrder.GetValue())
   342         
   363         
   343         # Reset graphic element displayed
   364         # Reset graphic element displayed
   344         else:
   365         else:
   345             self.Block = None 
   366             self.Element = None 
   346         
   367         
   347         # Call BlockPreviewDialog function
   368         # Call BlockPreviewDialog function
   348         BlockPreviewDialog.RefreshPreview(self)
   369         BlockPreviewDialog.RefreshPreview(self)