--- a/PLCOpenEditor.py Sat May 19 12:40:53 2012 +0200
+++ b/PLCOpenEditor.py Mon May 21 09:59:44 2012 +0200
@@ -279,20 +279,13 @@
control.ProcessEvent(event)
return ShortcutKeyFunction
-def GetParentName(tree, item, parent_type):
- parent_item = tree.GetItemParent(item)
- parent_item_type = tree.GetPyData(parent_item)
- while parent_item_type != parent_type:
- parent_item = tree.GetItemParent(parent_item)
- parent_item_type = tree.GetPyData(parent_item)
- return tree.GetItemText(parent_item)
-
def GetDeleteElementFunction(remove_function, parent_type=None, check_function=None):
def DeleteElementFunction(self, selected):
name = self.ProjectTree.GetItemText(selected)
if check_function is None or not check_function(self.Controler, name):
if parent_type is not None:
- parent_name = GetParentName(self.ProjectTree, selected, parent_type)
+ item_infos = self.ProjectTree.GetPyData(selected)
+ parent_name = item_infos["tagname"].split("::")[1]
remove_function(self.Controler, parent_name, name)
else:
remove_function(self.Controler, name)
@@ -406,7 +399,7 @@
def _init_coll_FileMenu_Items(self, parent):
pass
- def _init_coll_AddMenu_Items(self, parent):
+ def _init_coll_AddMenu_Items(self, parent, add_config=True):
AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
kind=wx.ITEM_NORMAL, text=_(u'&Data Type'))
AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
@@ -415,8 +408,9 @@
kind=wx.ITEM_NORMAL, text=_(u'Function &Block'))
AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
kind=wx.ITEM_NORMAL, text=_(u'&Program'))
- AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
- kind=wx.ITEM_NORMAL, text=_(u'&Configuration'))
+ if add_config:
+ AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
+ kind=wx.ITEM_NORMAL, text=_(u'&Configuration'))
def _init_coll_EditMenu_Items(self, parent):
AppendMenu(parent, help='', id=wx.ID_UNDO,
@@ -854,11 +848,12 @@
elif page_infos[0] == "editor":
tagname = page_infos[1]
page_ref = self.EditProjectElement(self.Controler.GetElementType(tagname), tagname)
- page_ref.RefreshView()
- return notebook.GetPageIndex(page_ref)
+ if page_ref is not None:
+ page_ref.RefreshView()
+ return notebook.GetPageIndex(page_ref)
elif page_infos[0] == "debug":
instance_path = page_infos[1]
- instance_infos = self.Controler.GetInstanceInfos(instance_path)
+ instance_infos = self.Controler.GetInstanceInfos(instance_path, self.EnableDebug)
if instance_infos is not None:
return notebook.GetPageIndex(self.OpenDebugViewer(instance_infos["class"], instance_path, instance_infos["type"]))
return None
@@ -1194,6 +1189,7 @@
def ResetView(self):
self.DeleteAllPages()
self.ProjectTree.DeleteAllItems()
+ self.ProjectTree.Enable(False)
self.PouInstanceVariablesPanel.ResetView()
self.LibraryPanel.ResetTree()
self.LibraryPanel.SetControler(None)
@@ -1387,8 +1383,7 @@
if window == self.ProjectTree or window is None:
selected = self.ProjectTree.GetSelection()
if selected.IsOk():
- type = self.ProjectTree.GetPyData(selected)
- function = self.DeleteFunctions.get(type, None)
+ function = self.DeleteFunctions.get(self.ProjectTree.GetPyData(selected)["type"], None)
if function is not None:
function(self, selected)
self.CloseTabsWithoutModel()
@@ -1484,6 +1479,10 @@
self.AUIManager.RestorePane(pane)
self.AUIManager.Update()
+ def EnsureTabVisible(self, tab):
+ notebook = tab.GetParent()
+ notebook.SetSelection(notebook.GetPageIndex(tab))
+
def OnPouSelectedChanging(self, event):
if not self.Starting:
selected = self.TabsOpened.GetSelection()
@@ -1503,8 +1502,13 @@
wx.CallAfter(self.SelectProjectTreeItem, tagname)
wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname)
window.RefreshView()
+ self.EnsureTabVisible(self.LibraryPanel)
else:
instance_path = window.GetInstancePath()
+ if tagname == "":
+ instance_path = instance_path.rsplit(".", 1)[0]
+ tagname = self.Controler.GetPouInstanceTagName(instance_path, self.EnableDebug)
+ self.EnsureTabVisible(self.DebugVariablePanel)
wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname, instance_path)
wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, EDITORTOOLBAR)
event.Skip()
@@ -1581,15 +1585,20 @@
return self.GenerateProjectTreeBranch(root, infos["values"][0])
item_name = _(item_name)
self.ProjectTree.SetItemText(root, item_name)
- self.ProjectTree.SetPyData(root, infos["type"])
+ self.ProjectTree.SetPyData(root, infos)
highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK))
self.ProjectTree.SetItemBackgroundColour(root, highlight_colours[0])
self.ProjectTree.SetItemTextColour(root, highlight_colours[1])
if infos["type"] == ITEM_POU:
self.ProjectTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])])
- else:
+ elif infos.has_key("icon") and infos["icon"] is not None:
+ icon_path = infos["icon"]
+ if not self.TreeImageDict.has_key(icon_path):
+ self.TreeImageDict[icon_path] = self.TreeImageList.Add(wx.Bitmap(icon_path))
+ self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_path])
+ elif self.TreeImageDict.has_key(infos["type"]):
self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]])
-
+
if wx.VERSION >= (2, 6, 0):
item, root_cookie = self.ProjectTree.GetFirstChild(root)
else:
@@ -1634,7 +1643,8 @@
else:
item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
while item.IsOk() and not found:
- if (self.ProjectTree.GetItemText(item), self.ProjectTree.GetPyData(item)) == items[0]:
+ item_infos = self.ProjectTree.GetPyData(item)
+ if (item_infos["name"].split(":")[-1].strip(), item_infos["type"]) == items[0]:
if len(items) == 1:
self.SelectedItem = item
self.ProjectTree.SelectItem(item)
@@ -1650,7 +1660,7 @@
def OnProjectTreeBeginDrag(self, event):
if wx.Platform == '__WXMSW__':
self.SelectedItem = event.GetItem()
- if self.SelectedItem is not None and self.ProjectTree.GetPyData(self.SelectedItem) == ITEM_POU:
+ if self.SelectedItem is not None and self.ProjectTree.GetPyData(self.SelectedItem)["type"] == ITEM_POU:
block_name = self.ProjectTree.GetItemText(self.SelectedItem)
block_type = self.Controler.GetPouType(block_name)
if block_type != "program":
@@ -1662,7 +1672,7 @@
def OnProjectTreeItemBeginEdit(self, event):
selected = event.GetItem()
- if self.ProjectTree.GetPyData(selected) in ITEMS_UNEDITABLE:
+ if self.ProjectTree.GetPyData(selected)["type"] in ITEMS_UNEDITABLE:
event.Veto()
else:
event.Skip()
@@ -1679,10 +1689,10 @@
else:
item = event.GetItem()
old_name = self.ProjectTree.GetItemText(item)
- itemtype = self.ProjectTree.GetPyData(item)
- if itemtype == ITEM_PROJECT:
+ item_infos = self.ProjectTree.GetPyData(item)
+ if item_infos["type"] == ITEM_PROJECT:
self.Controler.SetProjectProperties(name = new_name)
- elif itemtype == ITEM_DATATYPE:
+ elif item_infos["type"] == ITEM_DATATYPE:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]:
message = _("\"%s\" data type already exists!")%new_name
abort = True
@@ -1691,7 +1701,7 @@
self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name),
self.Controler.ComputeDataTypeName(new_name))
self.RefreshPageTitles()
- elif itemtype == ITEM_POU:
+ elif item_infos["type"] == ITEM_POU:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]:
message = _("\"%s\" pou already exists!")%new_name
abort = True
@@ -1706,29 +1716,29 @@
self.Controler.ComputePouName(new_name))
self.RefreshLibraryPanel()
self.RefreshPageTitles()
- elif itemtype == ITEM_TRANSITION:
- pou_name = GetParentName(self.ProjectTree, item, ITEM_POU)
+ elif item_infos["type"] == ITEM_TRANSITION:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
message = _("A POU named \"%s\" already exists!")%new_name
elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
message = _("A variable with \"%s\" as name already exists in this pou!")%new_name
else:
- self.Controler.ChangePouTransitionName(pou_name, old_name, new_name)
- self.RefreshEditorNames(self.Controler.ComputePouTransitionName(pou_name, old_name),
- self.Controler.ComputePouTransitionName(pou_name, new_name))
+ words = item_infos["tagname"].split("::")
+ self.Controler.ChangePouTransitionName(words[1], old_name, new_name)
+ self.RefreshEditorNames(self.Controler.ComputePouTransitionName(words[1], old_name),
+ self.Controler.ComputePouTransitionName(words[1], new_name))
self.RefreshPageTitles()
- elif itemtype == ITEM_ACTION:
- pou_name = GetParentName(self.ProjectTree, item, ITEM_POU)
+ elif item_infos["type"] == ITEM_ACTION:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
message = _("A POU named \"%s\" already exists!")%new_name
elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
message = _("A variable with \"%s\" as name already exists in this pou!")%new_name
else:
- self.Controler.ChangePouActionName(pou_name, old_name, new_name)
- self.RefreshEditorNames(self.Controler.ComputePouActionName(pou_name, old_name),
- self.Controler.ComputePouActionName(pou_name, new_name))
+ words = item_infos["tagname"].split("::")
+ self.Controler.ChangePouActionName(words[1], old_name, new_name)
+ self.RefreshEditorNames(self.Controler.ComputePouActionName(words[1], old_name),
+ self.Controler.ComputePouActionName(words[1], new_name))
self.RefreshPageTitles()
- elif itemtype == ITEM_CONFIGURATION:
+ elif item_infos["type"] == ITEM_CONFIGURATION:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
message = _("\"%s\" config already exists!")%new_name
abort = True
@@ -1747,8 +1757,7 @@
self.RefreshEditorNames(self.Controler.ComputeConfigurationName(old_name),
self.Controler.ComputeConfigurationName(new_name))
self.RefreshPageTitles()
- elif itemtype == ITEM_RESOURCE:
- config_name = GetParentName(self.ProjectTree, item, ITEM_CONFIGURATION)
+ elif item_infos["type"] == ITEM_RESOURCE:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]:
message = _("\"%s\" config already exists!")%new_name
abort = True
@@ -1763,9 +1772,10 @@
abort = True
messageDialog.Destroy()
if not abort:
- self.Controler.ChangeConfigurationResourceName(config_name, old_name, new_name)
- self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(config_name, old_name),
- self.Controler.ComputeConfigurationResourceName(config_name, new_name))
+ words = item_infos["tagname"].split("::")
+ self.Controler.ChangeConfigurationResourceName(words[1], old_name, new_name)
+ self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(words[1], old_name),
+ self.Controler.ComputeConfigurationResourceName(words[1], new_name))
self.RefreshPageTitles()
if message or abort:
if message:
@@ -1782,49 +1792,23 @@
def OnProjectTreeItemActivated(self, event):
selected = event.GetItem()
name = self.ProjectTree.GetItemText(selected)
- data = self.ProjectTree.GetPyData(selected)
- if data == ITEM_PROJECT:
+ item_infos = self.ProjectTree.GetPyData(selected)
+ if item_infos["type"] == ITEM_PROJECT:
self.EditProjectSettings()
- elif data == ITEM_DATATYPE:
- self.EditProjectElement(data, self.Controler.ComputeDataTypeName(name))
- elif data == ITEM_POU:
- self.EditProjectElement(data, self.Controler.ComputePouName(name))
- elif data == ITEM_CONFIGURATION:
- self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name))
- elif data == ITEM_RESOURCE:
- config_name = GetParentName(self.ProjectTree, selected, ITEM_CONFIGURATION)
- self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name))
- elif data in [ITEM_TRANSITION, ITEM_ACTION]:
- pou_name = GetParentName(self.ProjectTree, selected, ITEM_POU)
- if data == ITEM_TRANSITION:
- tagname = self.Controler.ComputePouTransitionName(pou_name, name)
- elif data == ITEM_ACTION:
- tagname = self.Controler.ComputePouActionName(pou_name, name)
- self.EditProjectElement(data, tagname)
+ elif item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
+ ITEM_CONFIGURATION, ITEM_RESOURCE,
+ ITEM_TRANSITION, ITEM_ACTION]:
+ self.EditProjectElement(item_infos["type"], item_infos["tagname"])
event.Skip()
def ProjectTreeItemSelect(self, select_item):
name = self.ProjectTree.GetItemText(select_item)
- data = self.ProjectTree.GetPyData(select_item)
- tagname = None
- if data == ITEM_DATATYPE:
- tagname = self.Controler.ComputeDataTypeName(name)
- elif data == ITEM_POU:
- tagname = self.Controler.ComputePouName(name)
- elif data == ITEM_CONFIGURATION:
- tagname = self.Controler.ComputeConfigurationName(name)
- elif data == ITEM_RESOURCE:
- config_name = GetParentName(self.ProjectTree, select_item, ITEM_CONFIGURATION)
- tagname = self.Controler.ComputeConfigurationResourceName(config_name, name)
- elif data in [ITEM_TRANSITION, ITEM_ACTION]:
- pou_name = GetParentName(self.ProjectTree, select_item, ITEM_POU)
- if data == ITEM_TRANSITION:
- tagname = self.Controler.ComputePouTransitionName(pou_name, name)
- elif data == ITEM_ACTION:
- tagname = self.Controler.ComputePouActionName(pou_name, name)
- if tagname is not None:
- self.EditProjectElement(data, tagname, True)
- self.PouInstanceVariablesPanel.SetPouType(tagname)
+ item_infos = self.ProjectTree.GetPyData(select_item)
+ if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
+ ITEM_CONFIGURATION, ITEM_RESOURCE,
+ ITEM_TRANSITION, ITEM_ACTION]:
+ self.EditProjectElement(item_infos["type"], item_infos["tagname"], True)
+ self.PouInstanceVariablesPanel.SetPouType(item_infos["tagname"])
def OnProjectTreeLeftUp(self, event):
if self.SelectedItem is not None:
@@ -1838,7 +1822,7 @@
event.Skip()
def OnProjectTreeItemChanging(self, event):
- if self.ProjectTree.GetPyData(event.GetItem()) not in ITEMS_UNEDITABLE and self.SelectedItem is None:
+ if self.ProjectTree.GetPyData(event.GetItem())["type"] not in ITEMS_UNEDITABLE and self.SelectedItem is None:
self.SelectedItem = event.GetItem()
event.Veto()
else:
@@ -1925,10 +1909,10 @@
self.ProjectTree.SelectItem(item)
self.ProjectTreeItemSelect(item)
name = self.ProjectTree.GetItemText(item)
- type = self.ProjectTree.GetPyData(item)
+ item_infos = self.ProjectTree.GetPyData(item)
menu = None
- if type in ITEMS_UNEDITABLE:
+ if item_infos["type"] in ITEMS_UNEDITABLE:
name = UNEDITABLE_NAMES_DICT[name]
if name == "Data Types":
@@ -1960,11 +1944,11 @@
menu = wx.Menu(title='')
new_id = wx.NewId()
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition"))
- parent = self.ProjectTree.GetItemParent(item)
+ parent = self.ProjectTree.GetItemParent(item)["type"]
parent_type = self.ProjectTree.GetPyData(parent)
while parent_type != ITEM_POU:
parent = self.ProjectTree.GetItemParent(parent)
- parent_type = self.ProjectTree.GetPyData(parent)
+ parent_type = self.ProjectTree.GetPyData(parent)["type"]
self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
elif name == "Actions":
@@ -1972,10 +1956,10 @@
new_id = wx.NewId()
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Action"))
parent = self.ProjectTree.GetItemParent(item)
- parent_type = self.ProjectTree.GetPyData(parent)
+ parent_type = self.ProjectTree.GetPyData(parent)["type"]
while parent_type != ITEM_POU:
parent = self.ProjectTree.GetItemParent(parent)
- parent_type = self.ProjectTree.GetPyData(parent)
+ parent_type = self.ProjectTree.GetPyData(parent)["type"]
self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
elif name == "Resources":
@@ -1983,14 +1967,18 @@
new_id = wx.NewId()
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource"))
parent = self.ProjectTree.GetItemParent(item)
- parent_type = self.ProjectTree.GetPyData(parent)
- while parent_type != ITEM_CONFIGURATION:
+ parent_type = self.ProjectTree.GetPyData(parent)["type"]
+ while parent_type not in [ITEM_CONFIGURATION, ITEM_PROJECT]:
parent = self.ProjectTree.GetItemParent(parent)
- parent_type = self.ProjectTree.GetPyData(parent)
- self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
+ parent_type = self.ProjectTree.GetPyData(parent)["type"]
+ if parent_type == ITEM_PROJECT:
+ parent_name = None
+ else:
+ parent_name = self.ProjectTree.GetItemText(parent)
+ self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(parent_name), id=new_id)
else:
- if type == ITEM_POU:
+ if item_infos["type"] == ITEM_POU:
menu = wx.Menu(title='')
if self.Controler.GetPouBodyType(name) == "SFC":
new_id = wx.NewId()
@@ -2020,13 +2008,13 @@
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Rename"))
self.Bind(wx.EVT_MENU, self.OnRenamePouMenu, id=new_id)
- elif type == ITEM_CONFIGURATION:
+ elif item_infos["type"] == ITEM_CONFIGURATION:
menu = wx.Menu(title='')
new_id = wx.NewId()
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource"))
self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id)
- elif type in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]:
+ elif item_infos["type"] in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]:
menu = wx.Menu(title='')
if menu is not None:
@@ -2129,7 +2117,7 @@
for idx in idxs:
editor = self.TabsOpened.GetPage(idx)
if editor.IsDebugging():
- instance_infos = self.Controler.GetInstanceInfos(editor.GetInstancePath())
+ instance_infos = self.Controler.GetInstanceInfos(editor.GetInstancePath(), self.EnableDebug)
if instance_infos is None:
self.TabsOpened.DeletePage(idx)
elif isinstance(editor, GraphicViewer):
@@ -2141,6 +2129,7 @@
def AddDebugVariable(self, iec_path, force=False):
if self.EnableDebug:
self.DebugVariablePanel.InsertValue(iec_path, force=force)
+ self.EnsureTabVisible(self.DebugVariablePanel)
#-------------------------------------------------------------------------------
# Library Panel Management Function
@@ -2441,7 +2430,7 @@
def GenerateChangePouTypeFunction(self, name, new_type):
def OnChangePouTypeMenu(event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_POU:
+ if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU:
self.Controler.ProjectChangePouType(name, new_type)
self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE)
return OnChangePouTypeMenu
@@ -2479,7 +2468,7 @@
def OnRemoveDataTypeMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_DATATYPE:
+ if self.ProjectTree.GetPyData(selected)["type"] == ITEM_DATATYPE:
name = self.ProjectTree.GetItemText(selected)
if not self.Controler.DataTypeIsUsed(name):
self.Controler.ProjectRemoveDataType(name)
@@ -2493,12 +2482,12 @@
def OnRenamePouMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_POU:
+ if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU:
wx.CallAfter(self.ProjectTree.EditLabel, selected)
def OnRemovePouMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_POU:
+ if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU:
name = self.ProjectTree.GetItemText(selected)
if not self.Controler.PouIsUsed(name):
self.Controler.ProjectRemovePou(name)
@@ -2512,14 +2501,10 @@
def OnRemoveTransitionMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_TRANSITION:
+ item_infos = self.ProjectTree.GetPyData(selected)
+ if item_infos["type"] == ITEM_TRANSITION:
transition = self.ProjectTree.GetItemText(selected)
- item = self.ProjectTree.GetItemParent(selected)
- item_type = self.ProjectTree.GetPyData(item)
- while item_type != ITEM_POU:
- item = self.ProjectTree.GetItemParent(item)
- item_type = self.ProjectTree.GetPyData(item)
- pou_name = self.ProjectTree.GetItemText(item)
+ pou_name = item_infos["tagname"].split("::")[1]
self.Controler.ProjectRemovePouTransition(pou_name, transition)
tagname = self.Controler.ComputePouTransitionName(pou_name, transition)
idx = self.IsOpened(tagname)
@@ -2529,14 +2514,10 @@
def OnRemoveActionMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_ACTION:
+ item_infos = self.ProjectTree.GetPyData(selected)
+ if item_infos["type"] == ITEM_ACTION:
action = self.ProjectTree.GetItemText(selected)
- item = self.ProjectTree.GetItemParent(selected)
- item_type = self.ProjectTree.GetPyData(item)
- while item_type != ITEM_POU:
- item = self.ProjectTree.GetItemParent(item)
- item_type = self.ProjectTree.GetPyData(item)
- pou_name = self.ProjectTree.GetItemText(item)
+ pou_name = item_infos["tagname"].split("::")[1]
self.Controler.ProjectRemovePouAction(pou_name, action)
tagname = self.Controler.ComputePouActionName(pou_name, action)
idx = self.IsOpened(tagname)
@@ -2546,7 +2527,7 @@
def OnRemoveConfigurationMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
+ if self.ProjectTree.GetPyData(selected)["type"] == ITEM_CONFIGURATION:
name = self.ProjectTree.GetItemText(selected)
self.Controler.ProjectRemoveConfiguration(name)
tagname = self.Controler.ComputeConfigurationName(name)
@@ -2557,14 +2538,10 @@
def OnRemoveResourceMenu(self, event):
selected = self.ProjectTree.GetSelection()
- if self.ProjectTree.GetPyData(selected) == ITEM_RESOURCE:
+ item_infos = self.ProjectTree.GetPyData(selected)
+ if item_infos["type"] == ITEM_RESOURCE:
resource = self.ProjectTree.GetItemText(selected)
- item = self.ProjectTree.GetItemParent(selected)
- item_type = self.ProjectTree.GetPyData(item)
- while item_type != ITEM_CONFIGURATION:
- item = self.ProjectTree.GetItemParent(item)
- item_type = self.ProjectTree.GetPyData(item)
- config_name = self.ProjectTree.GetItemText(item)
+ config_name = item_infos["tagname"].split("::")[1]
self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected)
idx = self.IsOpened(tagname)
@@ -2711,11 +2688,13 @@
# Open the filepath if defined
if fileOpen is not None and os.path.isfile(fileOpen):
# Create a new controller
- self.Controler = PLCControler()
- result = self.Controler.OpenXMLFile(fileOpen)
+ controler = PLCControler()
+ result = controler.OpenXMLFile(fileOpen)
if result is None:
- self.LibraryPanel.SetControler(self.Controler)
- self.PouInstanceVariablesPanel.SetController(self.Controler)
+ self.Controler = controler
+ self.LibraryPanel.SetControler(controler)
+ self.ProjectTree.Enable(True)
+ self.PouInstanceVariablesPanel.SetController(controler)
self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
# Define PLCOpenEditor icon
@@ -2826,11 +2805,13 @@
filepath = dialog.GetPath()
if os.path.isfile(filepath):
self.ResetView()
- self.Controler = PLCControler()
- result = self.Controler.OpenXMLFile(filepath)
+ controler = PLCControler()
+ result = controler.OpenXMLFile(filepath)
if result is None:
- self.LibraryPanel.SetControler(self.Controler)
- self.PouInstanceVariablesPanel.SetController(self.Controler)
+ self.Controler = controler
+ self.LibraryPanel.SetControler(controler)
+ self.ProjectTree.Enable(True)
+ self.PouInstanceVariablesPanel.SetController(controler)
self.LoadProjectOrganization()
self._Refresh(PROJECTTREE, LIBRARYTREE)
self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
@@ -4254,11 +4235,12 @@
items = [(idx, item) for idx, item in enumerate(self.Table.GetData())]
items.reverse()
for idx, item in items:
- if self.GetDataType(item.GetVariable().upper()) is None:
+ iec_path = item.GetVariable().upper()
+ if self.GetDataType(iec_path) is None:
self.RemoveDataConsumer(item)
self.Table.RemoveItem(idx)
else:
- self.AddDataConsumer(iec_path.upper(), item)
+ self.AddDataConsumer(iec_path, item)
self.Freeze()
self.Table.ResetView(self.VariablesGrid)
self.VariablesGrid.RefreshButtons()