--- a/Dialogs.py Mon Jul 09 11:10:14 2007 +0200
+++ b/Dialogs.py Tue Jul 10 09:52:53 2007 +0200
@@ -126,14 +126,20 @@
EVT_PAINT(self, self.OnPaint)
EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
- def FindTreeItem(self, root, name):
+ def FindTreeItem(self, root, name, inputs = None):
if root.IsOk():
- if self.TypeTree.GetItemText(root) == name:
+ pydata = self.TypeTree.GetPyData(root)
+ if inputs and "inputs" in pydata:
+ print inputs, pydata["inputs"]
+ same_inputs = pydata["inputs"] == inputs
+ else:
+ same_inputs = True
+ if self.TypeTree.GetItemText(root) == name and same_inputs:
return root
else:
item, root_cookie = self.TypeTree.GetFirstChild(root)
while item.IsOk():
- result = self.FindTreeItem(item, name)
+ result = self.FindTreeItem(item, name, inputs)
if result:
return result
item, root_cookie = self.TypeTree.GetNextChild(root, root_cookie)
@@ -155,13 +161,13 @@
def SetBlockList(self, blocktypes):
root = self.TypeTree.AddRoot("")
- self.TypeTree.SetPyData(root, CATEGORY)
+ self.TypeTree.SetPyData(root, {"type" : CATEGORY})
for category in blocktypes:
category_item = self.TypeTree.AppendItem(root, category["name"])
- self.TypeTree.SetPyData(category_item, CATEGORY)
+ self.TypeTree.SetPyData(category_item, {"type" : CATEGORY})
for blocktype in category["list"]:
blocktype_item = self.TypeTree.AppendItem(category_item, blocktype["name"])
- self.TypeTree.SetPyData(blocktype_item, BLOCK)
+ self.TypeTree.SetPyData(blocktype_item, {"type" : BLOCK, "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])})
def SetMinBlockSize(self, size):
self.MinBlockSize = size
@@ -169,7 +175,10 @@
def SetValues(self, values):
for name, value in values.items():
if name == "type":
- item = self.FindTreeItem(self.TypeTree.GetRootItem(), value)
+ inputs = None
+ if "inputs" in values:
+ inputs = values["inputs"]
+ item = self.FindTreeItem(self.TypeTree.GetRootItem(), value, inputs)
if item:
self.TypeTree.SelectItem(item)
elif name == "name":
@@ -180,7 +189,9 @@
def GetValues(self):
values = {}
- values["type"] = self.TypeTree.GetItemText(self.TypeTree.GetSelection())
+ item = self.TypeTree.GetSelection()
+ values["type"] = self.TypeTree.GetItemText(item)
+ values["inputs"] = self.TypeTree.GetPyData(item)["inputs"]
if self.Name.GetValue() != "":
values["name"] = self.Name.GetValue()
values["width"], values["height"] = self.Block.GetSize()
@@ -190,8 +201,9 @@
def OnTypeTreeItemSelected(self, event):
self.Name.SetValue("")
selected = event.GetItem()
- if self.TypeTree.GetPyData(selected) != CATEGORY:
- blocktype = GetBlockType(self.TypeTree.GetItemText(selected))
+ pydata = self.TypeTree.GetPyData(selected)
+ if pydata["type"] != CATEGORY:
+ blocktype = GetBlockType(self.TypeTree.GetItemText(selected), pydata["inputs"])
if blocktype:
self.Inputs.SetValue(len(blocktype["inputs"]))
self.Inputs.Enable(blocktype["extensible"])
@@ -231,12 +243,13 @@
dc = wxClientDC(self.Preview)
dc.Clear()
item = self.TypeTree.GetSelection()
- if self.TypeTree.GetPyData(item) == CATEGORY:
+ pydata = self.TypeTree.GetPyData(item)
+ if pydata["type"] == CATEGORY:
self.Block = None
else:
blocktype = self.TypeTree.GetItemText(item)
if blocktype:
- self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue())
+ self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue(), inputs = pydata["inputs"])
width, height = self.MinBlockSize
min_width, min_height = self.Block.GetMinSize()
width, height = max(min_width, width), max(min_height, height)
@@ -260,9 +273,10 @@
[wxID_VARIABLEPROPERTIESDIALOG, wxID_VARIABLEPROPERTIESDIALOGMAINPANEL,
wxID_VARIABLEPROPERTIESDIALOGNAME, wxID_VARIABLEPROPERTIESDIALOGCLASS,
- wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1,
- wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
-] = [wx.NewId() for _init_ctrls in range(8)]
+ wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION,
+ wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
+ wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
+] = [wx.NewId() for _init_ctrls in range(10)]
class VariablePropertiesDialog(wx.Dialog):
def _init_coll_flexGridSizer1_Items(self, parent):
@@ -282,9 +296,9 @@
# generated method, don't edit
wx.Dialog.__init__(self, id=wxID_VARIABLEPROPERTIESDIALOG,
name='VariablePropertiesDialog', parent=prnt, pos=wx.Point(376, 223),
- size=wx.Size(400, 320), style=wx.DEFAULT_DIALOG_STYLE,
+ size=wx.Size(400, 380), style=wx.DEFAULT_DIALOG_STYLE,
title='Variable Properties')
- self.SetClientSize(wx.Size(400, 320))
+ self.SetClientSize(wx.Size(400, 380))
self.MainPanel = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGMAINPANEL,
name='MainPanel', parent=self, pos=wx.Point(0, 0),
@@ -296,25 +310,34 @@
pos=wx.Point(24, 24), size=wx.Size(70, 17), style=0)
self.staticText2 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
- label='Name:', name='staticText2', parent=self.MainPanel,
+ label='Expression:', name='staticText2', parent=self.MainPanel,
+ pos=wx.Point(24, 90), size=wx.Size(100, 17), style=0)
+
+ self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
+ label='Name:', name='staticText3', parent=self.MainPanel,
pos=wx.Point(204, 24), size=wx.Size(70, 17), style=0)
- self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
- label='Preview:', name='staticText3', parent=self.MainPanel,
- pos=wx.Point(24, 78), size=wx.Size(100, 17), style=0)
+ self.staticText4 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
+ label='Preview:', name='staticText4', parent=self.MainPanel,
+ pos=wx.Point(24, 144), size=wx.Size(100, 17), style=0)
self.Class = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGCLASS,
name='Class', parent=self.MainPanel, pos=wx.Point(24, 48),
size=wx.Size(145, 24), style=0)
EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGCLASS, self.OnClassChanged)
- self.Name = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGNAME,
+ self.Name = wx.ListBox(id=wxID_VARIABLEPROPERTIESDIALOGNAME,
name='Name', parent=self.MainPanel, pos=wx.Point(204, 48),
+ size=wx.Size(145, 90), style=wx.LB_SINGLE)
+ EVT_LISTBOX(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged)
+
+ self.Expression = wx.TextCtrl(id=wxID_VARIABLEPROPERTIESDIALOGEXPRESSION,
+ name='Expression', parent=self.MainPanel, pos=wx.Point(24, 114),
size=wx.Size(145, 24), style=0)
- EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged)
+ EVT_TEXT(self, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION, self.OnExpressionChanged)
self.Preview = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGPREVIEW,
- name='Preview', parent=self.MainPanel, pos=wx.Point(24, 104),
+ name='Preview', parent=self.MainPanel, pos=wx.Point(24, 170),
size=wx.Size(350, 150), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
self.Preview.SetBackgroundColour(wxColour(255,255,255))
@@ -338,8 +361,9 @@
def RefreshNameList(self):
selected = self.Name.GetStringSelection()
self.Name.Clear()
+ self.Name.Append("")
for name, var_type, value_type in self.VarList:
- if var_type in ["Local","Temp"]:
+ if var_type in ["Local","Temp","Global","External"]:
self.Name.Append(name)
elif var_type == "Input" and self.Class.GetStringSelection() == "Input":
self.Name.Append(name)
@@ -349,6 +373,8 @@
self.Name.Append(name)
if self.Name.FindString(selected) != wxNOT_FOUND:
self.Name.SetStringSelection(selected)
+ else:
+ self.Name.SetStringSelection("")
self.Name.Enable(self.Name.GetCount() > 0)
def SetMinVariableSize(self, size):
@@ -367,8 +393,13 @@
self.Class.SetStringSelection("Output")
if value == INOUT:
self.Class.SetStringSelection("InOut")
- elif name == "name":
- self.Name.SetStringSelection(value)
+ elif name == "name" and value != "":
+ if self.Name.FindString(value) != wxNOT_FOUND:
+ self.Name.SetStringSelection(value)
+ self.Expression.Enable(False)
+ else:
+ self.Expression.SetValue(value)
+ self.Name.Enable(False)
self.RefreshPreview()
def GetValues(self):
@@ -380,7 +411,11 @@
values["type"] = OUTPUT
elif classtype == "InOut":
values["type"] = INOUT
- values["name"] = self.Name.GetStringSelection()
+ expression = self.Expression.GetValue()
+ if self.Expression.IsEnabled() and expression != "":
+ values["name"] = expression
+ else:
+ values["name"] = self.Name.GetStringSelection()
values["value_type"] = ""
for var_name, var_type, value_type in self.VarList:
if var_name == values["name"]:
@@ -390,17 +425,37 @@
def OnClassChanged(self, event):
self.RefreshNameList()
+ if self.Class.GetStringSelection() == "Input":
+ self.Expression.Enable(True)
+ else:
+ self.Expression.Enable(False)
self.RefreshPreview()
event.Skip()
def OnNameChanged(self, event):
- self.RefreshPreview()
- event.Skip()
-
+ if self.Name.GetStringSelection() != "":
+ self.Expression.Enable(False)
+ elif self.Class.GetStringSelection() == "Input":
+ self.Expression.Enable(True)
+ self.RefreshPreview()
+ event.Skip()
+
+ def OnExpressionChanged(self, event):
+ if self.Expression.GetValue() != "":
+ self.Name.Enable(False)
+ else:
+ self.Name.Enable(True)
+ self.RefreshPreview()
+ event.Skip()
+
def RefreshPreview(self):
dc = wxClientDC(self.Preview)
dc.Clear()
- name = self.Name.GetStringSelection()
+ expression = self.Expression.GetValue()
+ if self.Expression.IsEnabled() and expression != "":
+ name = expression
+ else:
+ name = self.Name.GetStringSelection()
type = ""
for var_name, var_type, value_type in self.VarList:
if var_name == name:
@@ -510,7 +565,18 @@
def SetMinConnectionSize(self, size):
self.MinConnectionSize = size
-
+
+ def SetValues(self, values):
+ for name, value in values.items():
+ if name == "type":
+ if value == CONNECTOR:
+ self.radioButton1.SetValue(True)
+ elif value == CONTINUATION:
+ self.radioButton2.SetValue(True)
+ elif name == "name":
+ self.Name.SetValue(value)
+ self.RefreshPreview()
+
def GetValues(self):
values = {}
if self.radioButton1.GetValue():
@@ -650,9 +716,9 @@
EVT_PAINT(self, self.OnPaint)
- def SetElementSize(self, width, height):
+ def SetElementSize(self, size):
min_width, min_height = self.Element.GetMinSize()
- width, height = max(min_width, width), max(min_height, height)
+ width, height = max(min_width, size[0]), max(min_height, size[1])
self.Element.SetSize(width, height)
self.Element.SetPosition((150 - width) / 2, (150 - height) / 2)
@@ -825,7 +891,7 @@
def SetMinSize(self, size):
self.PowerRailMinSize = size
- self.RefreshPreview()
+ self.RefreshPreview()
def GetValues(self):
values = {}