PLCOpenEditor.py
changeset 350 f7958989e055
parent 347 7affe341d37f
child 352 5cd60f7e510c
equal deleted inserted replaced
349:96cc6179b918 350:f7958989e055
    65 ] = [wx.NewId() for _init_ctrls in range(17)]
    65 ] = [wx.NewId() for _init_ctrls in range(17)]
    66 
    66 
    67 [ID_PLCOPENEDITORFILEMENUGENERATE, 
    67 [ID_PLCOPENEDITORFILEMENUGENERATE, 
    68 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)]
    68 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)]
    69 
    69 
    70 [ID_PLCOPENEDITOREDITMENUADDDATATYPE, ID_PLCOPENEDITOREDITMENUADDFUNCTION,
    70 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, 
    71  ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, ID_PLCOPENEDITOREDITMENUADDPROGRAM,
    71  ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, 
    72  ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, 
    72  ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, 
    73 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(5)]
    73 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(6)]
    74 
    74 
    75 
    75 
    76 #-------------------------------------------------------------------------------
    76 #-------------------------------------------------------------------------------
    77 #                            ToolBars definitions
    77 #                            ToolBars definitions
    78 #-------------------------------------------------------------------------------
    78 #-------------------------------------------------------------------------------
   257     def _init_coll_EditMenu_Items(self, parent):
   257     def _init_coll_EditMenu_Items(self, parent):
   258         AppendMenu(parent, help='', id=wx.ID_UNDO,
   258         AppendMenu(parent, help='', id=wx.ID_UNDO,
   259               kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
   259               kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
   260         AppendMenu(parent, help='', id=wx.ID_REDO,
   260         AppendMenu(parent, help='', id=wx.ID_REDO,
   261               kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
   261               kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
       
   262         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
       
   263               kind=wx.ITEM_CHECK, text=u'Enable Undo/Redo')
   262         parent.AppendSeparator()
   264         parent.AppendSeparator()
   263         AppendMenu(parent, help='', id=wx.ID_CUT,
   265         AppendMenu(parent, help='', id=wx.ID_CUT,
   264               kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
   266               kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
   265         AppendMenu(parent, help='', id=wx.ID_COPY,
   267         AppendMenu(parent, help='', id=wx.ID_COPY,
   266               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   268               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   283               kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A')
   285               kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A')
   284         AppendMenu(parent, help='', id=wx.ID_DELETE,
   286         AppendMenu(parent, help='', id=wx.ID_DELETE,
   285               kind=wx.ITEM_NORMAL, text=u'Delete')
   287               kind=wx.ITEM_NORMAL, text=u'Delete')
   286         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   288         self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
   287         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
   289         self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
       
   290         self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO)
   288         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   291         self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
   289         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   292         self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
   290         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   293         self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
   291         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   294         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   292               id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
   295               id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
  1055 #                            Edit Menu Functions
  1058 #                            Edit Menu Functions
  1056 #-------------------------------------------------------------------------------
  1059 #-------------------------------------------------------------------------------
  1057 
  1060 
  1058     def RefreshEditMenu(self):
  1061     def RefreshEditMenu(self):
  1059         if not self.Debug:
  1062         if not self.Debug:
       
  1063             self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, 
       
  1064                                 self.Controler.IsProjectBufferEnabled())
  1060             if self.Controler.HasOpenedProject():
  1065             if self.Controler.HasOpenedProject():
  1061                 undo, redo = self.Controler.GetBufferState()
  1066                 undo, redo = self.Controler.GetBufferState()
  1062                 self.EditMenu.Enable(wx.ID_UNDO, undo)
  1067                 self.EditMenu.Enable(wx.ID_UNDO, undo)
  1063                 self.EditMenu.Enable(wx.ID_REDO, redo)
  1068                 self.EditMenu.Enable(wx.ID_REDO, redo)
  1064                 self.EditMenu.Enable(wx.ID_ADD, True)
  1069                 self.EditMenu.Enable(wx.ID_ADD, True)
  1093         for idx in idxs:
  1098         for idx in idxs:
  1094             tagname = self.TabsOpened.GetPage(idx).GetTagName()
  1099             tagname = self.TabsOpened.GetPage(idx).GetTagName()
  1095             if self.Controler.GetEditedElement(tagname, self.Debug) is None:
  1100             if self.Controler.GetEditedElement(tagname, self.Debug) is None:
  1096                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
  1101                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
  1097                 self.TabsOpened.DeletePage(idx)
  1102                 self.TabsOpened.DeletePage(idx)
  1098         selected = self.TabsOpened.GetSelection()        
  1103         selected = self.TabsOpened.GetSelection()
  1099         if selected != -1:
  1104         if selected != -1:
  1100             window = self.TabsOpened.GetPage(selected)
  1105             window = self.TabsOpened.GetPage(selected)
  1101             window.RefreshView()
  1106             window.RefreshView()
  1102             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
  1107             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
  1103         self.RefreshTitle()
  1108         self.RefreshTitle()
  1128         self.RefreshInstancesTree()
  1133         self.RefreshInstancesTree()
  1129         self.RefreshLibraryTree()
  1134         self.RefreshLibraryTree()
  1130         self.RefreshScaling()
  1135         self.RefreshScaling()
  1131         event.Skip()
  1136         event.Skip()
  1132 
  1137 
       
  1138     def OnEnableUndoRedoMenu(self, event):
       
  1139         self.Controler.EnableProjectBuffer(event.IsChecked())
       
  1140         self.RefreshEditMenu()
       
  1141         event.Skip()
       
  1142 
  1133     def OnCutMenu(self, event):
  1143     def OnCutMenu(self, event):
  1134         control = self.FindFocus()
  1144         control = self.FindFocus()
  1135         if isinstance(control, (Viewer, TextViewer)):
  1145         if isinstance(control, (Viewer, TextViewer)):
  1136             control.Cut()
  1146             control.Cut()
  1137         elif isinstance(control, wx.TextCtrl):
  1147         elif isinstance(control, wx.TextCtrl):
  1175                     name = self.TypesTree.GetItemText(selected)
  1185                     name = self.TypesTree.GetItemText(selected)
  1176                     if not self.Controler.DataTypeIsUsed(name, self.Debug):
  1186                     if not self.Controler.DataTypeIsUsed(name, self.Debug):
  1177                         self.Controler.ProjectRemoveDataType(name)
  1187                         self.Controler.ProjectRemoveDataType(name)
  1178                         tagname = self.Controler.ComputeDataTypeName(name)
  1188                         tagname = self.Controler.ComputeDataTypeName(name)
  1179                     else:
  1189                     else:
  1180                         message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1190                         message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR)
  1181                         message.ShowModal()
  1191                         message.ShowModal()
  1182                         message.Destroy()
  1192                         message.Destroy()
  1183                 elif type == ITEM_POU:
  1193                 elif type == ITEM_POU:
  1184                     name = self.TypesTree.GetItemText(selected)
  1194                     name = self.TypesTree.GetItemText(selected)
  1185                     if not self.Controler.PouIsUsed(name, self.Debug):
  1195                     if not self.Controler.PouIsUsed(name, self.Debug):
  1186                         self.Controler.ProjectRemovePou(name)
  1196                         self.Controler.ProjectRemovePou(name)
  1187                         tagname = self.Controler.ComputePouName(name)
  1197                         tagname = self.Controler.ComputePouName(name)
  1188                     else:
  1198                     else:
  1189                         message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1199                         message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR)
  1190                         message.ShowModal()
  1200                         message.ShowModal()
  1191                         message.Destroy()
  1201                         message.Destroy()
  1192                 elif type in [ITEM_TRANSITION, ITEM_ACTION]:
  1202                 elif type in [ITEM_TRANSITION, ITEM_ACTION]:
  1193                     item = self.TypesTree.GetItemParent(selected)
  1203                     item = self.TypesTree.GetItemParent(selected)
  1194                     item_type = self.TypesTree.GetPyData(item)
  1204                     item_type = self.TypesTree.GetPyData(item)
  1601                 item = event.GetItem()
  1611                 item = event.GetItem()
  1602                 wx.CallAfter(self.TypesTree.EditLabel, item)
  1612                 wx.CallAfter(self.TypesTree.EditLabel, item)
  1603                 event.Veto()
  1613                 event.Veto()
  1604             else:
  1614             else:
  1605                 wx.CallAfter(self.RefreshTypesTree)
  1615                 wx.CallAfter(self.RefreshTypesTree)
  1606                 selected = self.TabsOpened.GetSelection()
  1616                 self.RefreshEditor()
  1607                 if selected != -1:
  1617                 self.RefreshFileMenu()
  1608                     self.TabsOpened.GetPage(selected).RefreshView()
  1618                 self.RefreshEditMenu()
       
  1619                 self.RefreshTitle()
  1609                 event.Skip()
  1620                 event.Skip()
  1610     
  1621     
  1611     def OnTypesTreeItemActivated(self, event):
  1622     def OnTypesTreeItemActivated(self, event):
  1612         selected = event.GetItem()
  1623         selected = event.GetItem()
  1613         name = self.TypesTree.GetItemText(selected)
  1624         name = self.TypesTree.GetItemText(selected)
  1745                     self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1756                     self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1746             for i in xrange(self.TabsOpened.GetPageCount()):
  1757             for i in xrange(self.TabsOpened.GetPageCount()):
  1747                 window = self.TabsOpened.GetPage(i)
  1758                 window = self.TabsOpened.GetPage(i)
  1748                 if window.GetTagName() == tagname:
  1759                 if window.GetTagName() == tagname:
  1749                     self.TabsOpened.SetSelection(i)
  1760                     self.TabsOpened.SetSelection(i)
  1750                     window.RefreshView()
       
  1751                     window.SetFocus()
  1761                     window.SetFocus()
  1752                     self.RefreshPageTitles()
  1762                     self.RefreshPageTitles()
  1753                     self.RefreshFileMenu()
  1763                     self.RefreshFileMenu()
  1754                     self.RefreshEditMenu()
  1764                     self.RefreshEditMenu()
  1755                     self.RefreshToolBar()
  1765                     self.RefreshToolBar()
  1938                 old_selected = self.TabsOpened.GetSelection()
  1948                 old_selected = self.TabsOpened.GetSelection()
  1939                 if old_selected != openedidx:
  1949                 if old_selected != openedidx:
  1940                     if old_selected >= 0:
  1950                     if old_selected >= 0:
  1941                         self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1951                         self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1942                     self.TabsOpened.SetSelection(openedidx)
  1952                     self.TabsOpened.SetSelection(openedidx)
  1943                 self.TabsOpened.GetPage(openedidx).RefreshView()
       
  1944             elif selected_infos[1] is not None:
  1953             elif selected_infos[1] is not None:
  1945                 bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug)
  1954                 bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug)
  1946                 if bodytype == "FBD":
  1955                 if bodytype == "FBD":
  1947                     new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
  1956                     new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
  1948                     new_window.RefreshScaling(False)
  1957                     new_window.RefreshScaling(False)
  1958                     if bodytype == "IL":
  1967                     if bodytype == "IL":
  1959                         new_window.SetKeywords(IL_KEYWORDS)
  1968                         new_window.SetKeywords(IL_KEYWORDS)
  1960                     else:
  1969                     else:
  1961                         new_window.SetKeywords(ST_KEYWORDS)
  1970                         new_window.SetKeywords(ST_KEYWORDS)
  1962                 self.AddPage(new_window, "")
  1971                 self.AddPage(new_window, "")
  1963                 new_window.RefreshView()
       
  1964                 new_window.SetFocus()
  1972                 new_window.SetFocus()
  1965                 self.RefreshPageTitles()
  1973                 self.RefreshPageTitles()
  1966         if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE:
  1974         if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE:
  1967             var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (")
  1975             var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (")
  1968             var_type = var_type.split(")")[0]
  1976             var_type = var_type.split(")")[0]
  2349             dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
  2357             dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
  2350             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug))
  2358             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug))
  2351             if dialog.ShowModal() == wx.ID_OK:
  2359             if dialog.ShowModal() == wx.ID_OK:
  2352                 values = dialog.GetValues()
  2360                 values = dialog.GetValues()
  2353                 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
  2361                 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
  2354                 selected = self.TabsOpened.GetSelection()
       
  2355                 if selected != -1:
       
  2356                     self.TabsOpened.GetPage(selected).RefreshView()
       
  2357                 self.RefreshTitle()
  2362                 self.RefreshTitle()
  2358                 self.RefreshEditMenu()
  2363                 self.RefreshEditMenu()
  2359                 self.RefreshTypesTree()
  2364                 self.RefreshTypesTree()
  2360                 self.RefreshLibraryTree()
  2365                 self.RefreshLibraryTree()
  2361             dialog.Destroy()
  2366             dialog.Destroy()
  2466                 self.RefreshTitle()
  2471                 self.RefreshTitle()
  2467                 self.RefreshEditMenu()
  2472                 self.RefreshEditMenu()
  2468                 self.RefreshTypesTree()
  2473                 self.RefreshTypesTree()
  2469                 self.RefreshToolBar()
  2474                 self.RefreshToolBar()
  2470             else:
  2475             else:
  2471                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  2476                 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR)
  2472                 message.ShowModal()
  2477                 message.ShowModal()
  2473                 message.Destroy()
  2478                 message.Destroy()
  2474         event.Skip()
  2479         event.Skip()
  2475 
  2480 
  2476     def OnRenamePouMenu(self, event):
  2481     def OnRenamePouMenu(self, event):
  2495                 self.RefreshTypesTree()
  2500                 self.RefreshTypesTree()
  2496                 self.RefreshInstancesTree()
  2501                 self.RefreshInstancesTree()
  2497                 self.RefreshLibraryTree()
  2502                 self.RefreshLibraryTree()
  2498                 self.RefreshToolBar()
  2503                 self.RefreshToolBar()
  2499             else:
  2504             else:
  2500                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  2505                 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR)
  2501                 message.ShowModal()
  2506                 message.ShowModal()
  2502                 message.Destroy()
  2507                 message.Destroy()
  2503         event.Skip()
  2508         event.Skip()
  2504 
  2509 
  2505     def OnRemoveTransitionMenu(self, event):
  2510     def OnRemoveTransitionMenu(self, event):