PLCOpenEditor.py
changeset 331 9106d66bd204
parent 324 9f240641e3f0
child 332 555124c752ec
equal deleted inserted replaced
330:d803ba077da0 331:9106d66bd204
   281                   kind=wx.ITEM_NORMAL, text=u'Function Block')
   281                   kind=wx.ITEM_NORMAL, text=u'Function Block')
   282             AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
   282             AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
   283                   kind=wx.ITEM_NORMAL, text=u'Program')
   283                   kind=wx.ITEM_NORMAL, text=u'Program')
   284             AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
   284             AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
   285                   kind=wx.ITEM_NORMAL, text=u'Configuration')
   285                   kind=wx.ITEM_NORMAL, text=u'Configuration')
       
   286             AppendMenu(parent, help='', id=wx.ID_SELECTALL,
       
   287                   kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A')
   286             AppendMenu(parent, help='', id=wx.ID_DELETE,
   288             AppendMenu(parent, help='', id=wx.ID_DELETE,
   287                   kind=wx.ITEM_NORMAL, text=u'Delete')
   289                   kind=wx.ITEM_NORMAL, text=u'Delete')
   288         self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
   290         self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
   289         if not self.Debug:
   291         if not self.Debug:
   290             if not self.ModeSolo:
   292             if not self.ModeSolo:
   302                   id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
   304                   id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
   303             self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
   305             self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
   304                   id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   306                   id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
   305             self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   307             self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   306                   id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
   308                   id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
       
   309             self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL)
   307             self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
   310             self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
   308 
   311 
   309     def _init_coll_HelpMenu_Items(self, parent):
   312     def _init_coll_HelpMenu_Items(self, parent):
   310         AppendMenu(parent, help='', id=wx.ID_HELP, 
   313         AppendMenu(parent, help='', id=wx.ID_HELP, 
   311             kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   314             kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   660         if self.Controler.HasOpenedProject() > 0:
   663         if self.Controler.HasOpenedProject() > 0:
   661             self.SetTitle("%s - %s"%(name, self.Controler.GetFilename()))
   664             self.SetTitle("%s - %s"%(name, self.Controler.GetFilename()))
   662         else:
   665         else:
   663             self.SetTitle(name)
   666             self.SetTitle(name)
   664 
   667 
       
   668     def RefreshScaling(self):
       
   669         for i in xrange(self.TabsOpened.GetPageCount()):
       
   670             editor = self.TabsOpened.GetPage(i)
       
   671             editor.RefreshScaling()
       
   672 
   665     def ShowProperties(self):
   673     def ShowProperties(self):
   666         old_values = self.Controler.GetProjectProperties(self.Debug)
   674         old_values = self.Controler.GetProjectProperties(self.Debug)
   667         dialog = ProjectDialog(self)
   675         dialog = ProjectDialog(self)
   668         dialog.SetValues(old_values)
   676         dialog.SetValues(old_values)
   669         if dialog.ShowModal() == wx.ID_OK:
   677         if dialog.ShowModal() == wx.ID_OK:
   673                 self.Controler.SetProjectProperties(None, new_values)
   681                 self.Controler.SetProjectProperties(None, new_values)
   674                 self.RefreshTitle()
   682                 self.RefreshTitle()
   675                 self.RefreshFileMenu()
   683                 self.RefreshFileMenu()
   676                 self.RefreshEditMenu()
   684                 self.RefreshEditMenu()
   677                 self.RefreshTypesTree()
   685                 self.RefreshTypesTree()
   678                 for i in xrange(self.TabsOpened.GetPageCount()):
   686                 self.RefreshScaling()
   679                     editor = self.TabsOpened.GetPage(i)
       
   680                     editor.RefreshScaling()
       
   681         dialog.Destroy()
   687         dialog.Destroy()
   682 
   688 
   683     def OnCloseFrame(self, event):
   689     def OnCloseFrame(self, event):
   684         if not self.ModeSolo and getattr(self, "_onclose", None) is not None:
   690         if not self.ModeSolo and getattr(self, "_onclose", None) is not None:
   685             self.AUIManager.UnInit()
   691             self.AUIManager.UnInit()
  1000                 undo, redo = self.Controler.GetBufferState()
  1006                 undo, redo = self.Controler.GetBufferState()
  1001                 self.EditMenu.Enable(wx.ID_UNDO, undo)
  1007                 self.EditMenu.Enable(wx.ID_UNDO, undo)
  1002                 self.EditMenu.Enable(wx.ID_REDO, redo)
  1008                 self.EditMenu.Enable(wx.ID_REDO, redo)
  1003                 self.EditMenu.Enable(wx.ID_ADD, True)
  1009                 self.EditMenu.Enable(wx.ID_ADD, True)
  1004                 self.EditMenu.Enable(wx.ID_DELETE, True)
  1010                 self.EditMenu.Enable(wx.ID_DELETE, True)
       
  1011                 if self.TabsOpened.GetPageCount() > 0:
       
  1012                     self.EditMenu.Enable(wx.ID_CUT, True)
       
  1013                     self.EditMenu.Enable(wx.ID_COPY, True)
       
  1014                     if self.CopyBuffer is not None:
       
  1015                         self.EditMenu.Enable(wx.ID_PASTE, True)
       
  1016                     else:
       
  1017                         self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1018                     self.EditMenu.Enable(wx.ID_SELECTALL, True)
       
  1019                 else:
       
  1020                     self.EditMenu.Enable(wx.ID_CUT, False)
       
  1021                     self.EditMenu.Enable(wx.ID_COPY, False)
       
  1022                     self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1023                     self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1005         else:
  1024         else:
  1006             self.EditMenu.Enable(wx.ID_REFRESH, False)
  1025             self.EditMenu.Enable(wx.ID_REFRESH, False)
  1007             if not self.Debug:
  1026             if not self.Debug:
  1008                 self.EditMenu.Enable(wx.ID_UNDO, False)
  1027                 self.EditMenu.Enable(wx.ID_UNDO, False)
  1009                 self.EditMenu.Enable(wx.ID_REDO, False)
  1028                 self.EditMenu.Enable(wx.ID_REDO, False)
       
  1029                 self.EditMenu.Enable(wx.ID_CUT, False)
       
  1030                 self.EditMenu.Enable(wx.ID_COPY, False)
       
  1031                 self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1032                 self.EditMenu.Enable(wx.ID_SELECTALL, False)
  1010                 self.EditMenu.Enable(wx.ID_ADD, False)
  1033                 self.EditMenu.Enable(wx.ID_ADD, False)
  1011                 self.EditMenu.Enable(wx.ID_DELETE, False)
  1034                 self.EditMenu.Enable(wx.ID_DELETE, False)
  1012         if not self.Debug:
  1035     
  1013             self.EditMenu.Enable(wx.ID_CUT, True)
       
  1014             self.EditMenu.Enable(wx.ID_COPY, True)
       
  1015             if self.CopyBuffer is not None:
       
  1016                 self.EditMenu.Enable(wx.ID_PASTE, True)
       
  1017             else:
       
  1018                 self.EditMenu.Enable(wx.ID_PASTE, False)
       
  1019 
       
  1020     def OnRefreshMenu(self, event):
  1036     def OnRefreshMenu(self, event):
  1021         selected = self.TabsOpened.GetSelection()
  1037         selected = self.TabsOpened.GetSelection()
  1022         if selected != -1:
  1038         if selected != -1:
  1023             window = self.TabsOpened.GetPage(selected)
  1039             window = self.TabsOpened.GetPage(selected)
  1024             window.RefreshView()
  1040             window.RefreshView()
  1047         self.RefreshTitle()
  1063         self.RefreshTitle()
  1048         self.RefreshEditMenu()
  1064         self.RefreshEditMenu()
  1049         self.RefreshTypesTree()
  1065         self.RefreshTypesTree()
  1050         self.RefreshInstancesTree()
  1066         self.RefreshInstancesTree()
  1051         self.RefreshLibraryTree()
  1067         self.RefreshLibraryTree()
       
  1068         self.RefreshScaling()
  1052         event.Skip()
  1069         event.Skip()
  1053     
  1070     
  1054     def OnRedoMenu(self, event):
  1071     def OnRedoMenu(self, event):
  1055         self.Controler.LoadNext()
  1072         self.Controler.LoadNext()
  1056         idxs = range(self.TabsOpened.GetPageCount())
  1073         idxs = range(self.TabsOpened.GetPageCount())
  1068         self.RefreshTitle()
  1085         self.RefreshTitle()
  1069         self.RefreshEditMenu()
  1086         self.RefreshEditMenu()
  1070         self.RefreshTypesTree()
  1087         self.RefreshTypesTree()
  1071         self.RefreshInstancesTree()
  1088         self.RefreshInstancesTree()
  1072         self.RefreshLibraryTree()
  1089         self.RefreshLibraryTree()
       
  1090         self.RefreshScaling()
  1073         event.Skip()
  1091         event.Skip()
  1074 
  1092 
  1075     def OnCutMenu(self, event):
  1093     def OnCutMenu(self, event):
  1076         control = self.FindFocus()
  1094         control = self.FindFocus()
  1077         if isinstance(control, (Viewer, TextViewer)):
  1095         if isinstance(control, (Viewer, TextViewer)):
  1092         control = self.FindFocus()
  1110         control = self.FindFocus()
  1093         if isinstance(control, (Viewer, TextViewer)):
  1111         if isinstance(control, (Viewer, TextViewer)):
  1094             control.Paste()
  1112             control.Paste()
  1095         elif isinstance(control, wx.TextCtrl):
  1113         elif isinstance(control, wx.TextCtrl):
  1096             control.ProcessEvent(event)
  1114             control.ProcessEvent(event)
       
  1115         event.Skip()
       
  1116     
       
  1117     def OnSelectAllMenu(self, event):
       
  1118         selected = self.TabsOpened.GetSelection()        
       
  1119         if selected != -1:
       
  1120             window = self.TabsOpened.GetPage(selected)
       
  1121             window.SelectAll()
  1097         event.Skip()
  1122         event.Skip()
  1098     
  1123     
  1099     def OnDeleteMenu(self, event):
  1124     def OnDeleteMenu(self, event):
  1100         window = self.FindFocus()
  1125         window = self.FindFocus()
  1101         if window == self.TypesTree:
  1126         if window == self.TypesTree:
  1240             if self.Debug:
  1265             if self.Debug:
  1241                 self.TabsOpened.SetPageText(idx, window.GetInstancePath())
  1266                 self.TabsOpened.SetPageText(idx, window.GetInstancePath())
  1242             else:
  1267             else:
  1243                 self.TabsOpened.SetPageText(idx, "-".join(words[1:]))
  1268                 self.TabsOpened.SetPageText(idx, "-".join(words[1:]))
  1244 
  1269 
       
  1270     def GetTabsOpenedDClickFunction(self, window):
       
  1271         def OnTabsOpenedDClick(event):
       
  1272             pane = self.AUIManager.GetPane(self.TabsOpened)
       
  1273             if pane.IsMaximized():
       
  1274                 self.AUIManager.RestorePane(pane)
       
  1275             else:
       
  1276                 self.AUIManager.MaximizePane(pane)
       
  1277             self.AUIManager.Update()
       
  1278             event.Skip()
       
  1279         return OnTabsOpenedDClick
  1245 
  1280 
  1246 #-------------------------------------------------------------------------------
  1281 #-------------------------------------------------------------------------------
  1247 #                         Types Tree Management Functions
  1282 #                         Types Tree Management Functions
  1248 #-------------------------------------------------------------------------------
  1283 #-------------------------------------------------------------------------------
  1249 
  1284 
  1602                 words = tagname.split("::")
  1637                 words = tagname.split("::")
  1603                 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1], self.Debug))
  1638                 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1], self.Debug))
  1604             elif elementtype == ITEM_DATATYPE:
  1639             elif elementtype == ITEM_DATATYPE:
  1605                 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler)
  1640                 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler)
  1606                 self.TabsOpened.AddPage(new_window, "")
  1641                 self.TabsOpened.AddPage(new_window, "")
       
  1642             if wx.VERSION >= (2, 6, 0):
       
  1643                 children = self.TabsOpened.GetChildren()
       
  1644                 children[len(children) - 1].Bind(wx.EVT_LEFT_DCLICK, self.GetTabsOpenedDClickFunction(new_window))  
  1607             self.VariablePanelIndexer.ChangeVariablePanel(tagname)
  1645             self.VariablePanelIndexer.ChangeVariablePanel(tagname)
  1608             openedidx = self.IsOpened(tagname)
  1646             openedidx = self.IsOpened(tagname)
  1609             old_selected = self.TabsOpened.GetSelection()
  1647             old_selected = self.TabsOpened.GetSelection()
  1610             if old_selected != openedidx:
  1648             if old_selected != openedidx:
  1611                 if old_selected >= 0:
  1649                 if old_selected >= 0:
  3916             else:
  3954             else:
  3917                 event(self, function)
  3955                 event(self, function)
  3918     
  3956     
  3919     def _init_coll_MainSizer_Items(self, parent):
  3957     def _init_coll_MainSizer_Items(self, parent):
  3920         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
  3958         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
  3921         parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wx.GROW)
  3959         parent.AddSizer(self.ControlPanelSizer, 0, border=5, flag=wx.GROW|wx.ALL)
  3922     
  3960     
  3923     def _init_coll_MainSizer_Growables(self, parent):
  3961     def _init_coll_MainSizer_Growables(self, parent):
  3924         parent.AddGrowableCol(0)
  3962         parent.AddGrowableCol(0)
  3925         parent.AddGrowableRow(0)
  3963         parent.AddGrowableRow(0)
  3926     
  3964     
  3952         parent.AddGrowableCol(3)
  3990         parent.AddGrowableCol(3)
  3953         parent.AddGrowableRow(0)
  3991         parent.AddGrowableRow(0)
  3954 
  3992 
  3955     def _init_sizers(self):
  3993     def _init_sizers(self):
  3956         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
  3994         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
  3957         self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  3995         self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
  3958         self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5)
  3996         self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5)
  3959         self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
  3997         self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5)
  3960         
  3998         
  3961         self._init_coll_MainSizer_Items(self.MainSizer)
  3999         self._init_coll_MainSizer_Items(self.MainSizer)
  3962         self._init_coll_MainSizer_Growables(self.MainSizer)
  4000         self._init_coll_MainSizer_Growables(self.MainSizer)
  3963         self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer)
  4001         self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer)
  3964         self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer)
  4002         self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer)
  4082             self.ReturnType.Enable(True)
  4120             self.ReturnType.Enable(True)
  4083         else:
  4121         else:
  4084             self.ReturnType.Enable(False)
  4122             self.ReturnType.Enable(False)
  4085             self.staticText1.Hide()
  4123             self.staticText1.Hide()
  4086             self.ReturnType.Hide()
  4124             self.ReturnType.Hide()
  4087         
  4125             
  4088         self.VariablesGrid.SetTable(self.Table)
  4126         self.VariablesGrid.SetTable(self.Table)
  4089         self.VariablesGrid.SetRowLabelSize(0)
  4127         self.VariablesGrid.SetRowLabelSize(0)
  4090         for col in range(self.Table.GetNumberCols()):
  4128         for col in range(self.Table.GetNumberCols()):
  4091             attr = wx.grid.GridCellAttr()
  4129             attr = wx.grid.GridCellAttr()
  4092             attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE)
  4130             attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE)