IDEFrame.py
changeset 1948 b9a3f771aaab
parent 1884 48bd91d7a0ae
child 1978 526013d2d462
equal deleted inserted replaced
1947:7c2cd9d33070 1948:b9a3f771aaab
    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