42 from PLCControler import * |
42 from PLCControler import * |
43 from controls import CustomTree, LibraryPanel, PouInstanceVariablesPanel, SearchResultPanel |
43 from controls import CustomTree, LibraryPanel, PouInstanceVariablesPanel, SearchResultPanel |
44 from controls.DebugVariablePanel import DebugVariablePanel |
44 from controls.DebugVariablePanel import DebugVariablePanel |
45 from dialogs import ProjectDialog, PouDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog, SearchInProjectDialog |
45 from dialogs import ProjectDialog, PouDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog, SearchInProjectDialog |
46 from util.BitmapLibrary import GetBitmap |
46 from util.BitmapLibrary import GetBitmap |
|
47 from plcopen.types_enums import * |
47 |
48 |
48 # Define PLCOpenEditor controls id |
49 # Define PLCOpenEditor controls id |
49 [ |
50 [ |
50 ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
51 ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
51 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
52 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
822 page_ref, page_title = infos |
823 page_ref, page_title = infos |
823 notebook.AddPage(page_ref, page_title) |
824 notebook.AddPage(page_ref, page_title) |
824 return notebook.GetPageIndex(page_ref) |
825 return notebook.GetPageIndex(page_ref) |
825 elif page_infos[0] == "editor": |
826 elif page_infos[0] == "editor": |
826 tagname = page_infos[1] |
827 tagname = page_infos[1] |
827 page_ref = self.EditProjectElement(self.Controler.GetElementType(tagname), tagname) |
828 page_ref = self.EditProjectElement(GetElementType(tagname), tagname) |
828 if page_ref is not None: |
829 if page_ref is not None: |
829 page_ref.RefreshView() |
830 page_ref.RefreshView() |
830 return notebook.GetPageIndex(page_ref) |
831 return notebook.GetPageIndex(page_ref) |
831 elif page_infos[0] == "debug": |
832 elif page_infos[0] == "debug": |
832 instance_path = page_infos[1] |
833 instance_path = page_infos[1] |
1644 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]: |
1645 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]: |
1645 message = _("\"%s\" data type already exists!") % new_name |
1646 message = _("\"%s\" data type already exists!") % new_name |
1646 abort = True |
1647 abort = True |
1647 if not abort: |
1648 if not abort: |
1648 self.Controler.ChangeDataTypeName(old_name, new_name) |
1649 self.Controler.ChangeDataTypeName(old_name, new_name) |
1649 self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), |
1650 self.RefreshEditorNames(ComputeDataTypeName(old_name), |
1650 self.Controler.ComputeDataTypeName(new_name)) |
1651 ComputeDataTypeName(new_name)) |
1651 self.RefreshPageTitles() |
1652 self.RefreshPageTitles() |
1652 elif item_infos["type"] == ITEM_POU: |
1653 elif item_infos["type"] == ITEM_POU: |
1653 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]: |
1654 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]: |
1654 message = _("\"%s\" pou already exists!") % new_name |
1655 message = _("\"%s\" pou already exists!") % new_name |
1655 abort = True |
1656 abort = True |
1658 if messageDialog.ShowModal() == wx.ID_NO: |
1659 if messageDialog.ShowModal() == wx.ID_NO: |
1659 abort = True |
1660 abort = True |
1660 messageDialog.Destroy() |
1661 messageDialog.Destroy() |
1661 if not abort: |
1662 if not abort: |
1662 self.Controler.ChangePouName(old_name, new_name) |
1663 self.Controler.ChangePouName(old_name, new_name) |
1663 self.RefreshEditorNames(self.Controler.ComputePouName(old_name), |
1664 self.RefreshEditorNames(ComputePouName(old_name), |
1664 self.Controler.ComputePouName(new_name)) |
1665 ComputePouName(new_name)) |
1665 self.RefreshLibraryPanel() |
1666 self.RefreshLibraryPanel() |
1666 self.RefreshPageTitles() |
1667 self.RefreshPageTitles() |
1667 elif item_infos["type"] == ITEM_TRANSITION: |
1668 elif item_infos["type"] == ITEM_TRANSITION: |
1668 pou_item = self.ProjectTree.GetItemParent(event.GetItem()) |
1669 pou_item = self.ProjectTree.GetItemParent(event.GetItem()) |
1669 pou_name = self.ProjectTree.GetItemText(pou_item) |
1670 pou_name = self.ProjectTree.GetItemText(pou_item) |
1672 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]: |
1673 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]: |
1673 message = _("A variable with \"%s\" as name already exists in this pou!") % new_name |
1674 message = _("A variable with \"%s\" as name already exists in this pou!") % new_name |
1674 else: |
1675 else: |
1675 words = item_infos["tagname"].split("::") |
1676 words = item_infos["tagname"].split("::") |
1676 self.Controler.ChangePouTransitionName(words[1], old_name, new_name) |
1677 self.Controler.ChangePouTransitionName(words[1], old_name, new_name) |
1677 self.RefreshEditorNames(self.Controler.ComputePouTransitionName(words[1], old_name), |
1678 self.RefreshEditorNames(ComputePouTransitionName(words[1], old_name), |
1678 self.Controler.ComputePouTransitionName(words[1], new_name)) |
1679 ComputePouTransitionName(words[1], new_name)) |
1679 self.RefreshPageTitles() |
1680 self.RefreshPageTitles() |
1680 elif item_infos["type"] == ITEM_ACTION: |
1681 elif item_infos["type"] == ITEM_ACTION: |
1681 pou_item = self.ProjectTree.GetItemParent(event.GetItem()) |
1682 pou_item = self.ProjectTree.GetItemParent(event.GetItem()) |
1682 pou_name = self.ProjectTree.GetItemText(pou_item) |
1683 pou_name = self.ProjectTree.GetItemText(pou_item) |
1683 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1684 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1685 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]: |
1686 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]: |
1686 message = _("A variable with \"%s\" as name already exists in this pou!") % new_name |
1687 message = _("A variable with \"%s\" as name already exists in this pou!") % new_name |
1687 else: |
1688 else: |
1688 words = item_infos["tagname"].split("::") |
1689 words = item_infos["tagname"].split("::") |
1689 self.Controler.ChangePouActionName(words[1], old_name, new_name) |
1690 self.Controler.ChangePouActionName(words[1], old_name, new_name) |
1690 self.RefreshEditorNames(self.Controler.ComputePouActionName(words[1], old_name), |
1691 self.RefreshEditorNames(ComputePouActionName(words[1], old_name), |
1691 self.Controler.ComputePouActionName(words[1], new_name)) |
1692 ComputePouActionName(words[1], new_name)) |
1692 self.RefreshPageTitles() |
1693 self.RefreshPageTitles() |
1693 elif item_infos["type"] == ITEM_CONFIGURATION: |
1694 elif item_infos["type"] == ITEM_CONFIGURATION: |
1694 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]: |
1695 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]: |
1695 message = _("\"%s\" config already exists!") % new_name |
1696 message = _("\"%s\" config already exists!") % new_name |
1696 abort = True |
1697 abort = True |
1704 if messageDialog.ShowModal() == wx.ID_NO: |
1705 if messageDialog.ShowModal() == wx.ID_NO: |
1705 abort = True |
1706 abort = True |
1706 messageDialog.Destroy() |
1707 messageDialog.Destroy() |
1707 if not abort: |
1708 if not abort: |
1708 self.Controler.ChangeConfigurationName(old_name, new_name) |
1709 self.Controler.ChangeConfigurationName(old_name, new_name) |
1709 self.RefreshEditorNames(self.Controler.ComputeConfigurationName(old_name), |
1710 self.RefreshEditorNames(ComputeConfigurationName(old_name), |
1710 self.Controler.ComputeConfigurationName(new_name)) |
1711 ComputeConfigurationName(new_name)) |
1711 self.RefreshPageTitles() |
1712 self.RefreshPageTitles() |
1712 elif item_infos["type"] == ITEM_RESOURCE: |
1713 elif item_infos["type"] == ITEM_RESOURCE: |
1713 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]: |
1714 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]: |
1714 message = _("\"%s\" config already exists!") % new_name |
1715 message = _("\"%s\" config already exists!") % new_name |
1715 abort = True |
1716 abort = True |
1724 abort = True |
1725 abort = True |
1725 messageDialog.Destroy() |
1726 messageDialog.Destroy() |
1726 if not abort: |
1727 if not abort: |
1727 words = item_infos["tagname"].split("::") |
1728 words = item_infos["tagname"].split("::") |
1728 self.Controler.ChangeConfigurationResourceName(words[1], old_name, new_name) |
1729 self.Controler.ChangeConfigurationResourceName(words[1], old_name, new_name) |
1729 self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(words[1], old_name), |
1730 self.RefreshEditorNames(ComputeConfigurationResourceName(words[1], old_name), |
1730 self.Controler.ComputeConfigurationResourceName(words[1], new_name)) |
1731 ComputeConfigurationResourceName(words[1], new_name)) |
1731 self.RefreshPageTitles() |
1732 self.RefreshPageTitles() |
1732 if message or abort: |
1733 if message or abort: |
1733 if message: |
1734 if message: |
1734 self.ShowErrorMessage(message) |
1735 self.ShowErrorMessage(message) |
1735 event.Veto() |
1736 event.Veto() |
2463 selected = self.ProjectTree.GetSelection() |
2464 selected = self.ProjectTree.GetSelection() |
2464 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_DATATYPE: |
2465 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_DATATYPE: |
2465 name = self.ProjectTree.GetItemText(selected) |
2466 name = self.ProjectTree.GetItemText(selected) |
2466 if self.CheckDataTypeIsUsedBeforeDeletion(name): |
2467 if self.CheckDataTypeIsUsedBeforeDeletion(name): |
2467 self.Controler.ProjectRemoveDataType(name) |
2468 self.Controler.ProjectRemoveDataType(name) |
2468 tagname = self.Controler.ComputeDataTypeName(name) |
2469 tagname = ComputeDataTypeName(name) |
2469 idx = self.IsOpened(tagname) |
2470 idx = self.IsOpened(tagname) |
2470 if idx is not None: |
2471 if idx is not None: |
2471 self.TabsOpened.DeletePage(idx) |
2472 self.TabsOpened.DeletePage(idx) |
2472 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE) |
2473 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE) |
2473 |
2474 |
2480 selected = self.ProjectTree.GetSelection() |
2481 selected = self.ProjectTree.GetSelection() |
2481 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2482 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2482 name = self.ProjectTree.GetItemText(selected) |
2483 name = self.ProjectTree.GetItemText(selected) |
2483 if self.CheckPouIsUsedBeforeDeletion(name): |
2484 if self.CheckPouIsUsedBeforeDeletion(name): |
2484 self.Controler.ProjectRemovePou(name) |
2485 self.Controler.ProjectRemovePou(name) |
2485 tagname = self.Controler.ComputePouName(name) |
2486 tagname = ComputePouName(name) |
2486 idx = self.IsOpened(tagname) |
2487 idx = self.IsOpened(tagname) |
2487 if idx is not None: |
2488 if idx is not None: |
2488 self.TabsOpened.DeletePage(idx) |
2489 self.TabsOpened.DeletePage(idx) |
2489 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2490 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2490 |
2491 |
2493 item_infos = self.ProjectTree.GetPyData(selected) |
2494 item_infos = self.ProjectTree.GetPyData(selected) |
2494 if item_infos["type"] == ITEM_TRANSITION: |
2495 if item_infos["type"] == ITEM_TRANSITION: |
2495 transition = self.ProjectTree.GetItemText(selected) |
2496 transition = self.ProjectTree.GetItemText(selected) |
2496 pou_name = item_infos["tagname"].split("::")[1] |
2497 pou_name = item_infos["tagname"].split("::")[1] |
2497 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
2498 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
2498 tagname = self.Controler.ComputePouTransitionName(pou_name, transition) |
2499 tagname = ComputePouTransitionName(pou_name, transition) |
2499 idx = self.IsOpened(tagname) |
2500 idx = self.IsOpened(tagname) |
2500 if idx is not None: |
2501 if idx is not None: |
2501 self.TabsOpened.DeletePage(idx) |
2502 self.TabsOpened.DeletePage(idx) |
2502 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2503 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2503 |
2504 |
2506 item_infos = self.ProjectTree.GetPyData(selected) |
2507 item_infos = self.ProjectTree.GetPyData(selected) |
2507 if item_infos["type"] == ITEM_ACTION: |
2508 if item_infos["type"] == ITEM_ACTION: |
2508 action = self.ProjectTree.GetItemText(selected) |
2509 action = self.ProjectTree.GetItemText(selected) |
2509 pou_name = item_infos["tagname"].split("::")[1] |
2510 pou_name = item_infos["tagname"].split("::")[1] |
2510 self.Controler.ProjectRemovePouAction(pou_name, action) |
2511 self.Controler.ProjectRemovePouAction(pou_name, action) |
2511 tagname = self.Controler.ComputePouActionName(pou_name, action) |
2512 tagname = ComputePouActionName(pou_name, action) |
2512 idx = self.IsOpened(tagname) |
2513 idx = self.IsOpened(tagname) |
2513 if idx is not None: |
2514 if idx is not None: |
2514 self.TabsOpened.DeletePage(idx) |
2515 self.TabsOpened.DeletePage(idx) |
2515 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2516 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2516 |
2517 |
2517 def OnRemoveConfigurationMenu(self, event): |
2518 def OnRemoveConfigurationMenu(self, event): |
2518 selected = self.ProjectTree.GetSelection() |
2519 selected = self.ProjectTree.GetSelection() |
2519 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_CONFIGURATION: |
2520 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_CONFIGURATION: |
2520 name = self.ProjectTree.GetItemText(selected) |
2521 name = self.ProjectTree.GetItemText(selected) |
2521 self.Controler.ProjectRemoveConfiguration(name) |
2522 self.Controler.ProjectRemoveConfiguration(name) |
2522 tagname = self.Controler.ComputeConfigurationName(name) |
2523 tagname = ComputeConfigurationName(name) |
2523 idx = self.IsOpened(tagname) |
2524 idx = self.IsOpened(tagname) |
2524 if idx is not None: |
2525 if idx is not None: |
2525 self.TabsOpened.DeletePage(idx) |
2526 self.TabsOpened.DeletePage(idx) |
2526 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2527 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2527 |
2528 |
2530 item_infos = self.ProjectTree.GetPyData(selected) |
2531 item_infos = self.ProjectTree.GetPyData(selected) |
2531 if item_infos["type"] == ITEM_RESOURCE: |
2532 if item_infos["type"] == ITEM_RESOURCE: |
2532 resource = self.ProjectTree.GetItemText(selected) |
2533 resource = self.ProjectTree.GetItemText(selected) |
2533 config_name = item_infos["tagname"].split("::")[1] |
2534 config_name = item_infos["tagname"].split("::")[1] |
2534 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2535 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2535 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
2536 tagname = ComputeConfigurationResourceName(config_name, selected) |
2536 idx = self.IsOpened(tagname) |
2537 idx = self.IsOpened(tagname) |
2537 if idx is not None: |
2538 if idx is not None: |
2538 self.TabsOpened.DeletePage(idx) |
2539 self.TabsOpened.DeletePage(idx) |
2539 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2540 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2540 |
2541 |
2547 if infos[1] == "name": |
2548 if infos[1] == "name": |
2548 self.Highlights[infos[0]] = highlight_type |
2549 self.Highlights[infos[0]] = highlight_type |
2549 self.RefreshProjectTree() |
2550 self.RefreshProjectTree() |
2550 self.ProjectTree.Unselect() |
2551 self.ProjectTree.Unselect() |
2551 else: |
2552 else: |
2552 self.EditProjectElement(self.Controler.GetElementType(infos[0]), infos[0]) |
2553 self.EditProjectElement(GetElementType(infos[0]), infos[0]) |
2553 selected = self.TabsOpened.GetSelection() |
2554 selected = self.TabsOpened.GetSelection() |
2554 if selected != -1: |
2555 if selected != -1: |
2555 viewer = self.TabsOpened.GetPage(selected) |
2556 viewer = self.TabsOpened.GetPage(selected) |
2556 viewer.AddHighlight(infos[1:], start, end, highlight_type) |
2557 viewer.AddHighlight(infos[1:], start, end, highlight_type) |
2557 |
2558 |