1441 tagname = None |
1439 tagname = None |
1442 |
1440 |
1443 # Refresh treectrl items according to project infos |
1441 # Refresh treectrl items according to project infos |
1444 infos = self.Controler.GetProjectInfos() |
1442 infos = self.Controler.GetProjectInfos() |
1445 root = self.ProjectTree.GetRootItem() |
1443 root = self.ProjectTree.GetRootItem() |
1446 if not root.IsOk(): |
1444 if root is None or not root.IsOk(): |
1447 root = self.ProjectTree.AddRoot(infos["name"]) |
1445 root = self.ProjectTree.AddRoot(infos["name"]) |
1448 self.GenerateProjectTreeBranch(root, infos) |
1446 self.GenerateProjectTreeBranch(root, infos) |
1449 self.ProjectTree.Expand(root) |
1447 self.ProjectTree.Expand(root) |
1450 |
1448 |
1451 # Select new item corresponding to previous selected item |
1449 # Select new item corresponding to previous selected item |
1452 if tagname is not None: |
1450 if tagname is not None: |
1453 self.SelectProjectTreeItem(tagname) |
1451 self.SelectProjectTreeItem(tagname) |
1454 elif wx.Platform == '__WXMSW__': |
|
1455 self.ProjectTree.SetEvtHandlerEnabled(True) |
|
1456 |
1452 |
1457 def ResetSelectedItem(self): |
1453 def ResetSelectedItem(self): |
1458 self.SelectedItem = None |
1454 self.SelectedItem = None |
1459 |
1455 |
1460 def GenerateProjectTreeBranch(self, root, infos): |
1456 def GenerateProjectTreeBranch(self, root, infos, item_alone=False): |
1461 to_delete = [] |
1457 to_delete = [] |
1462 item_name = infos["name"] |
1458 item_name = infos["name"] |
1463 if infos["type"] in ITEMS_UNEDITABLE: |
1459 if infos["type"] in ITEMS_UNEDITABLE: |
1464 if len(infos["values"]) == 1: |
1460 if len(infos["values"]) == 1: |
1465 return self.GenerateProjectTreeBranch(root, infos["values"][0]) |
1461 return self.GenerateProjectTreeBranch(root, infos["values"][0], True) |
1466 item_name = _(item_name) |
1462 item_name = _(item_name) |
1467 self.ProjectTree.SetItemText(root, item_name) |
1463 self.ProjectTree.SetItemText(root, item_name) |
1468 self.ProjectTree.SetPyData(root, infos) |
1464 self.ProjectTree.SetPyData(root, infos) |
1469 highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK)) |
1465 highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK)) |
1470 self.ProjectTree.SetItemBackgroundColour(root, highlight_colours[0]) |
1466 self.ProjectTree.SetItemBackgroundColour(root, highlight_colours[0]) |
1471 self.ProjectTree.SetItemTextColour(root, highlight_colours[1]) |
1467 self.ProjectTree.SetItemTextColour(root, highlight_colours[1]) |
1472 if infos["type"] == ITEM_POU: |
1468 if infos["type"] == ITEM_POU: |
1473 self.ProjectTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1469 self.ProjectTree.SetItemImage(root, |
|
1470 self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
|
1471 if item_alone: |
|
1472 self.ProjectTree.SetItemExtraImage(root, self.Controler.GetPouType(infos["name"])) |
1474 elif infos.has_key("icon") and infos["icon"] is not None: |
1473 elif infos.has_key("icon") and infos["icon"] is not None: |
1475 icon_name = infos["icon"] |
1474 icon_name = infos["icon"] |
1476 if not self.TreeImageDict.has_key(icon_name): |
1475 if not self.TreeImageDict.has_key(icon_name): |
1477 self.TreeImageDict[icon_name] = self.TreeImageList.Add(GetBitmap(icon_name)) |
1476 self.TreeImageDict[icon_name] = self.TreeImageList.Add(GetBitmap(icon_name)) |
1478 self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_name]) |
1477 self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_name]) |
1479 elif self.TreeImageDict.has_key(infos["type"]): |
1478 elif self.TreeImageDict.has_key(infos["type"]): |
1480 self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1479 self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1481 |
1480 |
1482 if wx.VERSION >= (2, 6, 0): |
1481 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1483 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
|
1484 else: |
|
1485 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
|
1486 for values in infos["values"]: |
1482 for values in infos["values"]: |
1487 if values["type"] not in ITEMS_UNEDITABLE or len(values["values"]) > 0: |
1483 if values["type"] not in ITEMS_UNEDITABLE or len(values["values"]) > 0: |
1488 if not item.IsOk(): |
1484 if item is None or not item.IsOk(): |
1489 item = self.ProjectTree.AppendItem(root, "") |
1485 item = self.ProjectTree.AppendItem(root, "") |
1490 if wx.Platform != '__WXMSW__': |
1486 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1491 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
1492 self.GenerateProjectTreeBranch(item, values) |
1487 self.GenerateProjectTreeBranch(item, values) |
1493 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1488 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1494 while item.IsOk(): |
1489 while item is not None and item.IsOk(): |
1495 to_delete.append(item) |
1490 to_delete.append(item) |
1496 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1491 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1497 for item in to_delete: |
1492 for item in to_delete: |
1498 self.ProjectTree.Delete(item) |
1493 self.ProjectTree.Delete(item) |
1499 |
1494 |
|
1495 TagNamePartsItemTypes = { |
|
1496 "D": [ITEM_DATATYPE], |
|
1497 "P": [ITEM_POU], |
|
1498 "T": [ITEM_POU, ITEM_TRANSITION], |
|
1499 "A": [ITEM_POU, ITEM_ACTION], |
|
1500 "C": [ITEM_CONFIGURATION], |
|
1501 "R": [ITEM_CONFIGURATION, ITEM_RESOURCE]} |
|
1502 |
1500 def SelectProjectTreeItem(self, tagname): |
1503 def SelectProjectTreeItem(self, tagname): |
1501 self.ProjectTree.SetEvtHandlerEnabled(False) |
|
1502 result = False |
1504 result = False |
1503 if self.ProjectTree is not None: |
1505 if self.ProjectTree is not None: |
1504 root = self.ProjectTree.GetRootItem() |
1506 root = self.ProjectTree.GetRootItem() |
1505 if root.IsOk(): |
1507 if root is not None and root.IsOk(): |
1506 words = tagname.split("::") |
1508 words = tagname.split("::") |
1507 if words[0] == "D": |
1509 result = self.RecursiveProjectTreeItemSelection(root, |
1508 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_DATATYPE)]) |
1510 zip(words[1:], self.TagNamePartsItemTypes.get(words[0], []))) |
1509 elif words[0] == "P": |
|
1510 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU)]) |
|
1511 elif words[0] == "T": |
|
1512 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_TRANSITION)]) |
|
1513 elif words[0] == "A": |
|
1514 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_POU), (words[2], ITEM_ACTION)]) |
|
1515 elif words[0] == "C": |
|
1516 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION)]) |
|
1517 elif words[0] == "R": |
|
1518 result = self.RecursiveProjectTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)]) |
|
1519 self.ProjectTree.SetEvtHandlerEnabled(True) |
|
1520 return result |
1511 return result |
1521 |
1512 |
1522 def RecursiveProjectTreeItemSelection(self, root, items): |
1513 def RecursiveProjectTreeItemSelection(self, root, items): |
1523 found = False |
1514 found = False |
1524 if wx.VERSION >= (2, 6, 0): |
1515 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1525 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1516 while item is not None and item.IsOk() and not found: |
1526 else: |
|
1527 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
|
1528 while item.IsOk() and not found: |
|
1529 item_infos = self.ProjectTree.GetPyData(item) |
1517 item_infos = self.ProjectTree.GetPyData(item) |
1530 if (item_infos["name"].split(":")[-1].strip(), item_infos["type"]) == items[0]: |
1518 if (item_infos["name"].split(":")[-1].strip(), item_infos["type"]) == items[0]: |
1531 if len(items) == 1: |
1519 if len(items) == 1: |
1532 self.SelectedItem = item |
1520 self.SelectedItem = item |
1533 self.ProjectTree.SelectItem(item) |
1521 self.ProjectTree.SelectItem(item) |