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) |