IDEFrame.py
changeset 1158 193e6cd9010f
parent 1129 189b49723f9f
child 1159 950787298c96
equal deleted inserted replaced
1157:72d14a74c643 1158:193e6cd9010f
  1353         selected = self.TabsOpened.GetSelection()
  1353         selected = self.TabsOpened.GetSelection()
  1354         if selected >= 0:
  1354         if selected >= 0:
  1355             window = self.TabsOpened.GetPage(selected)
  1355             window = self.TabsOpened.GetPage(selected)
  1356             tagname = window.GetTagName()
  1356             tagname = window.GetTagName()
  1357             if not window.IsDebugging():
  1357             if not window.IsDebugging():
  1358                 wx.CallAfter(self.SelectProjectTreeItem, tagname)
  1358                 self.SelectProjectTreeItem(tagname)
  1359                 wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname)
  1359                 self.PouInstanceVariablesPanel.SetPouType(tagname)
  1360                 window.RefreshView()
  1360                 window.RefreshView()
  1361                 self.EnsureTabVisible(self.LibraryPanel)
  1361                 self.EnsureTabVisible(self.LibraryPanel)
  1362             else:
  1362             else:
  1363                 instance_path = window.GetInstancePath()
  1363                 instance_path = window.GetInstancePath()
  1364                 if tagname == "":
  1364                 if tagname == "":
  1427 #-------------------------------------------------------------------------------
  1427 #-------------------------------------------------------------------------------
  1428 #                         Types Tree Management Functions
  1428 #                         Types Tree Management Functions
  1429 #-------------------------------------------------------------------------------
  1429 #-------------------------------------------------------------------------------
  1430 
  1430 
  1431     def RefreshProjectTree(self):
  1431     def RefreshProjectTree(self):
  1432         if wx.Platform == '__WXMSW__':
  1432         self.ProjectTree.SetEvtHandlerEnabled(False)
  1433             # Disconnect event when selection in treectrl changed
       
  1434             self.Unbind(wx.EVT_TREE_SEL_CHANGED, 
       
  1435                         id=ID_PLCOPENEDITORPROJECTTREE)
       
  1436         
  1433         
  1437         # Extract current selected item tagname
  1434         # Extract current selected item tagname
  1438         selected = self.ProjectTree.GetSelection()
  1435         selected = self.ProjectTree.GetSelection()
  1439         if selected is not None and selected.IsOk():
  1436         if selected is not None and selected.IsOk():
  1440             item_infos = self.ProjectTree.GetPyData(selected)
  1437             item_infos = self.ProjectTree.GetPyData(selected)
  1450         self.GenerateProjectTreeBranch(root, infos)
  1447         self.GenerateProjectTreeBranch(root, infos)
  1451         self.ProjectTree.Expand(root)
  1448         self.ProjectTree.Expand(root)
  1452         
  1449         
  1453         # Select new item corresponding to previous selected item
  1450         # Select new item corresponding to previous selected item
  1454         if tagname is not None:
  1451         if tagname is not None:
  1455             wx.CallAfter(self.SelectProjectTreeItem, tagname)
  1452             self.SelectProjectTreeItem(tagname)
  1456         
  1453         else:
  1457         if wx.Platform == '__WXMSW__':
  1454             self.ProjectTree.SetEvtHandlerEnabled(True)
  1458             # Reconnect event when selection in treectrl changed
       
  1459             wx.CallAfter(self.Bind, 
       
  1460                 wx.EVT_TREE_SEL_CHANGED, 
       
  1461                 self.OnProjectTreeItemSelected,
       
  1462                 id=ID_PLCOPENEDITORPROJECTTREE)
       
  1463 
  1455 
  1464     def ResetSelectedItem(self):
  1456     def ResetSelectedItem(self):
  1465         self.SelectedItem = None
  1457         self.SelectedItem = None
  1466 
  1458 
  1467     def GenerateProjectTreeBranch(self, root, infos):
  1459     def GenerateProjectTreeBranch(self, root, infos):
  1503             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
  1495             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
  1504         for item in to_delete:
  1496         for item in to_delete:
  1505             self.ProjectTree.Delete(item)
  1497             self.ProjectTree.Delete(item)
  1506 
  1498 
  1507     def SelectProjectTreeItem(self, tagname):
  1499     def SelectProjectTreeItem(self, tagname):
       
  1500         self.ProjectTree.SetEvtHandlerEnabled(False)
       
  1501         result = False
  1508         if self.ProjectTree is not None:
  1502         if self.ProjectTree is not None:
  1509             root = self.ProjectTree.GetRootItem()
  1503             root = self.ProjectTree.GetRootItem()
  1510             if root.IsOk():
  1504             if root.IsOk():
  1511                 words = tagname.split("::")
  1505                 words = tagname.split("::")
  1512                 if words[0] == "D":
  1506                 if words[0] == "D":
  1513                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_DATATYPE)])
  1507                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_DATATYPE)])
  1514                 elif words[0] == "P":
  1508                 elif words[0] == "P":
  1515                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU)])
  1509                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU)])
  1516                 elif words[0] == "T":
  1510                 elif words[0] == "T":
  1517                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_TRANSITION)])
  1511                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_TRANSITION)])
  1518                 elif words[0] == "A":
  1512                 elif words[0] == "A":
  1519                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_ACTION)])
  1513                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_ACTION)])
  1520                 elif words[0] == "C":
  1514                 elif words[0] == "C":
  1521                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION)])
  1515                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION)])
  1522                 elif words[0] == "R":
  1516                 elif words[0] == "R":
  1523                     return self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)])
  1517                     result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)])
  1524         return False
  1518         self.ProjectTree.SetEvtHandlerEnabled(True)
       
  1519         return result
  1525 
  1520 
  1526     def RecursiveProjectTreeItemSelection(self, root, items):
  1521     def RecursiveProjectTreeItemSelection(self, root, items):
  1527         found = False
  1522         found = False
  1528         if wx.VERSION >= (2, 6, 0):
  1523         if wx.VERSION >= (2, 6, 0):
  1529             item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1524             item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1532         while item.IsOk() and not found:
  1527         while item.IsOk() and not found:
  1533             item_infos = self.ProjectTree.GetPyData(item)
  1528             item_infos = self.ProjectTree.GetPyData(item)
  1534             if (item_infos["name"].split(":")[-1].strip(), item_infos["type"]) == items[0]:
  1529             if (item_infos["name"].split(":")[-1].strip(), item_infos["type"]) == items[0]:
  1535                 if len(items) == 1:
  1530                 if len(items) == 1:
  1536                     self.SelectedItem = item
  1531                     self.SelectedItem = item
  1537                     wx.CallAfter(self.ProjectTree.SelectItem, item)
  1532                     self.ProjectTree.SelectItem(item)
  1538                     wx.CallAfter(self.ResetSelectedItem)
  1533                     self.ResetSelectedItem()
  1539                     return True
  1534                     return True
  1540                 else:
  1535                 else:
  1541                     found = self.RecursiveProjectTreeItemSelection(item, items[1:])
  1536                     found = self.RecursiveProjectTreeItemSelection(item, items[1:])
  1542             else:
  1537             else:
  1543                 found = self.RecursiveProjectTreeItemSelection(item, items)
  1538                 found = self.RecursiveProjectTreeItemSelection(item, items)