60 @param tagname: Tagname of project POU edited |
60 @param tagname: Tagname of project POU edited |
61 @param exclude_input: Exclude input from variable class selection |
61 @param exclude_input: Exclude input from variable class selection |
62 """ |
62 """ |
63 BlockPreviewDialog.__init__(self, parent, controller, tagname, |
63 BlockPreviewDialog.__init__(self, parent, controller, tagname, |
64 title=_('Variable Properties')) |
64 title=_('Variable Properties')) |
65 |
65 |
66 # Init common sizers |
66 # Init common sizers |
67 self._init_sizers(4, 2, 4, None, 3, 2) |
67 self._init_sizers(4, 2, 4, None, 3, 2) |
68 |
68 |
69 # Create label for variable class |
69 # Create label for variable class |
70 class_label = wx.StaticText(self, label=_('Class:')) |
70 class_label = wx.StaticText(self, label=_('Class:')) |
71 self.LeftGridSizer.AddWindow(class_label, flag=wx.GROW) |
71 self.LeftGridSizer.AddWindow(class_label, flag=wx.GROW) |
72 |
72 |
73 # Create a combo box for defining variable class |
73 # Create a combo box for defining variable class |
74 self.Class = wx.ComboBox(self, style=wx.CB_READONLY) |
74 self.Class = wx.ComboBox(self, style=wx.CB_READONLY) |
75 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class) |
75 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class) |
76 self.LeftGridSizer.AddWindow(self.Class, flag=wx.GROW) |
76 self.LeftGridSizer.AddWindow(self.Class, flag=wx.GROW) |
77 |
77 |
78 # Create label for variable execution order |
78 # Create label for variable execution order |
79 execution_order_label = wx.StaticText(self, |
79 execution_order_label = wx.StaticText(self, |
80 label=_('Execution Order:')) |
80 label=_('Execution Order:')) |
81 self.LeftGridSizer.AddWindow(execution_order_label, flag=wx.GROW) |
81 self.LeftGridSizer.AddWindow(execution_order_label, flag=wx.GROW) |
82 |
82 |
83 # Create spin control for defining variable execution order |
83 # Create spin control for defining variable execution order |
84 self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS) |
84 self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS) |
85 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, |
85 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, |
86 self.ExecutionOrder) |
86 self.ExecutionOrder) |
87 self.LeftGridSizer.AddWindow(self.ExecutionOrder, flag=wx.GROW) |
87 self.LeftGridSizer.AddWindow(self.ExecutionOrder, flag=wx.GROW) |
88 |
88 |
89 # Create label for variable expression |
89 # Create label for variable expression |
90 name_label = wx.StaticText(self, label=_('Expression:')) |
90 name_label = wx.StaticText(self, label=_('Expression:')) |
91 self.RightGridSizer.AddWindow(name_label, border=5, |
91 self.RightGridSizer.AddWindow(name_label, border=5, |
92 flag=wx.GROW|wx.BOTTOM) |
92 flag=wx.GROW|wx.BOTTOM) |
93 |
93 |
94 # Create text control for defining variable expression |
94 # Create text control for defining variable expression |
95 self.Expression = wx.TextCtrl(self) |
95 self.Expression = wx.TextCtrl(self) |
96 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression) |
96 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression) |
97 self.RightGridSizer.AddWindow(self.Expression, flag=wx.GROW) |
97 self.RightGridSizer.AddWindow(self.Expression, flag=wx.GROW) |
98 |
98 |
99 # Create a list box to selected variable expression in the list of |
99 # Create a list box to selected variable expression in the list of |
100 # variables defined in POU |
100 # variables defined in POU |
101 self.VariableName = wx.ListBox(self, size=wx.Size(-1,120), |
101 self.VariableName = wx.ListBox(self, size=wx.Size(-1,120), |
102 style=wx.LB_SINGLE|wx.LB_SORT) |
102 style=wx.LB_SINGLE|wx.LB_SORT) |
103 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName) |
103 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName) |
104 self.RightGridSizer.AddWindow(self.VariableName, border=4, flag=wx.GROW|wx.TOP) |
104 self.RightGridSizer.AddWindow(self.VariableName, border=4, flag=wx.GROW|wx.TOP) |
105 |
105 |
106 # Add preview panel and associated label to sizers |
106 # Add preview panel and associated label to sizers |
107 self.MainSizer.AddWindow(self.PreviewLabel, border=20, |
107 self.MainSizer.AddWindow(self.PreviewLabel, border=20, |
108 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
108 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
109 self.MainSizer.AddWindow(self.Preview, border=20, |
109 self.MainSizer.AddWindow(self.Preview, border=20, |
110 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
110 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
111 |
111 |
112 # Add buttons sizer to sizers |
112 # Add buttons sizer to sizers |
113 self.MainSizer.AddSizer(self.ButtonSizer, border=20, |
113 self.MainSizer.AddSizer(self.ButtonSizer, border=20, |
114 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
114 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
115 |
115 |
116 # Set options that can be selected in class combo box |
116 # Set options that can be selected in class combo box |
117 for var_class, choice in VARIABLE_CLASSES_DICT.iteritems(): |
117 for var_class, choice in VARIABLE_CLASSES_DICT.iteritems(): |
118 if not exclude_input or var_class != INPUT: |
118 if not exclude_input or var_class != INPUT: |
119 self.Class.Append(choice) |
119 self.Class.Append(choice) |
120 self.Class.SetSelection(0) |
120 self.Class.SetSelection(0) |
121 |
121 |
122 # Extract list of variables defined in POU |
122 # Extract list of variables defined in POU |
123 self.RefreshVariableList() |
123 self.RefreshVariableList() |
124 |
124 |
125 # Refresh values in name list box |
125 # Refresh values in name list box |
126 self.RefreshNameList() |
126 self.RefreshNameList() |
127 |
127 |
128 self.Preview.SetInitialSize(wx.Size(-1, 60)) |
128 self.Preview.SetInitialSize(wx.Size(-1, 60)) |
129 self.Fit() |
129 self.Fit() |
130 |
130 |
131 # Class combo box is default control having keyboard focus |
131 # Class combo box is default control having keyboard focus |
132 self.Class.SetFocus() |
132 self.Class.SetFocus() |
136 Called to refresh names in name list box |
136 Called to refresh names in name list box |
137 """ |
137 """ |
138 # Get variable class to select POU variable applicable |
138 # Get variable class to select POU variable applicable |
139 var_class = VARIABLE_CLASSES_DICT_REVERSE[ |
139 var_class = VARIABLE_CLASSES_DICT_REVERSE[ |
140 self.Class.GetStringSelection()] |
140 self.Class.GetStringSelection()] |
141 |
141 |
142 # Refresh names in name list box by selecting variables in POU variables |
142 # Refresh names in name list box by selecting variables in POU variables |
143 # list that can be applied to variable class |
143 # list that can be applied to variable class |
144 self.VariableName.Clear() |
144 self.VariableName.Clear() |
145 for name, (var_type, value_type) in self.VariableList.iteritems(): |
145 for name, (var_type, value_type) in self.VariableList.iteritems(): |
146 if var_type != "Input" or var_class == INPUT: |
146 if var_type != "Input" or var_class == INPUT: |
147 self.VariableName.Append(name) |
147 self.VariableName.Append(name) |
148 |
148 |
149 # Get variable expression and select corresponding value in name list |
149 # Get variable expression and select corresponding value in name list |
150 # box if it exists |
150 # box if it exists |
151 selected = self.Expression.GetValue() |
151 selected = self.Expression.GetValue() |
152 if (selected != "" and |
152 if (selected != "" and |
153 self.VariableName.FindString(selected) != wx.NOT_FOUND): |
153 self.VariableName.FindString(selected) != wx.NOT_FOUND): |
154 self.VariableName.SetStringSelection(selected) |
154 self.VariableName.SetStringSelection(selected) |
155 else: |
155 else: |
156 self.VariableName.SetSelection(wx.NOT_FOUND) |
156 self.VariableName.SetSelection(wx.NOT_FOUND) |
157 |
157 |
158 # Disable name list box if no name present inside |
158 # Disable name list box if no name present inside |
159 self.VariableName.Enable(self.VariableName.GetCount() > 0) |
159 self.VariableName.Enable(self.VariableName.GetCount() > 0) |
160 |
160 |
161 def SetValues(self, values): |
161 def SetValues(self, values): |
162 """ |
162 """ |
163 Set default variable parameters |
163 Set default variable parameters |
164 @param values: Variable parameters values |
164 @param values: Variable parameters values |
165 """ |
165 """ |
166 |
166 |
167 # Get class parameter value |
167 # Get class parameter value |
168 var_class = values.get("class", None) |
168 var_class = values.get("class", None) |
169 if var_class is not None: |
169 if var_class is not None: |
170 # Set class selected in class combo box |
170 # Set class selected in class combo box |
171 self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[var_class]) |
171 self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[var_class]) |
172 # Refresh names in name list box according to var class |
172 # Refresh names in name list box according to var class |
173 self.RefreshNameList() |
173 self.RefreshNameList() |
174 |
174 |
175 # For each parameters defined, set corresponding control value |
175 # For each parameters defined, set corresponding control value |
176 for name, value in values.items(): |
176 for name, value in values.items(): |
177 |
177 |
178 # Parameter is variable expression |
178 # Parameter is variable expression |
179 if name == "expression": |
179 if name == "expression": |
180 # Set expression text control value |
180 # Set expression text control value |
181 self.Expression.ChangeValue(value) |
181 self.Expression.ChangeValue(value) |
182 # Select corresponding text in name list box if it exists |
182 # Select corresponding text in name list box if it exists |
183 if self.VariableName.FindString(value) != wx.NOT_FOUND: |
183 if self.VariableName.FindString(value) != wx.NOT_FOUND: |
184 self.VariableName.SetStringSelection(value) |
184 self.VariableName.SetStringSelection(value) |
185 else: |
185 else: |
186 self.VariableName.SetSelection(wx.NOT_FOUND) |
186 self.VariableName.SetSelection(wx.NOT_FOUND) |
187 |
187 |
188 # Parameter is variable execution order |
188 # Parameter is variable execution order |
189 elif name == "executionOrder": |
189 elif name == "executionOrder": |
190 self.ExecutionOrder.SetValue(value) |
190 self.ExecutionOrder.SetValue(value) |
191 |
191 |
192 # Refresh preview panel |
192 # Refresh preview panel |
193 self.RefreshPreview() |
193 self.RefreshPreview() |
194 self.Fit() |
194 self.Fit() |
195 |
195 |
196 def GetValues(self): |
196 def GetValues(self): |
197 """ |
197 """ |
198 Return block parameters defined in dialog |
198 Return block parameters defined in dialog |
199 @return: {parameter_name: parameter_value,...} |
199 @return: {parameter_name: parameter_value,...} |
200 """ |
200 """ |
247 """ |
247 """ |
248 # Change expression test control value to the value selected in name |
248 # Change expression test control value to the value selected in name |
249 # list box if value selected is valid |
249 # list box if value selected is valid |
250 if self.VariableName.GetSelection() != wx.NOT_FOUND: |
250 if self.VariableName.GetSelection() != wx.NOT_FOUND: |
251 self.Expression.ChangeValue(self.VariableName.GetStringSelection()) |
251 self.Expression.ChangeValue(self.VariableName.GetStringSelection()) |
252 |
252 |
253 self.RefreshPreview() |
253 self.RefreshPreview() |
254 event.Skip() |
254 event.Skip() |
255 |
255 |
256 def OnExpressionChanged(self, event): |
256 def OnExpressionChanged(self, event): |
257 """ |
257 """ |
258 Called when expression text control is changed by user |
258 Called when expression text control is changed by user |
259 @param event: wx.ListBoxEvent |
259 @param event: wx.ListBoxEvent |
260 """ |
260 """ |
261 # Select the corresponding value in name list box if it exists |
261 # Select the corresponding value in name list box if it exists |
262 self.VariableName.SetSelection( |
262 self.VariableName.SetSelection( |
263 self.VariableName.FindString(self.Expression.GetValue())) |
263 self.VariableName.FindString(self.Expression.GetValue())) |
264 |
264 |
265 self.RefreshPreview() |
265 self.RefreshPreview() |
266 event.Skip() |
266 event.Skip() |
267 |
267 |
268 def OnExecutionOrderChanged(self, event): |
268 def OnExecutionOrderChanged(self, event): |
269 """ |
269 """ |
270 Called when block execution control value changed |
270 Called when block execution control value changed |
271 @param event: wx.SpinEvent |
271 @param event: wx.SpinEvent |
272 """ |
272 """ |
273 self.RefreshPreview() |
273 self.RefreshPreview() |
274 event.Skip() |
274 event.Skip() |
275 |
275 |
276 def RefreshPreview(self): |
276 def RefreshPreview(self): |
277 """ |
277 """ |
278 Refresh preview panel of graphic element |
278 Refresh preview panel of graphic element |
279 Override BlockPreviewDialog function |
279 Override BlockPreviewDialog function |
280 """ |
280 """ |
281 # Get expression value to put in FBD variable element |
281 # Get expression value to put in FBD variable element |
282 name = self.Expression.GetValue() |
282 name = self.Expression.GetValue() |
283 |
283 |
284 # Set graphic element displayed, creating a FBD variable element |
284 # Set graphic element displayed, creating a FBD variable element |
285 self.Element = FBD_Variable(self.Preview, |
285 self.Element = FBD_Variable(self.Preview, |
286 VARIABLE_CLASSES_DICT_REVERSE[ |
286 VARIABLE_CLASSES_DICT_REVERSE[ |
287 self.Class.GetStringSelection()], |
287 self.Class.GetStringSelection()], |
288 name, |
288 name, |
289 self.VariableList.get(name, ("", ""))[1], |
289 self.VariableList.get(name, ("", ""))[1], |
290 executionOrder = self.ExecutionOrder.GetValue()) |
290 executionOrder = self.ExecutionOrder.GetValue()) |
291 |
291 |
292 # Call BlockPreviewDialog function |
292 # Call BlockPreviewDialog function |
293 BlockPreviewDialog.RefreshPreview(self) |
293 BlockPreviewDialog.RefreshPreview(self) |
294 |
|
295 |
|