--- a/controls/VariablePanel.py Wed Jun 04 09:50:08 2014 +0200
+++ b/controls/VariablePanel.py Wed Jun 04 13:18:23 2014 +0200
@@ -43,12 +43,6 @@
#-------------------------------------------------------------------------------
-def AppendMenu(parent, help, id, kind, text):
- if wx.VERSION >= (2, 6, 0):
- parent.Append(help=help, id=id, kind=kind, text=text)
- parent.Append(helpString=help, id=id, kind=kind, item=text)
[TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE,
POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES
@@ -744,63 +738,76 @@
- def OnVariablesGridEditorShown(self, event):
- row, col = event.GetRow(), event.GetCol()
- label_value = self.Table.GetColLabelValue(col, False)
- if label_value == "Type":
- type_menu = wx.Menu(title='') # the root menu
+ def BuildStdIECTypesMenu(self,type_menu): # build a submenu containing standard IEC types
base_menu = wx.Menu(title='')
for base_type in self.Controler.GetBaseTypes():
- AppendMenu(base_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type)
+ base_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type) self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(base_type), id=new_id)
type_menu.AppendMenu(wx.NewId(), _("Base Types"), base_menu)
+ def BuildUserTypesMenu(self,type_menu): # build a submenu containing user-defined types
datatype_menu = wx.Menu(title='')
datatypes = self.Controler.GetDataTypes(basetypes = False, confnodetypes = False)
for datatype in datatypes:
- AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype)
+ datatype_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype) self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id)
type_menu.AppendMenu(wx.NewId(), _("User Data Types"), datatype_menu)
- for category in self.Controler.GetConfNodeDataTypes():
+ def BuildLibsTypesMenu(self, type_menu): + for category in self.Controler.GetConfNodeDataTypes(): + if len(category["list"]) > 0: + # build a submenu containing confnode types + confnode_datatype_menu = wx.Menu(title='') + for datatype in category["list"]: + confnode_datatype_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype) + self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id) + type_menu.AppendMenu(wx.NewId(), category["name"], confnode_datatype_menu) - if len(category["list"]) > 0:
- # build a submenu containing confnode types
- confnode_datatype_menu = wx.Menu(title='')
- for datatype in category["list"]:
- AppendMenu(confnode_datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype)
- self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id)
+ def BuildProjectTypesMenu(self, type_menu, classtype): + # build a submenu containing function block types + bodytype = self.Controler.GetEditedElementBodyType(self.TagName) + pouname, poutype = self.Controler.GetEditedElementType(self.TagName) + if classtype in ["Input", "Output", "InOut", "External", "Global"] or \ + poutype != "function" and bodytype in ["ST", "IL"]: + functionblock_menu = wx.Menu(title='') + fbtypes = self.Controler.GetFunctionBlockTypes(self.TagName) + for functionblock_type in fbtypes: + functionblock_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type) + self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id) - type_menu.AppendMenu(wx.NewId(), category["name"], confnode_datatype_menu)
+ type_menu.AppendMenu(wx.NewId(), _("Function Block Types"), functionblock_menu) - # build a submenu containing function block types
- bodytype = self.Controler.GetEditedElementBodyType(self.TagName)
- pouname, poutype = self.Controler.GetEditedElementType(self.TagName)
+ def BuildArrayTypesMenu(self, type_menu): + type_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Array")) + self.Bind(wx.EVT_MENU, self.VariableArrayTypeFunction, id=new_id) + def OnVariablesGridEditorShown(self, event): + row, col = event.GetRow(), event.GetCol() + label_value = self.Table.GetColLabelValue(col, False) + if label_value == "Type": classtype = self.Table.GetValueByName(row, "Class")
+ type_menu = wx.Menu(title='') # the root menu
- AppendMenu(type_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Array"))
- self.Bind(wx.EVT_MENU, self.VariableArrayTypeFunction, id=new_id)
+ self.BuildStdIECTypesMenu(type_menu) + self.BuildUserTypesMenu(type_menu) - if classtype in ["Input", "Output", "InOut", "External", "Global"] or \
- poutype != "function" and bodytype in ["ST", "IL"]:
- functionblock_menu = wx.Menu(title='')
- fbtypes = self.Controler.GetFunctionBlockTypes(self.TagName)
- for functionblock_type in fbtypes:
- AppendMenu(functionblock_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type)
- self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id)
+ self.BuildLibsTypesMenu(type_menu) - type_menu.AppendMenu(wx.NewId(), _("Function Block Types"), functionblock_menu)
+ self.BuildProjectTypesMenu(type_menu,classtype) + self.BuildArrayTypesMenu(type_menu) rect = self.VariablesGrid.BlockToDeviceRect((row, col), (row, col))
corner_x = rect.x + rect.width