52 |
52 |
53 column_sizer = wx.BoxSizer(wx.HORIZONTAL) |
53 column_sizer = wx.BoxSizer(wx.HORIZONTAL) |
54 main_sizer.AddSizer(column_sizer, border=20, |
54 main_sizer.AddSizer(column_sizer, border=20, |
55 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
55 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
56 |
56 |
57 left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=5) |
57 left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=4, vgap=5) |
58 left_gridsizer.AddGrowableCol(0) |
58 left_gridsizer.AddGrowableCol(0) |
59 column_sizer.AddSizer(left_gridsizer, 1, border=5, |
59 column_sizer.AddSizer(left_gridsizer, 1, border=5, |
60 flag=wx.GROW|wx.RIGHT) |
60 flag=wx.GROW|wx.RIGHT) |
61 |
61 |
62 class_label = wx.StaticText(self, label=_('Class:')) |
62 class_label = wx.StaticText(self, label=_('Class:')) |
64 |
64 |
65 self.Class = wx.ComboBox(self, style=wx.CB_READONLY) |
65 self.Class = wx.ComboBox(self, style=wx.CB_READONLY) |
66 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class) |
66 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class) |
67 left_gridsizer.AddWindow(self.Class, flag=wx.GROW) |
67 left_gridsizer.AddWindow(self.Class, flag=wx.GROW) |
68 |
68 |
69 expression_label = wx.StaticText(self, label=_('Expression:')) |
|
70 left_gridsizer.AddWindow(expression_label, flag=wx.GROW) |
|
71 |
|
72 self.Expression = wx.TextCtrl(self) |
|
73 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression) |
|
74 left_gridsizer.AddWindow(self.Expression, flag=wx.GROW) |
|
75 |
|
76 execution_order_label = wx.StaticText(self, label=_('Execution Order:')) |
69 execution_order_label = wx.StaticText(self, label=_('Execution Order:')) |
77 left_gridsizer.AddWindow(execution_order_label, flag=wx.GROW) |
70 left_gridsizer.AddWindow(execution_order_label, flag=wx.GROW) |
78 |
71 |
79 self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS) |
72 self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS) |
80 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, self.ExecutionOrder) |
73 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, self.ExecutionOrder) |
81 left_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW) |
74 left_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW) |
82 |
75 |
83 right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
76 right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0) |
84 right_gridsizer.AddGrowableCol(0) |
77 right_gridsizer.AddGrowableCol(0) |
85 right_gridsizer.AddGrowableRow(1) |
78 right_gridsizer.AddGrowableRow(2) |
86 column_sizer.AddSizer(right_gridsizer, 1, border=5, |
79 column_sizer.AddSizer(right_gridsizer, 1, border=5, |
87 flag=wx.GROW|wx.LEFT) |
80 flag=wx.GROW|wx.LEFT) |
88 |
81 |
89 name_label = wx.StaticText(self, label=_('Name:')) |
82 name_label = wx.StaticText(self, label=_('Expression:')) |
90 right_gridsizer.AddWindow(name_label, flag=wx.GROW) |
83 right_gridsizer.AddWindow(name_label, border=5, flag=wx.GROW|wx.BOTTOM) |
91 |
84 |
92 self.VariableName = wx.ListBox(self, size=wx.Size(0, 0), |
85 self.Expression = wx.TextCtrl(self) |
|
86 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression) |
|
87 right_gridsizer.AddWindow(self.Expression, flag=wx.GROW) |
|
88 |
|
89 self.VariableName = wx.ListBox(self, size=wx.Size(0, 120), |
93 style=wx.LB_SINGLE|wx.LB_SORT) |
90 style=wx.LB_SINGLE|wx.LB_SORT) |
94 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName) |
91 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName) |
95 right_gridsizer.AddWindow(self.VariableName, flag=wx.GROW) |
92 right_gridsizer.AddWindow(self.VariableName, flag=wx.GROW) |
96 |
93 |
97 preview_label = wx.StaticText(self, label=_('Preview:')) |
94 preview_label = wx.StaticText(self, label=_('Preview:')) |
129 |
126 |
130 def SetPreviewFont(self, font): |
127 def SetPreviewFont(self, font): |
131 self.Preview.SetFont(font) |
128 self.Preview.SetFont(font) |
132 |
129 |
133 def RefreshNameList(self): |
130 def RefreshNameList(self): |
134 selected = self.VariableName.GetStringSelection() |
131 selected = self.Expression.GetValue() |
135 var_class = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |
132 var_class = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |
136 self.VariableName.Clear() |
133 self.VariableName.Clear() |
137 self.VariableName.Append("") |
|
138 for name, var_type, value_type in self.VarList: |
134 for name, var_type, value_type in self.VarList: |
139 if var_type != "Input" or var_class == INPUT: |
135 if var_type != "Input" or var_class == INPUT: |
140 self.VariableName.Append(name) |
136 self.VariableName.Append(name) |
141 if selected != "" and self.VariableName.FindString(selected) != wx.NOT_FOUND: |
137 if selected != "" and self.VariableName.FindString(selected) != wx.NOT_FOUND: |
142 self.VariableName.SetStringSelection(selected) |
138 self.VariableName.SetStringSelection(selected) |
143 self.Expression.Enable(False) |
|
144 else: |
139 else: |
145 self.VariableName.SetStringSelection("") |
140 self.VariableName.SetSelection(wx.NOT_FOUND) |
146 #self.Expression.Enable(var_class == INPUT) |
|
147 self.VariableName.Enable(self.VariableName.GetCount() > 0) |
141 self.VariableName.Enable(self.VariableName.GetCount() > 0) |
148 |
142 |
149 def SetMinVariableSize(self, size): |
143 def SetMinVariableSize(self, size): |
150 self.MinVariableSize = size |
144 self.MinVariableSize = size |
151 |
145 |
158 value_name = values.get("name", None) |
152 value_name = values.get("name", None) |
159 if value_type: |
153 if value_type: |
160 self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[value_type]) |
154 self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[value_type]) |
161 self.RefreshNameList() |
155 self.RefreshNameList() |
162 if value_name: |
156 if value_name: |
|
157 self.Expression.ChangeValue(value_name) |
163 if self.VariableName.FindString(value_name) != wx.NOT_FOUND: |
158 if self.VariableName.FindString(value_name) != wx.NOT_FOUND: |
164 self.VariableName.SetStringSelection(value_name) |
159 self.VariableName.SetStringSelection(value_name) |
165 self.Expression.Enable(False) |
|
166 else: |
160 else: |
167 self.Expression.SetValue(value_name) |
161 self.VariableName.SetSelection(wx.NOT_FOUND) |
168 self.VariableName.Enable(False) |
|
169 if "executionOrder" in values: |
162 if "executionOrder" in values: |
170 self.ExecutionOrder.SetValue(values["executionOrder"]) |
163 self.ExecutionOrder.SetValue(values["executionOrder"]) |
171 self.RefreshPreview() |
164 self.RefreshPreview() |
172 |
165 |
173 def GetValues(self): |
166 def GetValues(self): |
174 values = {} |
167 values = {} |
175 values["type"] = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |
168 values["type"] = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |
176 expression = self.Expression.GetValue() |
169 values["name"] = self.Expression.GetValue() |
177 if self.Expression.IsEnabled() and expression != "": |
|
178 values["name"] = expression |
|
179 else: |
|
180 values["name"] = self.VariableName.GetStringSelection() |
|
181 values["value_type"] = None |
170 values["value_type"] = None |
182 for var_name, var_type, value_type in self.VarList: |
171 for var_name, var_type, value_type in self.VarList: |
183 if var_name == values["name"]: |
172 if var_name == values["name"]: |
184 values["value_type"] = value_type |
173 values["value_type"] = value_type |
185 values["width"], values["height"] = self.Variable.GetSize() |
174 values["width"], values["height"] = self.Variable.GetSize() |
186 values["executionOrder"] = self.ExecutionOrder.GetValue() |
175 values["executionOrder"] = self.ExecutionOrder.GetValue() |
187 return values |
176 return values |
188 |
177 |
189 def OnOK(self, event): |
178 def OnOK(self, event): |
190 message = None |
179 message = None |
191 expression = self.Expression.GetValue() |
180 value = self.Expression.GetValue() |
192 if self.Expression.IsEnabled(): |
|
193 value = expression |
|
194 else: |
|
195 value = self.VariableName.GetStringSelection() |
|
196 if value == "": |
181 if value == "": |
197 message = _("At least a variable or an expression must be selected!") |
182 message = _("At least a variable or an expression must be selected!") |
198 elif value.upper() in IEC_KEYWORDS: |
183 elif value.upper() in IEC_KEYWORDS: |
199 message = _("\"%s\" is a keyword. It can't be used!") % value |
184 message = _("\"%s\" is a keyword. It can't be used!") % value |
200 if message is not None: |
185 if message is not None: |
208 self.RefreshNameList() |
193 self.RefreshNameList() |
209 self.RefreshPreview() |
194 self.RefreshPreview() |
210 event.Skip() |
195 event.Skip() |
211 |
196 |
212 def OnNameChanged(self, event): |
197 def OnNameChanged(self, event): |
213 if self.VariableName.GetStringSelection() != "": |
198 self.Expression.ChangeValue( |
214 self.Expression.Enable(False) |
199 self.VariableName.GetStringSelection()) |
215 elif VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] == INPUT: |
|
216 self.Expression.Enable(True) |
|
217 self.RefreshPreview() |
200 self.RefreshPreview() |
218 event.Skip() |
201 event.Skip() |
219 |
202 |
220 def OnExpressionChanged(self, event): |
203 def OnExpressionChanged(self, event): |
221 if self.Expression.GetValue() != "": |
204 expression = self.Expression.GetValue() |
222 self.VariableName.Enable(False) |
205 self.VariableName.SetSelection( |
223 else: |
206 self.VariableName.FindString(expression)) |
224 self.VariableName.Enable(True) |
|
225 self.RefreshPreview() |
207 self.RefreshPreview() |
226 event.Skip() |
208 event.Skip() |
227 |
209 |
228 def OnExecutionOrderChanged(self, event): |
210 def OnExecutionOrderChanged(self, event): |
229 self.RefreshPreview() |
211 self.RefreshPreview() |
231 |
213 |
232 def RefreshPreview(self): |
214 def RefreshPreview(self): |
233 dc = wx.ClientDC(self.Preview) |
215 dc = wx.ClientDC(self.Preview) |
234 dc.SetFont(self.Preview.GetFont()) |
216 dc.SetFont(self.Preview.GetFont()) |
235 dc.Clear() |
217 dc.Clear() |
236 expression = self.Expression.GetValue() |
218 name = self.Expression.GetValue() |
237 if self.Expression.IsEnabled() and expression != "": |
|
238 name = expression |
|
239 else: |
|
240 name = self.VariableName.GetStringSelection() |
|
241 type = "" |
219 type = "" |
242 for var_name, var_type, value_type in self.VarList: |
220 for var_name, var_type, value_type in self.VarList: |
243 if var_name == name: |
221 if var_name == name: |
244 type = value_type |
222 type = value_type |
245 classtype = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |
223 classtype = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] |