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) |