277 getattr(control, viewer_function)() |
277 getattr(control, viewer_function)() |
278 elif isinstance(control, wx.TextCtrl): |
278 elif isinstance(control, wx.TextCtrl): |
279 control.ProcessEvent(event) |
279 control.ProcessEvent(event) |
280 return ShortcutKeyFunction |
280 return ShortcutKeyFunction |
281 |
281 |
282 def GetParentName(tree, item, parent_type): |
|
283 parent_item = tree.GetItemParent(item) |
|
284 parent_item_type = tree.GetPyData(parent_item) |
|
285 while parent_item_type != parent_type: |
|
286 parent_item = tree.GetItemParent(parent_item) |
|
287 parent_item_type = tree.GetPyData(parent_item) |
|
288 return tree.GetItemText(parent_item) |
|
289 |
|
290 def GetDeleteElementFunction(remove_function, parent_type=None, check_function=None): |
282 def GetDeleteElementFunction(remove_function, parent_type=None, check_function=None): |
291 def DeleteElementFunction(self, selected): |
283 def DeleteElementFunction(self, selected): |
292 name = self.ProjectTree.GetItemText(selected) |
284 name = self.ProjectTree.GetItemText(selected) |
293 if check_function is None or not check_function(self.Controler, name): |
285 if check_function is None or not check_function(self.Controler, name): |
294 if parent_type is not None: |
286 if parent_type is not None: |
295 parent_name = GetParentName(self.ProjectTree, selected, parent_type) |
287 item_infos = self.ProjectTree.GetPyData(selected) |
|
288 parent_name = item_infos["tagname"].split("::")[1] |
296 remove_function(self.Controler, parent_name, name) |
289 remove_function(self.Controler, parent_name, name) |
297 else: |
290 else: |
298 remove_function(self.Controler, name) |
291 remove_function(self.Controler, name) |
299 else: |
292 else: |
300 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")%name) |
293 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")%name) |
404 parent.Append(menu=self.HelpMenu, title=_(u'&Help')) |
397 parent.Append(menu=self.HelpMenu, title=_(u'&Help')) |
405 |
398 |
406 def _init_coll_FileMenu_Items(self, parent): |
399 def _init_coll_FileMenu_Items(self, parent): |
407 pass |
400 pass |
408 |
401 |
409 def _init_coll_AddMenu_Items(self, parent): |
402 def _init_coll_AddMenu_Items(self, parent, add_config=True): |
410 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
403 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
411 kind=wx.ITEM_NORMAL, text=_(u'&Data Type')) |
404 kind=wx.ITEM_NORMAL, text=_(u'&Data Type')) |
412 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
405 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
413 kind=wx.ITEM_NORMAL, text=_(u'&Function')) |
406 kind=wx.ITEM_NORMAL, text=_(u'&Function')) |
414 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
407 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
415 kind=wx.ITEM_NORMAL, text=_(u'Function &Block')) |
408 kind=wx.ITEM_NORMAL, text=_(u'Function &Block')) |
416 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM, |
409 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM, |
417 kind=wx.ITEM_NORMAL, text=_(u'&Program')) |
410 kind=wx.ITEM_NORMAL, text=_(u'&Program')) |
418 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
411 if add_config: |
419 kind=wx.ITEM_NORMAL, text=_(u'&Configuration')) |
412 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
|
413 kind=wx.ITEM_NORMAL, text=_(u'&Configuration')) |
420 |
414 |
421 def _init_coll_EditMenu_Items(self, parent): |
415 def _init_coll_EditMenu_Items(self, parent): |
422 AppendMenu(parent, help='', id=wx.ID_UNDO, |
416 AppendMenu(parent, help='', id=wx.ID_UNDO, |
423 kind=wx.ITEM_NORMAL, text=_(u'Undo\tCTRL+Z')) |
417 kind=wx.ITEM_NORMAL, text=_(u'Undo\tCTRL+Z')) |
424 AppendMenu(parent, help='', id=wx.ID_REDO, |
418 AppendMenu(parent, help='', id=wx.ID_REDO, |
852 notebook.AddPage(page_ref, page_title) |
846 notebook.AddPage(page_ref, page_title) |
853 return notebook.GetPageIndex(page_ref) |
847 return notebook.GetPageIndex(page_ref) |
854 elif page_infos[0] == "editor": |
848 elif page_infos[0] == "editor": |
855 tagname = page_infos[1] |
849 tagname = page_infos[1] |
856 page_ref = self.EditProjectElement(self.Controler.GetElementType(tagname), tagname) |
850 page_ref = self.EditProjectElement(self.Controler.GetElementType(tagname), tagname) |
857 page_ref.RefreshView() |
851 if page_ref is not None: |
858 return notebook.GetPageIndex(page_ref) |
852 page_ref.RefreshView() |
|
853 return notebook.GetPageIndex(page_ref) |
859 elif page_infos[0] == "debug": |
854 elif page_infos[0] == "debug": |
860 instance_path = page_infos[1] |
855 instance_path = page_infos[1] |
861 instance_infos = self.Controler.GetInstanceInfos(instance_path) |
856 instance_infos = self.Controler.GetInstanceInfos(instance_path, self.EnableDebug) |
862 if instance_infos is not None: |
857 if instance_infos is not None: |
863 return notebook.GetPageIndex(self.OpenDebugViewer(instance_infos["class"], instance_path, instance_infos["type"])) |
858 return notebook.GetPageIndex(self.OpenDebugViewer(instance_infos["class"], instance_path, instance_infos["type"])) |
864 return None |
859 return None |
865 |
860 |
866 def LoadTabOrganization(self, notebook, tabs, mode="all", first_index=None): |
861 def LoadTabOrganization(self, notebook, tabs, mode="all", first_index=None): |
1385 def OnDeleteMenu(self, event): |
1381 def OnDeleteMenu(self, event): |
1386 window = self.FindFocus() |
1382 window = self.FindFocus() |
1387 if window == self.ProjectTree or window is None: |
1383 if window == self.ProjectTree or window is None: |
1388 selected = self.ProjectTree.GetSelection() |
1384 selected = self.ProjectTree.GetSelection() |
1389 if selected.IsOk(): |
1385 if selected.IsOk(): |
1390 type = self.ProjectTree.GetPyData(selected) |
1386 function = self.DeleteFunctions.get(self.ProjectTree.GetPyData(selected)["type"], None) |
1391 function = self.DeleteFunctions.get(type, None) |
|
1392 if function is not None: |
1387 if function is not None: |
1393 function(self, selected) |
1388 function(self, selected) |
1394 self.CloseTabsWithoutModel() |
1389 self.CloseTabsWithoutModel() |
1395 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, |
1390 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, |
1396 POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1391 POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1501 tagname = window.GetTagName() |
1500 tagname = window.GetTagName() |
1502 if not window.IsDebugging(): |
1501 if not window.IsDebugging(): |
1503 wx.CallAfter(self.SelectProjectTreeItem, tagname) |
1502 wx.CallAfter(self.SelectProjectTreeItem, tagname) |
1504 wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname) |
1503 wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname) |
1505 window.RefreshView() |
1504 window.RefreshView() |
|
1505 self.EnsureTabVisible(self.LibraryPanel) |
1506 else: |
1506 else: |
1507 instance_path = window.GetInstancePath() |
1507 instance_path = window.GetInstancePath() |
|
1508 if tagname == "": |
|
1509 instance_path = instance_path.rsplit(".", 1)[0] |
|
1510 tagname = self.Controler.GetPouInstanceTagName(instance_path, self.EnableDebug) |
|
1511 self.EnsureTabVisible(self.DebugVariablePanel) |
1508 wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname, instance_path) |
1512 wx.CallAfter(self.PouInstanceVariablesPanel.SetPouType, tagname, instance_path) |
1509 wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, EDITORTOOLBAR) |
1513 wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, EDITORTOOLBAR) |
1510 event.Skip() |
1514 event.Skip() |
1511 |
1515 |
1512 def RefreshEditor(self): |
1516 def RefreshEditor(self): |
1579 if infos["type"] in ITEMS_UNEDITABLE: |
1583 if infos["type"] in ITEMS_UNEDITABLE: |
1580 if len(infos["values"]) == 1: |
1584 if len(infos["values"]) == 1: |
1581 return self.GenerateProjectTreeBranch(root, infos["values"][0]) |
1585 return self.GenerateProjectTreeBranch(root, infos["values"][0]) |
1582 item_name = _(item_name) |
1586 item_name = _(item_name) |
1583 self.ProjectTree.SetItemText(root, item_name) |
1587 self.ProjectTree.SetItemText(root, item_name) |
1584 self.ProjectTree.SetPyData(root, infos["type"]) |
1588 self.ProjectTree.SetPyData(root, infos) |
1585 highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK)) |
1589 highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK)) |
1586 self.ProjectTree.SetItemBackgroundColour(root, highlight_colours[0]) |
1590 self.ProjectTree.SetItemBackgroundColour(root, highlight_colours[0]) |
1587 self.ProjectTree.SetItemTextColour(root, highlight_colours[1]) |
1591 self.ProjectTree.SetItemTextColour(root, highlight_colours[1]) |
1588 if infos["type"] == ITEM_POU: |
1592 if infos["type"] == ITEM_POU: |
1589 self.ProjectTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1593 self.ProjectTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1590 else: |
1594 elif infos.has_key("icon") and infos["icon"] is not None: |
|
1595 icon_path = infos["icon"] |
|
1596 if not self.TreeImageDict.has_key(icon_path): |
|
1597 self.TreeImageDict[icon_path] = self.TreeImageList.Add(wx.Bitmap(icon_path)) |
|
1598 self.ProjectTree.SetItemImage(root, self.TreeImageDict[icon_path]) |
|
1599 elif self.TreeImageDict.has_key(infos["type"]): |
1591 self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1600 self.ProjectTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1592 |
1601 |
1593 if wx.VERSION >= (2, 6, 0): |
1602 if wx.VERSION >= (2, 6, 0): |
1594 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1603 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1595 else: |
1604 else: |
1596 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
1605 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
1597 for values in infos["values"]: |
1606 for values in infos["values"]: |
1677 elif new_name.upper() in IEC_KEYWORDS: |
1687 elif new_name.upper() in IEC_KEYWORDS: |
1678 message = _("\"%s\" is a keyword. It can't be used!")%new_name |
1688 message = _("\"%s\" is a keyword. It can't be used!")%new_name |
1679 else: |
1689 else: |
1680 item = event.GetItem() |
1690 item = event.GetItem() |
1681 old_name = self.ProjectTree.GetItemText(item) |
1691 old_name = self.ProjectTree.GetItemText(item) |
1682 itemtype = self.ProjectTree.GetPyData(item) |
1692 item_infos = self.ProjectTree.GetPyData(item) |
1683 if itemtype == ITEM_PROJECT: |
1693 if item_infos["type"] == ITEM_PROJECT: |
1684 self.Controler.SetProjectProperties(name = new_name) |
1694 self.Controler.SetProjectProperties(name = new_name) |
1685 elif itemtype == ITEM_DATATYPE: |
1695 elif item_infos["type"] == ITEM_DATATYPE: |
1686 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]: |
1696 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]: |
1687 message = _("\"%s\" data type already exists!")%new_name |
1697 message = _("\"%s\" data type already exists!")%new_name |
1688 abort = True |
1698 abort = True |
1689 if not abort: |
1699 if not abort: |
1690 self.Controler.ChangeDataTypeName(old_name, new_name) |
1700 self.Controler.ChangeDataTypeName(old_name, new_name) |
1691 self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), |
1701 self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), |
1692 self.Controler.ComputeDataTypeName(new_name)) |
1702 self.Controler.ComputeDataTypeName(new_name)) |
1693 self.RefreshPageTitles() |
1703 self.RefreshPageTitles() |
1694 elif itemtype == ITEM_POU: |
1704 elif item_infos["type"] == ITEM_POU: |
1695 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]: |
1705 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]: |
1696 message = _("\"%s\" pou already exists!")%new_name |
1706 message = _("\"%s\" pou already exists!")%new_name |
1697 abort = True |
1707 abort = True |
1698 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]: |
1708 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]: |
1699 messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1709 messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1704 self.Controler.ChangePouName(old_name, new_name) |
1714 self.Controler.ChangePouName(old_name, new_name) |
1705 self.RefreshEditorNames(self.Controler.ComputePouName(old_name), |
1715 self.RefreshEditorNames(self.Controler.ComputePouName(old_name), |
1706 self.Controler.ComputePouName(new_name)) |
1716 self.Controler.ComputePouName(new_name)) |
1707 self.RefreshLibraryPanel() |
1717 self.RefreshLibraryPanel() |
1708 self.RefreshPageTitles() |
1718 self.RefreshPageTitles() |
1709 elif itemtype == ITEM_TRANSITION: |
1719 elif item_infos["type"] == ITEM_TRANSITION: |
1710 pou_name = GetParentName(self.ProjectTree, item, ITEM_POU) |
|
1711 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1720 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1712 message = _("A POU named \"%s\" already exists!")%new_name |
1721 message = _("A POU named \"%s\" already exists!")%new_name |
1713 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1722 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1714 message = _("A variable with \"%s\" as name already exists in this pou!")%new_name |
1723 message = _("A variable with \"%s\" as name already exists in this pou!")%new_name |
1715 else: |
1724 else: |
1716 self.Controler.ChangePouTransitionName(pou_name, old_name, new_name) |
1725 words = item_infos["tagname"].split("::") |
1717 self.RefreshEditorNames(self.Controler.ComputePouTransitionName(pou_name, old_name), |
1726 self.Controler.ChangePouTransitionName(words[1], old_name, new_name) |
1718 self.Controler.ComputePouTransitionName(pou_name, new_name)) |
1727 self.RefreshEditorNames(self.Controler.ComputePouTransitionName(words[1], old_name), |
|
1728 self.Controler.ComputePouTransitionName(words[1], new_name)) |
1719 self.RefreshPageTitles() |
1729 self.RefreshPageTitles() |
1720 elif itemtype == ITEM_ACTION: |
1730 elif item_infos["type"] == ITEM_ACTION: |
1721 pou_name = GetParentName(self.ProjectTree, item, ITEM_POU) |
|
1722 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1731 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1723 message = _("A POU named \"%s\" already exists!")%new_name |
1732 message = _("A POU named \"%s\" already exists!")%new_name |
1724 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1733 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1725 message = _("A variable with \"%s\" as name already exists in this pou!")%new_name |
1734 message = _("A variable with \"%s\" as name already exists in this pou!")%new_name |
1726 else: |
1735 else: |
1727 self.Controler.ChangePouActionName(pou_name, old_name, new_name) |
1736 words = item_infos["tagname"].split("::") |
1728 self.RefreshEditorNames(self.Controler.ComputePouActionName(pou_name, old_name), |
1737 self.Controler.ChangePouActionName(words[1], old_name, new_name) |
1729 self.Controler.ComputePouActionName(pou_name, new_name)) |
1738 self.RefreshEditorNames(self.Controler.ComputePouActionName(words[1], old_name), |
|
1739 self.Controler.ComputePouActionName(words[1], new_name)) |
1730 self.RefreshPageTitles() |
1740 self.RefreshPageTitles() |
1731 elif itemtype == ITEM_CONFIGURATION: |
1741 elif item_infos["type"] == ITEM_CONFIGURATION: |
1732 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]: |
1742 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]: |
1733 message = _("\"%s\" config already exists!")%new_name |
1743 message = _("\"%s\" config already exists!")%new_name |
1734 abort = True |
1744 abort = True |
1735 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1745 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1736 messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1746 messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1745 if not abort: |
1755 if not abort: |
1746 self.Controler.ChangeConfigurationName(old_name, new_name) |
1756 self.Controler.ChangeConfigurationName(old_name, new_name) |
1747 self.RefreshEditorNames(self.Controler.ComputeConfigurationName(old_name), |
1757 self.RefreshEditorNames(self.Controler.ComputeConfigurationName(old_name), |
1748 self.Controler.ComputeConfigurationName(new_name)) |
1758 self.Controler.ComputeConfigurationName(new_name)) |
1749 self.RefreshPageTitles() |
1759 self.RefreshPageTitles() |
1750 elif itemtype == ITEM_RESOURCE: |
1760 elif item_infos["type"] == ITEM_RESOURCE: |
1751 config_name = GetParentName(self.ProjectTree, item, ITEM_CONFIGURATION) |
|
1752 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]: |
1761 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]: |
1753 message = _("\"%s\" config already exists!")%new_name |
1762 message = _("\"%s\" config already exists!")%new_name |
1754 abort = True |
1763 abort = True |
1755 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1764 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1756 messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1765 messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1761 messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1770 messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) |
1762 if messageDialog.ShowModal() == wx.ID_NO: |
1771 if messageDialog.ShowModal() == wx.ID_NO: |
1763 abort = True |
1772 abort = True |
1764 messageDialog.Destroy() |
1773 messageDialog.Destroy() |
1765 if not abort: |
1774 if not abort: |
1766 self.Controler.ChangeConfigurationResourceName(config_name, old_name, new_name) |
1775 words = item_infos["tagname"].split("::") |
1767 self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(config_name, old_name), |
1776 self.Controler.ChangeConfigurationResourceName(words[1], old_name, new_name) |
1768 self.Controler.ComputeConfigurationResourceName(config_name, new_name)) |
1777 self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(words[1], old_name), |
|
1778 self.Controler.ComputeConfigurationResourceName(words[1], new_name)) |
1769 self.RefreshPageTitles() |
1779 self.RefreshPageTitles() |
1770 if message or abort: |
1780 if message or abort: |
1771 if message: |
1781 if message: |
1772 self.ShowErrorMessage(message) |
1782 self.ShowErrorMessage(message) |
1773 item = event.GetItem() |
1783 item = event.GetItem() |
1780 event.Skip() |
1790 event.Skip() |
1781 |
1791 |
1782 def OnProjectTreeItemActivated(self, event): |
1792 def OnProjectTreeItemActivated(self, event): |
1783 selected = event.GetItem() |
1793 selected = event.GetItem() |
1784 name = self.ProjectTree.GetItemText(selected) |
1794 name = self.ProjectTree.GetItemText(selected) |
1785 data = self.ProjectTree.GetPyData(selected) |
1795 item_infos = self.ProjectTree.GetPyData(selected) |
1786 if data == ITEM_PROJECT: |
1796 if item_infos["type"] == ITEM_PROJECT: |
1787 self.EditProjectSettings() |
1797 self.EditProjectSettings() |
1788 elif data == ITEM_DATATYPE: |
1798 elif item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1789 self.EditProjectElement(data, self.Controler.ComputeDataTypeName(name)) |
1799 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1790 elif data == ITEM_POU: |
1800 ITEM_TRANSITION, ITEM_ACTION]: |
1791 self.EditProjectElement(data, self.Controler.ComputePouName(name)) |
1801 self.EditProjectElement(item_infos["type"], item_infos["tagname"]) |
1792 elif data == ITEM_CONFIGURATION: |
|
1793 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name)) |
|
1794 elif data == ITEM_RESOURCE: |
|
1795 config_name = GetParentName(self.ProjectTree, selected, ITEM_CONFIGURATION) |
|
1796 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name)) |
|
1797 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
|
1798 pou_name = GetParentName(self.ProjectTree, selected, ITEM_POU) |
|
1799 if data == ITEM_TRANSITION: |
|
1800 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
|
1801 elif data == ITEM_ACTION: |
|
1802 tagname = self.Controler.ComputePouActionName(pou_name, name) |
|
1803 self.EditProjectElement(data, tagname) |
|
1804 event.Skip() |
1802 event.Skip() |
1805 |
1803 |
1806 def ProjectTreeItemSelect(self, select_item): |
1804 def ProjectTreeItemSelect(self, select_item): |
1807 name = self.ProjectTree.GetItemText(select_item) |
1805 name = self.ProjectTree.GetItemText(select_item) |
1808 data = self.ProjectTree.GetPyData(select_item) |
1806 item_infos = self.ProjectTree.GetPyData(select_item) |
1809 tagname = None |
1807 if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1810 if data == ITEM_DATATYPE: |
1808 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1811 tagname = self.Controler.ComputeDataTypeName(name) |
1809 ITEM_TRANSITION, ITEM_ACTION]: |
1812 elif data == ITEM_POU: |
1810 self.EditProjectElement(item_infos["type"], item_infos["tagname"], True) |
1813 tagname = self.Controler.ComputePouName(name) |
1811 self.PouInstanceVariablesPanel.SetPouType(item_infos["tagname"]) |
1814 elif data == ITEM_CONFIGURATION: |
|
1815 tagname = self.Controler.ComputeConfigurationName(name) |
|
1816 elif data == ITEM_RESOURCE: |
|
1817 config_name = GetParentName(self.ProjectTree, select_item, ITEM_CONFIGURATION) |
|
1818 tagname = self.Controler.ComputeConfigurationResourceName(config_name, name) |
|
1819 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
|
1820 pou_name = GetParentName(self.ProjectTree, select_item, ITEM_POU) |
|
1821 if data == ITEM_TRANSITION: |
|
1822 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
|
1823 elif data == ITEM_ACTION: |
|
1824 tagname = self.Controler.ComputePouActionName(pou_name, name) |
|
1825 if tagname is not None: |
|
1826 self.EditProjectElement(data, tagname, True) |
|
1827 self.PouInstanceVariablesPanel.SetPouType(tagname) |
|
1828 |
1812 |
1829 def OnProjectTreeLeftUp(self, event): |
1813 def OnProjectTreeLeftUp(self, event): |
1830 if self.SelectedItem is not None: |
1814 if self.SelectedItem is not None: |
1831 self.ProjectTree.SelectItem(self.SelectedItem) |
1815 self.ProjectTree.SelectItem(self.SelectedItem) |
1832 self.ProjectTreeItemSelect(self.SelectedItem) |
1816 self.ProjectTreeItemSelect(self.SelectedItem) |
1958 |
1942 |
1959 elif name == "Transitions": |
1943 elif name == "Transitions": |
1960 menu = wx.Menu(title='') |
1944 menu = wx.Menu(title='') |
1961 new_id = wx.NewId() |
1945 new_id = wx.NewId() |
1962 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1946 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1963 parent = self.ProjectTree.GetItemParent(item) |
1947 parent = self.ProjectTree.GetItemParent(item)["type"] |
1964 parent_type = self.ProjectTree.GetPyData(parent) |
1948 parent_type = self.ProjectTree.GetPyData(parent) |
1965 while parent_type != ITEM_POU: |
1949 while parent_type != ITEM_POU: |
1966 parent = self.ProjectTree.GetItemParent(parent) |
1950 parent = self.ProjectTree.GetItemParent(parent) |
1967 parent_type = self.ProjectTree.GetPyData(parent) |
1951 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1968 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1952 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1969 |
1953 |
1970 elif name == "Actions": |
1954 elif name == "Actions": |
1971 menu = wx.Menu(title='') |
1955 menu = wx.Menu(title='') |
1972 new_id = wx.NewId() |
1956 new_id = wx.NewId() |
1973 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Action")) |
1957 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Action")) |
1974 parent = self.ProjectTree.GetItemParent(item) |
1958 parent = self.ProjectTree.GetItemParent(item) |
1975 parent_type = self.ProjectTree.GetPyData(parent) |
1959 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1976 while parent_type != ITEM_POU: |
1960 while parent_type != ITEM_POU: |
1977 parent = self.ProjectTree.GetItemParent(parent) |
1961 parent = self.ProjectTree.GetItemParent(parent) |
1978 parent_type = self.ProjectTree.GetPyData(parent) |
1962 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1979 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1963 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1980 |
1964 |
1981 elif name == "Resources": |
1965 elif name == "Resources": |
1982 menu = wx.Menu(title='') |
1966 menu = wx.Menu(title='') |
1983 new_id = wx.NewId() |
1967 new_id = wx.NewId() |
1984 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1968 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1985 parent = self.ProjectTree.GetItemParent(item) |
1969 parent = self.ProjectTree.GetItemParent(item) |
1986 parent_type = self.ProjectTree.GetPyData(parent) |
1970 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1987 while parent_type != ITEM_CONFIGURATION: |
1971 while parent_type not in [ITEM_CONFIGURATION, ITEM_PROJECT]: |
1988 parent = self.ProjectTree.GetItemParent(parent) |
1972 parent = self.ProjectTree.GetItemParent(parent) |
1989 parent_type = self.ProjectTree.GetPyData(parent) |
1973 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1990 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1974 if parent_type == ITEM_PROJECT: |
|
1975 parent_name = None |
|
1976 else: |
|
1977 parent_name = self.ProjectTree.GetItemText(parent) |
|
1978 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(parent_name), id=new_id) |
1991 |
1979 |
1992 else: |
1980 else: |
1993 if type == ITEM_POU: |
1981 if item_infos["type"] == ITEM_POU: |
1994 menu = wx.Menu(title='') |
1982 menu = wx.Menu(title='') |
1995 if self.Controler.GetPouBodyType(name) == "SFC": |
1983 if self.Controler.GetPouBodyType(name) == "SFC": |
1996 new_id = wx.NewId() |
1984 new_id = wx.NewId() |
1997 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1985 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1998 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id) |
1986 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id) |
2018 menu.AppendMenu(wx.NewId(), _("Change POU Type To"), change_menu) |
2006 menu.AppendMenu(wx.NewId(), _("Change POU Type To"), change_menu) |
2019 new_id = wx.NewId() |
2007 new_id = wx.NewId() |
2020 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Rename")) |
2008 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Rename")) |
2021 self.Bind(wx.EVT_MENU, self.OnRenamePouMenu, id=new_id) |
2009 self.Bind(wx.EVT_MENU, self.OnRenamePouMenu, id=new_id) |
2022 |
2010 |
2023 elif type == ITEM_CONFIGURATION: |
2011 elif item_infos["type"] == ITEM_CONFIGURATION: |
2024 menu = wx.Menu(title='') |
2012 menu = wx.Menu(title='') |
2025 new_id = wx.NewId() |
2013 new_id = wx.NewId() |
2026 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
2014 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
2027 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id) |
2015 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id) |
2028 |
2016 |
2029 elif type in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]: |
2017 elif item_infos["type"] in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]: |
2030 menu = wx.Menu(title='') |
2018 menu = wx.Menu(title='') |
2031 |
2019 |
2032 if menu is not None: |
2020 if menu is not None: |
2033 new_id = wx.NewId() |
2021 new_id = wx.NewId() |
2034 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Delete")) |
2022 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Delete")) |
2439 return OnAddResourceMenu |
2428 return OnAddResourceMenu |
2440 |
2429 |
2441 def GenerateChangePouTypeFunction(self, name, new_type): |
2430 def GenerateChangePouTypeFunction(self, name, new_type): |
2442 def OnChangePouTypeMenu(event): |
2431 def OnChangePouTypeMenu(event): |
2443 selected = self.ProjectTree.GetSelection() |
2432 selected = self.ProjectTree.GetSelection() |
2444 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
2433 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2445 self.Controler.ProjectChangePouType(name, new_type) |
2434 self.Controler.ProjectChangePouType(name, new_type) |
2446 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2435 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2447 return OnChangePouTypeMenu |
2436 return OnChangePouTypeMenu |
2448 |
2437 |
2449 def OnCopyPou(self, event): |
2438 def OnCopyPou(self, event): |
2491 else: |
2480 else: |
2492 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
2481 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
2493 |
2482 |
2494 def OnRenamePouMenu(self, event): |
2483 def OnRenamePouMenu(self, event): |
2495 selected = self.ProjectTree.GetSelection() |
2484 selected = self.ProjectTree.GetSelection() |
2496 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
2485 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2497 wx.CallAfter(self.ProjectTree.EditLabel, selected) |
2486 wx.CallAfter(self.ProjectTree.EditLabel, selected) |
2498 |
2487 |
2499 def OnRemovePouMenu(self, event): |
2488 def OnRemovePouMenu(self, event): |
2500 selected = self.ProjectTree.GetSelection() |
2489 selected = self.ProjectTree.GetSelection() |
2501 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
2490 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2502 name = self.ProjectTree.GetItemText(selected) |
2491 name = self.ProjectTree.GetItemText(selected) |
2503 if not self.Controler.PouIsUsed(name): |
2492 if not self.Controler.PouIsUsed(name): |
2504 self.Controler.ProjectRemovePou(name) |
2493 self.Controler.ProjectRemovePou(name) |
2505 tagname = self.Controler.ComputePouName(name) |
2494 tagname = self.Controler.ComputePouName(name) |
2506 idx = self.IsOpened(tagname) |
2495 idx = self.IsOpened(tagname) |
2510 else: |
2499 else: |
2511 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
2500 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
2512 |
2501 |
2513 def OnRemoveTransitionMenu(self, event): |
2502 def OnRemoveTransitionMenu(self, event): |
2514 selected = self.ProjectTree.GetSelection() |
2503 selected = self.ProjectTree.GetSelection() |
2515 if self.ProjectTree.GetPyData(selected) == ITEM_TRANSITION: |
2504 item_infos = self.ProjectTree.GetPyData(selected) |
|
2505 if item_infos["type"] == ITEM_TRANSITION: |
2516 transition = self.ProjectTree.GetItemText(selected) |
2506 transition = self.ProjectTree.GetItemText(selected) |
2517 item = self.ProjectTree.GetItemParent(selected) |
2507 pou_name = item_infos["tagname"].split("::")[1] |
2518 item_type = self.ProjectTree.GetPyData(item) |
|
2519 while item_type != ITEM_POU: |
|
2520 item = self.ProjectTree.GetItemParent(item) |
|
2521 item_type = self.ProjectTree.GetPyData(item) |
|
2522 pou_name = self.ProjectTree.GetItemText(item) |
|
2523 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
2508 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
2524 tagname = self.Controler.ComputePouTransitionName(pou_name, transition) |
2509 tagname = self.Controler.ComputePouTransitionName(pou_name, transition) |
2525 idx = self.IsOpened(tagname) |
2510 idx = self.IsOpened(tagname) |
2526 if idx is not None: |
2511 if idx is not None: |
2527 self.TabsOpened.DeletePage(idx) |
2512 self.TabsOpened.DeletePage(idx) |
2528 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2513 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2529 |
2514 |
2530 def OnRemoveActionMenu(self, event): |
2515 def OnRemoveActionMenu(self, event): |
2531 selected = self.ProjectTree.GetSelection() |
2516 selected = self.ProjectTree.GetSelection() |
2532 if self.ProjectTree.GetPyData(selected) == ITEM_ACTION: |
2517 item_infos = self.ProjectTree.GetPyData(selected) |
|
2518 if item_infos["type"] == ITEM_ACTION: |
2533 action = self.ProjectTree.GetItemText(selected) |
2519 action = self.ProjectTree.GetItemText(selected) |
2534 item = self.ProjectTree.GetItemParent(selected) |
2520 pou_name = item_infos["tagname"].split("::")[1] |
2535 item_type = self.ProjectTree.GetPyData(item) |
|
2536 while item_type != ITEM_POU: |
|
2537 item = self.ProjectTree.GetItemParent(item) |
|
2538 item_type = self.ProjectTree.GetPyData(item) |
|
2539 pou_name = self.ProjectTree.GetItemText(item) |
|
2540 self.Controler.ProjectRemovePouAction(pou_name, action) |
2521 self.Controler.ProjectRemovePouAction(pou_name, action) |
2541 tagname = self.Controler.ComputePouActionName(pou_name, action) |
2522 tagname = self.Controler.ComputePouActionName(pou_name, action) |
2542 idx = self.IsOpened(tagname) |
2523 idx = self.IsOpened(tagname) |
2543 if idx is not None: |
2524 if idx is not None: |
2544 self.TabsOpened.DeletePage(idx) |
2525 self.TabsOpened.DeletePage(idx) |
2545 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2526 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2546 |
2527 |
2547 def OnRemoveConfigurationMenu(self, event): |
2528 def OnRemoveConfigurationMenu(self, event): |
2548 selected = self.ProjectTree.GetSelection() |
2529 selected = self.ProjectTree.GetSelection() |
2549 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
2530 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_CONFIGURATION: |
2550 name = self.ProjectTree.GetItemText(selected) |
2531 name = self.ProjectTree.GetItemText(selected) |
2551 self.Controler.ProjectRemoveConfiguration(name) |
2532 self.Controler.ProjectRemoveConfiguration(name) |
2552 tagname = self.Controler.ComputeConfigurationName(name) |
2533 tagname = self.Controler.ComputeConfigurationName(name) |
2553 idx = self.IsOpened(tagname) |
2534 idx = self.IsOpened(tagname) |
2554 if idx is not None: |
2535 if idx is not None: |
2555 self.TabsOpened.DeletePage(idx) |
2536 self.TabsOpened.DeletePage(idx) |
2556 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2537 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL) |
2557 |
2538 |
2558 def OnRemoveResourceMenu(self, event): |
2539 def OnRemoveResourceMenu(self, event): |
2559 selected = self.ProjectTree.GetSelection() |
2540 selected = self.ProjectTree.GetSelection() |
2560 if self.ProjectTree.GetPyData(selected) == ITEM_RESOURCE: |
2541 item_infos = self.ProjectTree.GetPyData(selected) |
|
2542 if item_infos["type"] == ITEM_RESOURCE: |
2561 resource = self.ProjectTree.GetItemText(selected) |
2543 resource = self.ProjectTree.GetItemText(selected) |
2562 item = self.ProjectTree.GetItemParent(selected) |
2544 config_name = item_infos["tagname"].split("::")[1] |
2563 item_type = self.ProjectTree.GetPyData(item) |
|
2564 while item_type != ITEM_CONFIGURATION: |
|
2565 item = self.ProjectTree.GetItemParent(item) |
|
2566 item_type = self.ProjectTree.GetPyData(item) |
|
2567 config_name = self.ProjectTree.GetItemText(item) |
|
2568 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2545 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2569 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
2546 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
2570 idx = self.IsOpened(tagname) |
2547 idx = self.IsOpened(tagname) |
2571 if idx is not None: |
2548 if idx is not None: |
2572 self.TabsOpened.DeletePage(idx) |
2549 self.TabsOpened.DeletePage(idx) |
2709 result = None |
2686 result = None |
2710 |
2687 |
2711 # Open the filepath if defined |
2688 # Open the filepath if defined |
2712 if fileOpen is not None and os.path.isfile(fileOpen): |
2689 if fileOpen is not None and os.path.isfile(fileOpen): |
2713 # Create a new controller |
2690 # Create a new controller |
2714 self.Controler = PLCControler() |
2691 controler = PLCControler() |
2715 result = self.Controler.OpenXMLFile(fileOpen) |
2692 result = controler.OpenXMLFile(fileOpen) |
2716 if result is None: |
2693 if result is None: |
2717 self.LibraryPanel.SetControler(self.Controler) |
2694 self.Controler = controler |
2718 self.PouInstanceVariablesPanel.SetController(self.Controler) |
2695 self.LibraryPanel.SetControler(controler) |
|
2696 self.ProjectTree.Enable(True) |
|
2697 self.PouInstanceVariablesPanel.SetController(controler) |
2719 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2698 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2720 |
2699 |
2721 # Define PLCOpenEditor icon |
2700 # Define PLCOpenEditor icon |
2722 self.SetIcon(wx.Icon(os.path.join(CWD,"Images", "poe.ico"),wx.BITMAP_TYPE_ICO)) |
2701 self.SetIcon(wx.Icon(os.path.join(CWD,"Images", "poe.ico"),wx.BITMAP_TYPE_ICO)) |
2723 |
2702 |
2824 dialog = wx.FileDialog(self, _("Choose a file"), directory, "", _("PLCOpen files (*.xml)|*.xml|All files|*.*"), wx.OPEN) |
2803 dialog = wx.FileDialog(self, _("Choose a file"), directory, "", _("PLCOpen files (*.xml)|*.xml|All files|*.*"), wx.OPEN) |
2825 if dialog.ShowModal() == wx.ID_OK: |
2804 if dialog.ShowModal() == wx.ID_OK: |
2826 filepath = dialog.GetPath() |
2805 filepath = dialog.GetPath() |
2827 if os.path.isfile(filepath): |
2806 if os.path.isfile(filepath): |
2828 self.ResetView() |
2807 self.ResetView() |
2829 self.Controler = PLCControler() |
2808 controler = PLCControler() |
2830 result = self.Controler.OpenXMLFile(filepath) |
2809 result = controler.OpenXMLFile(filepath) |
2831 if result is None: |
2810 if result is None: |
2832 self.LibraryPanel.SetControler(self.Controler) |
2811 self.Controler = controler |
2833 self.PouInstanceVariablesPanel.SetController(self.Controler) |
2812 self.LibraryPanel.SetControler(controler) |
|
2813 self.ProjectTree.Enable(True) |
|
2814 self.PouInstanceVariablesPanel.SetController(controler) |
2834 self.LoadProjectOrganization() |
2815 self.LoadProjectOrganization() |
2835 self._Refresh(PROJECTTREE, LIBRARYTREE) |
2816 self._Refresh(PROJECTTREE, LIBRARYTREE) |
2836 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) |
2817 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) |
2837 dialog.Destroy() |
2818 dialog.Destroy() |
2838 |
2819 |