124 self.MinBlockSize = None |
124 self.MinBlockSize = None |
125 |
125 |
126 EVT_PAINT(self, self.OnPaint) |
126 EVT_PAINT(self, self.OnPaint) |
127 EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK) |
127 EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK) |
128 |
128 |
129 def FindTreeItem(self, root, name): |
129 def FindTreeItem(self, root, name, inputs = None): |
130 if root.IsOk(): |
130 if root.IsOk(): |
131 if self.TypeTree.GetItemText(root) == name: |
131 pydata = self.TypeTree.GetPyData(root) |
|
132 if inputs and "inputs" in pydata: |
|
133 print inputs, pydata["inputs"] |
|
134 same_inputs = pydata["inputs"] == inputs |
|
135 else: |
|
136 same_inputs = True |
|
137 if self.TypeTree.GetItemText(root) == name and same_inputs: |
132 return root |
138 return root |
133 else: |
139 else: |
134 item, root_cookie = self.TypeTree.GetFirstChild(root) |
140 item, root_cookie = self.TypeTree.GetFirstChild(root) |
135 while item.IsOk(): |
141 while item.IsOk(): |
136 result = self.FindTreeItem(item, name) |
142 result = self.FindTreeItem(item, name, inputs) |
137 if result: |
143 if result: |
138 return result |
144 return result |
139 item, root_cookie = self.TypeTree.GetNextChild(root, root_cookie) |
145 item, root_cookie = self.TypeTree.GetNextChild(root, root_cookie) |
140 return None |
146 return None |
141 |
147 |
153 else: |
159 else: |
154 self.EndModal(wxID_OK) |
160 self.EndModal(wxID_OK) |
155 |
161 |
156 def SetBlockList(self, blocktypes): |
162 def SetBlockList(self, blocktypes): |
157 root = self.TypeTree.AddRoot("") |
163 root = self.TypeTree.AddRoot("") |
158 self.TypeTree.SetPyData(root, CATEGORY) |
164 self.TypeTree.SetPyData(root, {"type" : CATEGORY}) |
159 for category in blocktypes: |
165 for category in blocktypes: |
160 category_item = self.TypeTree.AppendItem(root, category["name"]) |
166 category_item = self.TypeTree.AppendItem(root, category["name"]) |
161 self.TypeTree.SetPyData(category_item, CATEGORY) |
167 self.TypeTree.SetPyData(category_item, {"type" : CATEGORY}) |
162 for blocktype in category["list"]: |
168 for blocktype in category["list"]: |
163 blocktype_item = self.TypeTree.AppendItem(category_item, blocktype["name"]) |
169 blocktype_item = self.TypeTree.AppendItem(category_item, blocktype["name"]) |
164 self.TypeTree.SetPyData(blocktype_item, BLOCK) |
170 self.TypeTree.SetPyData(blocktype_item, {"type" : BLOCK, "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])}) |
165 |
171 |
166 def SetMinBlockSize(self, size): |
172 def SetMinBlockSize(self, size): |
167 self.MinBlockSize = size |
173 self.MinBlockSize = size |
168 |
174 |
169 def SetValues(self, values): |
175 def SetValues(self, values): |
170 for name, value in values.items(): |
176 for name, value in values.items(): |
171 if name == "type": |
177 if name == "type": |
172 item = self.FindTreeItem(self.TypeTree.GetRootItem(), value) |
178 inputs = None |
|
179 if "inputs" in values: |
|
180 inputs = values["inputs"] |
|
181 item = self.FindTreeItem(self.TypeTree.GetRootItem(), value, inputs) |
173 if item: |
182 if item: |
174 self.TypeTree.SelectItem(item) |
183 self.TypeTree.SelectItem(item) |
175 elif name == "name": |
184 elif name == "name": |
176 self.Name.SetValue(value) |
185 self.Name.SetValue(value) |
177 elif name == "extension": |
186 elif name == "extension": |
178 self.Inputs.SetValue(value) |
187 self.Inputs.SetValue(value) |
179 self.RefreshPreview() |
188 self.RefreshPreview() |
180 |
189 |
181 def GetValues(self): |
190 def GetValues(self): |
182 values = {} |
191 values = {} |
183 values["type"] = self.TypeTree.GetItemText(self.TypeTree.GetSelection()) |
192 item = self.TypeTree.GetSelection() |
|
193 values["type"] = self.TypeTree.GetItemText(item) |
|
194 values["inputs"] = self.TypeTree.GetPyData(item)["inputs"] |
184 if self.Name.GetValue() != "": |
195 if self.Name.GetValue() != "": |
185 values["name"] = self.Name.GetValue() |
196 values["name"] = self.Name.GetValue() |
186 values["width"], values["height"] = self.Block.GetSize() |
197 values["width"], values["height"] = self.Block.GetSize() |
187 values["extension"] = self.Inputs.GetValue() |
198 values["extension"] = self.Inputs.GetValue() |
188 return values |
199 return values |
189 |
200 |
190 def OnTypeTreeItemSelected(self, event): |
201 def OnTypeTreeItemSelected(self, event): |
191 self.Name.SetValue("") |
202 self.Name.SetValue("") |
192 selected = event.GetItem() |
203 selected = event.GetItem() |
193 if self.TypeTree.GetPyData(selected) != CATEGORY: |
204 pydata = self.TypeTree.GetPyData(selected) |
194 blocktype = GetBlockType(self.TypeTree.GetItemText(selected)) |
205 if pydata["type"] != CATEGORY: |
|
206 blocktype = GetBlockType(self.TypeTree.GetItemText(selected), pydata["inputs"]) |
195 if blocktype: |
207 if blocktype: |
196 self.Inputs.SetValue(len(blocktype["inputs"])) |
208 self.Inputs.SetValue(len(blocktype["inputs"])) |
197 self.Inputs.Enable(blocktype["extensible"]) |
209 self.Inputs.Enable(blocktype["extensible"]) |
198 self.Name.Enable(blocktype["type"] != "function") |
210 self.Name.Enable(blocktype["type"] != "function") |
199 self.TypeDesc.SetValue(blocktype["comment"]) |
211 self.TypeDesc.SetValue(blocktype["comment"]) |
229 |
241 |
230 def RefreshPreview(self): |
242 def RefreshPreview(self): |
231 dc = wxClientDC(self.Preview) |
243 dc = wxClientDC(self.Preview) |
232 dc.Clear() |
244 dc.Clear() |
233 item = self.TypeTree.GetSelection() |
245 item = self.TypeTree.GetSelection() |
234 if self.TypeTree.GetPyData(item) == CATEGORY: |
246 pydata = self.TypeTree.GetPyData(item) |
|
247 if pydata["type"] == CATEGORY: |
235 self.Block = None |
248 self.Block = None |
236 else: |
249 else: |
237 blocktype = self.TypeTree.GetItemText(item) |
250 blocktype = self.TypeTree.GetItemText(item) |
238 if blocktype: |
251 if blocktype: |
239 self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue()) |
252 self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue(), inputs = pydata["inputs"]) |
240 width, height = self.MinBlockSize |
253 width, height = self.MinBlockSize |
241 min_width, min_height = self.Block.GetMinSize() |
254 min_width, min_height = self.Block.GetMinSize() |
242 width, height = max(min_width, width), max(min_height, height) |
255 width, height = max(min_width, width), max(min_height, height) |
243 self.Block.SetSize(width, height) |
256 self.Block.SetSize(width, height) |
244 clientsize = self.Preview.GetClientSize() |
257 clientsize = self.Preview.GetClientSize() |
258 # Create New Variable Dialog |
271 # Create New Variable Dialog |
259 #------------------------------------------------------------------------------- |
272 #------------------------------------------------------------------------------- |
260 |
273 |
261 [wxID_VARIABLEPROPERTIESDIALOG, wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, |
274 [wxID_VARIABLEPROPERTIESDIALOG, wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, |
262 wxID_VARIABLEPROPERTIESDIALOGNAME, wxID_VARIABLEPROPERTIESDIALOGCLASS, |
275 wxID_VARIABLEPROPERTIESDIALOGNAME, wxID_VARIABLEPROPERTIESDIALOGCLASS, |
263 wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, |
276 wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION, |
264 wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, |
277 wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, |
265 ] = [wx.NewId() for _init_ctrls in range(8)] |
278 wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4, |
|
279 ] = [wx.NewId() for _init_ctrls in range(10)] |
266 |
280 |
267 class VariablePropertiesDialog(wx.Dialog): |
281 class VariablePropertiesDialog(wx.Dialog): |
268 def _init_coll_flexGridSizer1_Items(self, parent): |
282 def _init_coll_flexGridSizer1_Items(self, parent): |
269 # generated method, don't edit |
283 # generated method, don't edit |
270 |
284 |
280 |
294 |
281 def _init_ctrls(self, prnt): |
295 def _init_ctrls(self, prnt): |
282 # generated method, don't edit |
296 # generated method, don't edit |
283 wx.Dialog.__init__(self, id=wxID_VARIABLEPROPERTIESDIALOG, |
297 wx.Dialog.__init__(self, id=wxID_VARIABLEPROPERTIESDIALOG, |
284 name='VariablePropertiesDialog', parent=prnt, pos=wx.Point(376, 223), |
298 name='VariablePropertiesDialog', parent=prnt, pos=wx.Point(376, 223), |
285 size=wx.Size(400, 320), style=wx.DEFAULT_DIALOG_STYLE, |
299 size=wx.Size(400, 380), style=wx.DEFAULT_DIALOG_STYLE, |
286 title='Variable Properties') |
300 title='Variable Properties') |
287 self.SetClientSize(wx.Size(400, 320)) |
301 self.SetClientSize(wx.Size(400, 380)) |
288 |
302 |
289 self.MainPanel = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, |
303 self.MainPanel = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, |
290 name='MainPanel', parent=self, pos=wx.Point(0, 0), |
304 name='MainPanel', parent=self, pos=wx.Point(0, 0), |
291 size=wx.Size(400, 280), style=wx.TAB_TRAVERSAL) |
305 size=wx.Size(400, 280), style=wx.TAB_TRAVERSAL) |
292 self.MainPanel.SetAutoLayout(True) |
306 self.MainPanel.SetAutoLayout(True) |
294 self.staticText1 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, |
308 self.staticText1 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, |
295 label='Class:', name='staticText1', parent=self.MainPanel, |
309 label='Class:', name='staticText1', parent=self.MainPanel, |
296 pos=wx.Point(24, 24), size=wx.Size(70, 17), style=0) |
310 pos=wx.Point(24, 24), size=wx.Size(70, 17), style=0) |
297 |
311 |
298 self.staticText2 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, |
312 self.staticText2 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, |
299 label='Name:', name='staticText2', parent=self.MainPanel, |
313 label='Expression:', name='staticText2', parent=self.MainPanel, |
|
314 pos=wx.Point(24, 90), size=wx.Size(100, 17), style=0) |
|
315 |
|
316 self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, |
|
317 label='Name:', name='staticText3', parent=self.MainPanel, |
300 pos=wx.Point(204, 24), size=wx.Size(70, 17), style=0) |
318 pos=wx.Point(204, 24), size=wx.Size(70, 17), style=0) |
301 |
319 |
302 self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, |
320 self.staticText4 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4, |
303 label='Preview:', name='staticText3', parent=self.MainPanel, |
321 label='Preview:', name='staticText4', parent=self.MainPanel, |
304 pos=wx.Point(24, 78), size=wx.Size(100, 17), style=0) |
322 pos=wx.Point(24, 144), size=wx.Size(100, 17), style=0) |
305 |
323 |
306 self.Class = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGCLASS, |
324 self.Class = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGCLASS, |
307 name='Class', parent=self.MainPanel, pos=wx.Point(24, 48), |
325 name='Class', parent=self.MainPanel, pos=wx.Point(24, 48), |
308 size=wx.Size(145, 24), style=0) |
326 size=wx.Size(145, 24), style=0) |
309 EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGCLASS, self.OnClassChanged) |
327 EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGCLASS, self.OnClassChanged) |
310 |
328 |
311 self.Name = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGNAME, |
329 self.Name = wx.ListBox(id=wxID_VARIABLEPROPERTIESDIALOGNAME, |
312 name='Name', parent=self.MainPanel, pos=wx.Point(204, 48), |
330 name='Name', parent=self.MainPanel, pos=wx.Point(204, 48), |
|
331 size=wx.Size(145, 90), style=wx.LB_SINGLE) |
|
332 EVT_LISTBOX(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged) |
|
333 |
|
334 self.Expression = wx.TextCtrl(id=wxID_VARIABLEPROPERTIESDIALOGEXPRESSION, |
|
335 name='Expression', parent=self.MainPanel, pos=wx.Point(24, 114), |
313 size=wx.Size(145, 24), style=0) |
336 size=wx.Size(145, 24), style=0) |
314 EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged) |
337 EVT_TEXT(self, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION, self.OnExpressionChanged) |
315 |
338 |
316 self.Preview = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGPREVIEW, |
339 self.Preview = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGPREVIEW, |
317 name='Preview', parent=self.MainPanel, pos=wx.Point(24, 104), |
340 name='Preview', parent=self.MainPanel, pos=wx.Point(24, 170), |
318 size=wx.Size(350, 150), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER) |
341 size=wx.Size(350, 150), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER) |
319 self.Preview.SetBackgroundColour(wxColour(255,255,255)) |
342 self.Preview.SetBackgroundColour(wxColour(255,255,255)) |
320 |
343 |
321 self._init_sizers() |
344 self._init_sizers() |
322 |
345 |
336 EVT_PAINT(self, self.OnPaint) |
359 EVT_PAINT(self, self.OnPaint) |
337 |
360 |
338 def RefreshNameList(self): |
361 def RefreshNameList(self): |
339 selected = self.Name.GetStringSelection() |
362 selected = self.Name.GetStringSelection() |
340 self.Name.Clear() |
363 self.Name.Clear() |
|
364 self.Name.Append("") |
341 for name, var_type, value_type in self.VarList: |
365 for name, var_type, value_type in self.VarList: |
342 if var_type in ["Local","Temp"]: |
366 if var_type in ["Local","Temp","Global","External"]: |
343 self.Name.Append(name) |
367 self.Name.Append(name) |
344 elif var_type == "Input" and self.Class.GetStringSelection() == "Input": |
368 elif var_type == "Input" and self.Class.GetStringSelection() == "Input": |
345 self.Name.Append(name) |
369 self.Name.Append(name) |
346 elif var_type == "Output" and self.Class.GetStringSelection() == "Output": |
370 elif var_type == "Output" and self.Class.GetStringSelection() == "Output": |
347 self.Name.Append(name) |
371 self.Name.Append(name) |
348 elif var_type == "InOut" and self.Class.GetStringSelection() == "InOut": |
372 elif var_type == "InOut" and self.Class.GetStringSelection() == "InOut": |
349 self.Name.Append(name) |
373 self.Name.Append(name) |
350 if self.Name.FindString(selected) != wxNOT_FOUND: |
374 if self.Name.FindString(selected) != wxNOT_FOUND: |
351 self.Name.SetStringSelection(selected) |
375 self.Name.SetStringSelection(selected) |
|
376 else: |
|
377 self.Name.SetStringSelection("") |
352 self.Name.Enable(self.Name.GetCount() > 0) |
378 self.Name.Enable(self.Name.GetCount() > 0) |
353 |
379 |
354 def SetMinVariableSize(self, size): |
380 def SetMinVariableSize(self, size): |
355 self.MinVariableSize = size |
381 self.MinVariableSize = size |
356 |
382 |
378 values["type"] = INPUT |
409 values["type"] = INPUT |
379 elif classtype == "Output": |
410 elif classtype == "Output": |
380 values["type"] = OUTPUT |
411 values["type"] = OUTPUT |
381 elif classtype == "InOut": |
412 elif classtype == "InOut": |
382 values["type"] = INOUT |
413 values["type"] = INOUT |
383 values["name"] = self.Name.GetStringSelection() |
414 expression = self.Expression.GetValue() |
|
415 if self.Expression.IsEnabled() and expression != "": |
|
416 values["name"] = expression |
|
417 else: |
|
418 values["name"] = self.Name.GetStringSelection() |
384 values["value_type"] = "" |
419 values["value_type"] = "" |
385 for var_name, var_type, value_type in self.VarList: |
420 for var_name, var_type, value_type in self.VarList: |
386 if var_name == values["name"]: |
421 if var_name == values["name"]: |
387 values["value_type"] = value_type |
422 values["value_type"] = value_type |
388 values["width"], values["height"] = self.Variable.GetSize() |
423 values["width"], values["height"] = self.Variable.GetSize() |
389 return values |
424 return values |
390 |
425 |
391 def OnClassChanged(self, event): |
426 def OnClassChanged(self, event): |
392 self.RefreshNameList() |
427 self.RefreshNameList() |
|
428 if self.Class.GetStringSelection() == "Input": |
|
429 self.Expression.Enable(True) |
|
430 else: |
|
431 self.Expression.Enable(False) |
393 self.RefreshPreview() |
432 self.RefreshPreview() |
394 event.Skip() |
433 event.Skip() |
395 |
434 |
396 def OnNameChanged(self, event): |
435 def OnNameChanged(self, event): |
397 self.RefreshPreview() |
436 if self.Name.GetStringSelection() != "": |
398 event.Skip() |
437 self.Expression.Enable(False) |
399 |
438 elif self.Class.GetStringSelection() == "Input": |
|
439 self.Expression.Enable(True) |
|
440 self.RefreshPreview() |
|
441 event.Skip() |
|
442 |
|
443 def OnExpressionChanged(self, event): |
|
444 if self.Expression.GetValue() != "": |
|
445 self.Name.Enable(False) |
|
446 else: |
|
447 self.Name.Enable(True) |
|
448 self.RefreshPreview() |
|
449 event.Skip() |
|
450 |
400 def RefreshPreview(self): |
451 def RefreshPreview(self): |
401 dc = wxClientDC(self.Preview) |
452 dc = wxClientDC(self.Preview) |
402 dc.Clear() |
453 dc.Clear() |
403 name = self.Name.GetStringSelection() |
454 expression = self.Expression.GetValue() |
|
455 if self.Expression.IsEnabled() and expression != "": |
|
456 name = expression |
|
457 else: |
|
458 name = self.Name.GetStringSelection() |
404 type = "" |
459 type = "" |
405 for var_name, var_type, value_type in self.VarList: |
460 for var_name, var_type, value_type in self.VarList: |
406 if var_name == name: |
461 if var_name == name: |
407 type = value_type |
462 type = value_type |
408 classtype = self.Class.GetStringSelection() |
463 classtype = self.Class.GetStringSelection() |
648 self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE) |
714 self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE) |
649 self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT) |
715 self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT) |
650 |
716 |
651 EVT_PAINT(self, self.OnPaint) |
717 EVT_PAINT(self, self.OnPaint) |
652 |
718 |
653 def SetElementSize(self, width, height): |
719 def SetElementSize(self, size): |
654 min_width, min_height = self.Element.GetMinSize() |
720 min_width, min_height = self.Element.GetMinSize() |
655 width, height = max(min_width, width), max(min_height, height) |
721 width, height = max(min_width, size[0]), max(min_height, size[1]) |
656 self.Element.SetSize(width, height) |
722 self.Element.SetSize(width, height) |
657 self.Element.SetPosition((150 - width) / 2, (150 - height) / 2) |
723 self.Element.SetPosition((150 - width) / 2, (150 - height) / 2) |
658 |
724 |
659 def SetVariables(self, vars): |
725 def SetVariables(self, vars): |
660 self.Name.Clear() |
726 self.Name.Clear() |