dialogs/SFCStepDialog.py
changeset 1730 64d8f52bc8c8
parent 1696 8043f32de7b8
child 1736 7e61baa047f0
equal deleted inserted replaced
1726:d51af006fa6b 1730:64d8f52bc8c8
    36 Class that implements a dialog for defining parameters of a SFC step graphic
    36 Class that implements a dialog for defining parameters of a SFC step graphic
    37 element
    37 element
    38 """
    38 """
    39 
    39 
    40 class SFCStepDialog(BlockPreviewDialog):
    40 class SFCStepDialog(BlockPreviewDialog):
    41     
    41 
    42     def __init__(self, parent, controller, tagname, initial=False):
    42     def __init__(self, parent, controller, tagname, initial=False):
    43         """
    43         """
    44         Constructor
    44         Constructor
    45         @param parent: Parent wx.Window of dialog for modal
    45         @param parent: Parent wx.Window of dialog for modal
    46         @param controller: Reference to project controller
    46         @param controller: Reference to project controller
    47         @param tagname: Tagname of project POU edited
    47         @param tagname: Tagname of project POU edited
    48         @param initial: True if step is initial (default: False)
    48         @param initial: True if step is initial (default: False)
    49         """
    49         """
    50         BlockPreviewDialog.__init__(self,parent, controller, tagname,  
    50         BlockPreviewDialog.__init__(self,parent, controller, tagname,
    51               title=_('Edit Step'))
    51               title=_('Edit Step'))
    52         
    52 
    53         # Init common sizers
    53         # Init common sizers
    54         self._init_sizers(2, 0, 6, None, 2, 1)
    54         self._init_sizers(2, 0, 6, None, 2, 1)
    55         
    55 
    56         # Create label for SFC step name
    56         # Create label for SFC step name
    57         name_label = wx.StaticText(self, label=_('Name:'))
    57         name_label = wx.StaticText(self, label=_('Name:'))
    58         self.LeftGridSizer.AddWindow(name_label, flag=wx.GROW)
    58         self.LeftGridSizer.AddWindow(name_label, flag=wx.GROW)
    59         
    59 
    60         # Create text control for defining SFC step name
    60         # Create text control for defining SFC step name
    61         self.StepName = wx.TextCtrl(self)
    61         self.StepName = wx.TextCtrl(self)
    62         self.Bind(wx.EVT_TEXT, self.OnNameChanged, self.StepName)
    62         self.Bind(wx.EVT_TEXT, self.OnNameChanged, self.StepName)
    63         self.LeftGridSizer.AddWindow(self.StepName, flag=wx.GROW)
    63         self.LeftGridSizer.AddWindow(self.StepName, flag=wx.GROW)
    64         
    64 
    65         # Create label for SFC step connectors
    65         # Create label for SFC step connectors
    66         connectors_label = wx.StaticText(self, label=_('Connectors:'))
    66         connectors_label = wx.StaticText(self, label=_('Connectors:'))
    67         self.LeftGridSizer.AddWindow(connectors_label, flag=wx.GROW)
    67         self.LeftGridSizer.AddWindow(connectors_label, flag=wx.GROW)
    68         
    68 
    69         # Create check boxes for defining connectors available on SFC step
    69         # Create check boxes for defining connectors available on SFC step
    70         self.ConnectorsCheckBox = {}
    70         self.ConnectorsCheckBox = {}
    71         for name, label in [("input", _("Input")),
    71         for name, label in [("input", _("Input")),
    72                             ("output", _("Output")),
    72                             ("output", _("Output")),
    73                             ("action", _("Action"))]:
    73                             ("action", _("Action"))]:
    75             if name == "output" or (name == "input" and not initial):
    75             if name == "output" or (name == "input" and not initial):
    76                 check_box.SetValue(True)
    76                 check_box.SetValue(True)
    77             self.Bind(wx.EVT_CHECKBOX, self.OnConnectorsChanged, check_box)
    77             self.Bind(wx.EVT_CHECKBOX, self.OnConnectorsChanged, check_box)
    78             self.LeftGridSizer.AddWindow(check_box, flag=wx.GROW)
    78             self.LeftGridSizer.AddWindow(check_box, flag=wx.GROW)
    79             self.ConnectorsCheckBox[name] = check_box
    79             self.ConnectorsCheckBox[name] = check_box
    80         
    80 
    81         # Add preview panel and associated label to sizers
    81         # Add preview panel and associated label to sizers
    82         self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    82         self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    83         self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    83         self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    84         
    84 
    85         # Add buttons sizer to sizers
    85         # Add buttons sizer to sizers
    86         self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
    86         self.MainSizer.AddSizer(self.ButtonSizer, border=20,
    87               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
    87               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
    88         
    88 
    89         # Save flag that indicates that step is initial
    89         # Save flag that indicates that step is initial
    90         self.Initial = initial
    90         self.Initial = initial
    91         
    91 
    92         # Set default name for step
    92         # Set default name for step
    93         self.StepName.ChangeValue(controller.GenerateNewName(
    93         self.StepName.ChangeValue(controller.GenerateNewName(
    94                tagname, None, "Step%d", 0))
    94                tagname, None, "Step%d", 0))
    95 
    95 
    96         self.Fit()
    96         self.Fit()
    97         
    97 
    98         # Step name text control is default control having keyboard focus
    98         # Step name text control is default control having keyboard focus
    99         self.StepName.SetFocus()
    99         self.StepName.SetFocus()
   100     
   100 
   101     def SetValues(self, values):
   101     def SetValues(self, values):
   102         """
   102         """
   103         Set default block parameters
   103         Set default block parameters
   104         @param values: Block parameters values
   104         @param values: Block parameters values
   105         """
   105         """
   106         # For each parameters defined, set corresponding control value
   106         # For each parameters defined, set corresponding control value
   107         for name, value in values.items():
   107         for name, value in values.items():
   108             
   108 
   109             # Parameter is step name
   109             # Parameter is step name
   110             if name == "name":
   110             if name == "name":
   111                 self.StepName.ChangeValue(value)
   111                 self.StepName.ChangeValue(value)
   112         
   112 
   113             # Set value of other controls
   113             # Set value of other controls
   114             else:
   114             else:
   115                 control = self.ConnectorsCheckBox.get(name, None)
   115                 control = self.ConnectorsCheckBox.get(name, None)
   116                 if control is not None:
   116                 if control is not None:
   117                     control.SetValue(value)
   117                     control.SetValue(value)
   118         
   118 
   119         # Refresh preview panel
   119         # Refresh preview panel
   120         self.RefreshPreview()
   120         self.RefreshPreview()
   121         
   121 
   122     def GetValues(self):
   122     def GetValues(self):
   123         """
   123         """
   124         Return step parameters defined in dialog
   124         Return step parameters defined in dialog
   125         @return: {parameter_name: parameter_value,...}
   125         @return: {parameter_name: parameter_value,...}
   126         """
   126         """
   128         values.update({
   128         values.update({
   129             name: control.IsChecked()
   129             name: control.IsChecked()
   130             for name, control in self.ConnectorsCheckBox.iteritems()})
   130             for name, control in self.ConnectorsCheckBox.iteritems()})
   131         values["width"], values["height"] = self.Element.GetSize()
   131         values["width"], values["height"] = self.Element.GetSize()
   132         return values
   132         return values
   133     
   133 
   134     def OnOK(self, event):
   134     def OnOK(self, event):
   135         """
   135         """
   136         Called when dialog OK button is pressed
   136         Called when dialog OK button is pressed
   137         Test if step name defined is valid
   137         Test if step name defined is valid
   138         @param event: wx.Event from OK button
   138         @param event: wx.Event from OK button
   139         """
   139         """
   140         message = None
   140         message = None
   141         
   141 
   142         # Get step name typed by user
   142         # Get step name typed by user
   143         step_name = self.StepName.GetValue()
   143         step_name = self.StepName.GetValue()
   144         
   144 
   145         # Test that a name have been defined
   145         # Test that a name have been defined
   146         if step_name == "":
   146         if step_name == "":
   147             message = _("Form isn't complete. Name must be filled!")
   147             message = _("Form isn't complete. Name must be filled!")
   148         
   148 
   149         # If an error have been identify, show error message dialog
   149         # If an error have been identify, show error message dialog
   150         if message is not None:
   150         if message is not None:
   151             self.ShowErrorMessage(message)
   151             self.ShowErrorMessage(message)
   152         
   152 
   153         # Test step name validity
   153         # Test step name validity
   154         elif self.TestElementName(step_name):
   154         elif self.TestElementName(step_name):
   155             # Call BlockPreviewDialog function
   155             # Call BlockPreviewDialog function
   156             BlockPreviewDialog.OnOK(self, event)
   156             BlockPreviewDialog.OnOK(self, event)
   157     
   157 
   158     def OnConnectorsChanged(self, event):
   158     def OnConnectorsChanged(self, event):
   159         """
   159         """
   160         Called when a step connector value changed
   160         Called when a step connector value changed
   161         @param event: wx.CheckBoxEvent
   161         @param event: wx.CheckBoxEvent
   162         """
   162         """
   168         Called when step name value changed
   168         Called when step name value changed
   169         @param event: wx.TextEvent
   169         @param event: wx.TextEvent
   170         """
   170         """
   171         self.RefreshPreview()
   171         self.RefreshPreview()
   172         event.Skip()
   172         event.Skip()
   173     
   173 
   174     def RefreshPreview(self):
   174     def RefreshPreview(self):
   175         """
   175         """
   176         Refresh preview panel of graphic element
   176         Refresh preview panel of graphic element
   177         Override BlockPreviewDialog function
   177         Override BlockPreviewDialog function
   178         """
   178         """
   179         # Set graphic element displayed, creating a SFC step element
   179         # Set graphic element displayed, creating a SFC step element
   180         self.Element = SFC_Step(self.Preview, 
   180         self.Element = SFC_Step(self.Preview,
   181                                 self.StepName.GetValue(), 
   181                                 self.StepName.GetValue(),
   182                                 self.Initial)
   182                                 self.Initial)
   183         
   183 
   184         # Update connectors of SFC step element according to check boxes value
   184         # Update connectors of SFC step element according to check boxes value
   185         for name, control in self.ConnectorsCheckBox.iteritems():
   185         for name, control in self.ConnectorsCheckBox.iteritems():
   186             if control.IsChecked():
   186             if control.IsChecked():
   187                 getattr(self.Element, "Add" + name.capitalize())()
   187                 getattr(self.Element, "Add" + name.capitalize())()
   188             else:
   188             else:
   189                 getattr(self.Element, "Remove" + name.capitalize())()
   189                 getattr(self.Element, "Remove" + name.capitalize())()
   190         
   190 
   191         # Call BlockPreviewDialog function
   191         # Call BlockPreviewDialog function
   192         BlockPreviewDialog.RefreshPreview(self)
   192         BlockPreviewDialog.RefreshPreview(self)