166 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS5, |
169 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS5, |
167 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
170 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
168 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS6, |
171 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS6, |
169 kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V') |
172 kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V') |
170 parent.AppendSeparator() |
173 parent.AppendSeparator() |
171 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS8, |
174 addmenu = wx.Menu(title='') |
172 kind=wx.ITEM_NORMAL, text=u'Add Data Type') |
175 parent.AppendMenu(ID_PLCOPENEDITOREDITMENUITEMS8, "Add Element", addmenu) |
173 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS9, |
176 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS9, |
174 kind=wx.ITEM_NORMAL, text=u'Remove Data Type') |
177 kind=wx.ITEM_NORMAL, text=u'Data Type') |
175 parent.AppendSeparator() |
178 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS10, |
176 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS11, |
179 kind=wx.ITEM_NORMAL, text=u'Function') |
177 kind=wx.ITEM_NORMAL, text=u'Add POU') |
180 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS11, |
178 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS12, |
181 kind=wx.ITEM_NORMAL, text=u'Function Block') |
179 kind=wx.ITEM_NORMAL, text=u'Remove POU') |
182 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS12, |
180 parent.AppendSeparator() |
183 kind=wx.ITEM_NORMAL, text=u'Program') |
|
184 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS13, |
|
185 kind=wx.ITEM_NORMAL, text=u'Configuration') |
181 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS14, |
186 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS14, |
182 kind=wx.ITEM_NORMAL, text=u'Add Configuration') |
187 kind=wx.ITEM_NORMAL, text=u'Delete') |
183 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS15, |
|
184 kind=wx.ITEM_NORMAL, text=u'Remove Configuration') |
|
185 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, |
188 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, |
186 id=ID_PLCOPENEDITOREDITMENUITEMS0) |
189 id=ID_PLCOPENEDITOREDITMENUITEMS0) |
187 self.Bind(wx.EVT_MENU, self.OnUndoMenu, |
190 self.Bind(wx.EVT_MENU, self.OnUndoMenu, |
188 id=ID_PLCOPENEDITOREDITMENUITEMS1) |
191 id=ID_PLCOPENEDITOREDITMENUITEMS1) |
189 self.Bind(wx.EVT_MENU, self.OnRedoMenu, |
192 self.Bind(wx.EVT_MENU, self.OnRedoMenu, |
193 self.Bind(wx.EVT_MENU, self.OnCopyMenu, |
196 self.Bind(wx.EVT_MENU, self.OnCopyMenu, |
194 id=ID_PLCOPENEDITOREDITMENUITEMS5) |
197 id=ID_PLCOPENEDITOREDITMENUITEMS5) |
195 self.Bind(wx.EVT_MENU, self.OnPasteMenu, |
198 self.Bind(wx.EVT_MENU, self.OnPasteMenu, |
196 id=ID_PLCOPENEDITOREDITMENUITEMS6) |
199 id=ID_PLCOPENEDITOREDITMENUITEMS6) |
197 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
200 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
198 id=ID_PLCOPENEDITOREDITMENUITEMS8) |
|
199 self.Bind(wx.EVT_MENU, self.OnRemoveDataTypeMenu, |
|
200 id=ID_PLCOPENEDITOREDITMENUITEMS9) |
201 id=ID_PLCOPENEDITOREDITMENUITEMS9) |
201 self.Bind(wx.EVT_MENU, self.OnAddPouMenu, |
202 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
|
203 id=ID_PLCOPENEDITOREDITMENUITEMS10) |
|
204 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
202 id=ID_PLCOPENEDITOREDITMENUITEMS11) |
205 id=ID_PLCOPENEDITOREDITMENUITEMS11) |
203 self.Bind(wx.EVT_MENU, self.OnRemovePouMenu, |
206 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"), |
204 id=ID_PLCOPENEDITOREDITMENUITEMS12) |
207 id=ID_PLCOPENEDITOREDITMENUITEMS12) |
205 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
208 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
|
209 id=ID_PLCOPENEDITOREDITMENUITEMS13) |
|
210 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, |
206 id=ID_PLCOPENEDITOREDITMENUITEMS14) |
211 id=ID_PLCOPENEDITOREDITMENUITEMS14) |
207 self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu, |
|
208 id=ID_PLCOPENEDITOREDITMENUITEMS15) |
|
209 |
212 |
210 def _init_coll_menuBar1_Menus(self, parent): |
213 def _init_coll_menuBar1_Menus(self, parent): |
211 if self.ModeSolo: |
214 if self.ModeSolo: |
212 parent.Append(menu=self.FileMenu, title=u'File') |
215 parent.Append(menu=self.FileMenu, title=u'File') |
213 parent.Append(menu=self.EditMenu, title=u'Edit') |
216 parent.Append(menu=self.EditMenu, title=u'Edit') |
214 parent.Append(menu=self.HelpMenu, title=u'Help') |
217 parent.Append(menu=self.HelpMenu, title=u'Help') |
215 |
|
216 def _init_coll_ConfigMenu_Items(self, parent): |
|
217 AppendMenu(parent, help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS0, |
|
218 kind=wx.ITEM_NORMAL, text=u'Add Resource') |
|
219 AppendMenu(parent, help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS1, |
|
220 kind=wx.ITEM_NORMAL, text=u'Remove Resource') |
|
221 self.Bind(wx.EVT_MENU, self.OnAddResourceMenu, |
|
222 id=ID_PLCOPENEDITORCONFIGMENUITEMS0) |
|
223 self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu, |
|
224 id=ID_PLCOPENEDITORCONFIGMENUITEMS1) |
|
225 |
218 |
226 def _init_coll_HelpMenu_Items(self, parent): |
219 def _init_coll_HelpMenu_Items(self, parent): |
227 AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS0, |
220 AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS0, |
228 kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1') |
221 kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1') |
229 AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS1, |
222 AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS1, |
275 self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, |
268 self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, |
276 id=ID_PLCOPENEDITORFILEMENUITEMS9) |
269 id=ID_PLCOPENEDITORFILEMENUITEMS9) |
277 self.Bind(wx.EVT_MENU, self.OnQuitMenu, |
270 self.Bind(wx.EVT_MENU, self.OnQuitMenu, |
278 id=ID_PLCOPENEDITORFILEMENUITEMS11) |
271 id=ID_PLCOPENEDITORFILEMENUITEMS11) |
279 |
272 |
280 def _init_coll_SFCMenu_Items(self, parent): |
|
281 AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS0, |
|
282 kind=wx.ITEM_NORMAL, text=u'Add Transition') |
|
283 AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS1, |
|
284 kind=wx.ITEM_NORMAL, text=u'Add Action') |
|
285 AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS2, |
|
286 kind=wx.ITEM_NORMAL, text=u'Remove Transition') |
|
287 AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS3, |
|
288 kind=wx.ITEM_NORMAL, text=u'Remove Action') |
|
289 self.Bind(wx.EVT_MENU, self.OnAddPouTransitionMenu, |
|
290 id=ID_PLCOPENEDITORSFCMENUITEMS0) |
|
291 self.Bind(wx.EVT_MENU, self.OnAddPouActionMenu, |
|
292 id=ID_PLCOPENEDITORSFCMENUITEMS1) |
|
293 self.Bind(wx.EVT_MENU, self.OnRemovePouTransitionMenu, |
|
294 id=ID_PLCOPENEDITORSFCMENUITEMS2) |
|
295 self.Bind(wx.EVT_MENU, self.OnRemovePouActionMenu, |
|
296 id=ID_PLCOPENEDITORSFCMENUITEMS3) |
|
297 |
|
298 def _init_utils(self): |
273 def _init_utils(self): |
299 self.menuBar1 = wx.MenuBar() |
274 self.menuBar1 = wx.MenuBar() |
300 |
275 |
301 if self.ModeSolo: |
276 if self.ModeSolo: |
302 self.FileMenu = wx.Menu(title='') |
277 self.FileMenu = wx.Menu(title='') |
303 else: |
278 else: |
304 self.FileMenu = None |
279 self.FileMenu = None |
305 self.EditMenu = wx.Menu(title='') |
280 self.EditMenu = wx.Menu(title='') |
306 self.HelpMenu = wx.Menu(title='') |
281 self.HelpMenu = wx.Menu(title='') |
307 self.SFCMenu = wx.Menu(title='') |
282 |
308 self.ConfigMenu = wx.Menu(title='') |
|
309 |
|
310 self._init_coll_menuBar1_Menus(self.menuBar1) |
283 self._init_coll_menuBar1_Menus(self.menuBar1) |
311 if self.ModeSolo: |
284 if self.ModeSolo: |
312 self._init_coll_FileMenu_Items(self.FileMenu) |
285 self._init_coll_FileMenu_Items(self.FileMenu) |
313 self._init_coll_EditMenu_Items(self.EditMenu) |
286 self._init_coll_EditMenu_Items(self.EditMenu) |
314 self._init_coll_HelpMenu_Items(self.HelpMenu) |
287 self._init_coll_HelpMenu_Items(self.HelpMenu) |
315 self._init_coll_SFCMenu_Items(self.SFCMenu) |
288 |
316 self._init_coll_ConfigMenu_Items(self.ConfigMenu) |
|
317 |
|
318 def _init_ctrls(self, prnt): |
289 def _init_ctrls(self, prnt): |
319 if wx.VERSION >= (2, 8, 0): |
290 if wx.VERSION >= (2, 8, 0): |
320 wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', |
291 wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', |
321 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
292 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
322 style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor') |
293 style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor') |
463 self.RefreshTitle() |
433 self.RefreshTitle() |
464 self.RefreshToolBar() |
434 self.RefreshToolBar() |
465 |
435 |
466 def ResetSelectedItem(self): |
436 def ResetSelectedItem(self): |
467 self.SelectedItem = None |
437 self.SelectedItem = None |
468 |
|
469 def GetPageCount(self): |
|
470 if wx.VERSION >= (2, 8, 0): |
|
471 notebook = self.GetNotebook() |
|
472 if notebook is not None: |
|
473 return notebook.GetPageCount() |
|
474 else: |
|
475 return 0 |
|
476 else: |
|
477 return self.TabsOpened.GetPageCount() |
|
478 |
|
479 def GetPage(self, idx): |
|
480 if wx.VERSION >= (2, 8, 0): |
|
481 notebook = self.GetNotebook() |
|
482 if notebook is not None: |
|
483 return notebook.GetPage(idx).GetViewer() |
|
484 else: |
|
485 return None |
|
486 else: |
|
487 return self.TabsOpened.GetPage(idx) |
|
488 |
|
489 def GetPageSelection(self): |
|
490 if wx.VERSION >= (2, 8, 0): |
|
491 notebook = self.GetNotebook() |
|
492 if notebook is not None: |
|
493 return notebook.GetSelection() |
|
494 else: |
|
495 return -1 |
|
496 else: |
|
497 return self.TabsOpened.GetSelection() |
|
498 |
|
499 def SetPageSelection(self, idx): |
|
500 if wx.VERSION >= (2, 8, 0): |
|
501 notebook = self.GetNotebook() |
|
502 if notebook is not None: |
|
503 notebook.SetSelection(idx) |
|
504 else: |
|
505 self.TabsOpened.SetSelection(idx) |
|
506 |
|
507 def DeletePage(self, idx): |
|
508 if wx.VERSION >= (2, 8, 0): |
|
509 notebook = self.GetNotebook() |
|
510 if notebook is not None: |
|
511 notebook.DeletePage(idx) |
|
512 else: |
|
513 self.TabsOpened.DeletePage(idx) |
|
514 |
|
515 def DeleteAllPages(self): |
|
516 if wx.VERSION >= (2, 8, 0): |
|
517 notebook = self.GetNotebook() |
|
518 if notebook is not None: |
|
519 for idx in xrange(notebook.GetPageCount()): |
|
520 notebook.DeletePage(0) |
|
521 else: |
|
522 self.TabsOpened.DeleteAllPages() |
|
523 |
|
524 def SetPageText(self, idx, text): |
|
525 if wx.VERSION >= (2, 8, 0): |
|
526 notebook = self.GetNotebook() |
|
527 if notebook is not None: |
|
528 return notebook.SetPageText(idx, text) |
|
529 else: |
|
530 return self.TabsOpened.SetPageText(idx, text) |
|
531 |
|
532 def GetPageText(self, idx): |
|
533 if wx.VERSION >= (2, 8, 0): |
|
534 notebook = self.GetNotebook() |
|
535 if notebook is not None: |
|
536 return notebook.GetPageText(idx) |
|
537 else: |
|
538 return "" |
|
539 else: |
|
540 return self.TabsOpened.GetPageText(idx) |
|
541 |
438 |
542 def OnPageClose(self, event): |
439 def OnPageClose(self, event): |
543 selected = self.GetPageSelection() |
440 selected = self.GetPageSelection() |
544 if selected >= 0: |
441 if selected >= 0: |
545 tagname = self.GetPage(selected).GetTagName() |
442 tagname = self.GetPage(selected).GetTagName() |
554 self.RefreshEditMenu() |
451 self.RefreshEditMenu() |
555 self.RefreshToolBar() |
452 self.RefreshToolBar() |
556 event.Skip() |
453 event.Skip() |
557 |
454 |
558 def GetCopyBuffer(self): |
455 def GetCopyBuffer(self): |
559 return self.CopyBuffer |
456 return PLCOpenEditor.CopyBuffer |
560 |
457 |
561 def SetCopyBuffer(self, element): |
458 def SetCopyBuffer(self, element): |
562 self.CopyBuffer = element |
459 PLCOpenEditor.CopyBuffer = element |
563 self.RefreshEditMenu() |
460 self.RefreshEditMenu() |
564 |
461 |
565 def GetDrawingMode(self): |
462 def GetDrawingMode(self): |
566 return self.DrawingMode |
463 return self.DrawingMode |
567 |
464 |
568 def RefreshTitle(self): |
465 def RefreshTitle(self): |
569 if self.Controler.HasOpenedProject() > 0: |
466 if self.Controler.HasOpenedProject() > 0: |
570 self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename()) |
467 self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename()) |
571 else: |
468 else: |
572 self.SetTitle("PLCOpenEditor") |
469 self.SetTitle("PLCOpenEditor") |
573 |
|
574 def RefreshFileMenu(self): |
|
575 if self.FileMenu: |
|
576 if self.Controler.HasOpenedProject(): |
|
577 if self.GetPageCount() > 0: |
|
578 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, True) |
|
579 else: |
|
580 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False) |
|
581 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, True) |
|
582 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, True) |
|
583 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, True) |
|
584 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, True) |
|
585 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, True) |
|
586 else: |
|
587 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False) |
|
588 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, False) |
|
589 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, False) |
|
590 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, False) |
|
591 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, False) |
|
592 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, False) |
|
593 |
|
594 def RefreshEditMenu(self): |
|
595 if self.EditMenu: |
|
596 if self.Controler.HasOpenedProject(): |
|
597 undo, redo = self.Controler.GetBufferState() |
|
598 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, undo) |
|
599 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo) |
|
600 else: |
|
601 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False) |
|
602 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False) |
|
603 if self.Controler.HasOpenedProject(): |
|
604 if self.GetPageCount() > 0: |
|
605 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True) |
|
606 else: |
|
607 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
|
608 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True) |
|
609 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, True) |
|
610 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS11, True) |
|
611 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS12, True) |
|
612 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, True) |
|
613 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS15, True) |
|
614 else: |
|
615 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
|
616 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False) |
|
617 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, False) |
|
618 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS11, False) |
|
619 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS12, False) |
|
620 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, False) |
|
621 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS15, False) |
|
622 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True) |
|
623 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True) |
|
624 if self.CopyBuffer is not None: |
|
625 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True) |
|
626 else: |
|
627 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False) |
|
628 |
|
629 def RefreshEditor(self, variablepanel = True): |
|
630 selected = self.GetPageSelection() |
|
631 if selected != -1: |
|
632 window = self.GetPage(selected) |
|
633 window.RefreshView() |
|
634 if variablepanel: |
|
635 self.RefreshVariablePanel(window.GetTagName()) |
|
636 |
|
637 def RefreshVariablePanel(self, tagname): |
|
638 self.VariablePanelIndexer.RefreshVariablePanel(tagname) |
|
639 |
470 |
640 def ShowProperties(self): |
471 def ShowProperties(self): |
641 old_values = self.Controler.GetProjectProperties() |
472 old_values = self.Controler.GetProjectProperties() |
642 dialog = ProjectDialog(self) |
473 dialog = ProjectDialog(self) |
643 dialog.SetValues(old_values) |
474 dialog.SetValues(old_values) |
675 else: |
506 else: |
676 event.Veto() |
507 event.Veto() |
677 else: |
508 else: |
678 event.Skip() |
509 event.Skip() |
679 |
510 |
|
511 #------------------------------------------------------------------------------- |
|
512 # Notebook Unified Functions |
|
513 #------------------------------------------------------------------------------- |
|
514 |
|
515 def GetPageCount(self): |
|
516 if wx.VERSION >= (2, 8, 0): |
|
517 notebook = self.GetNotebook() |
|
518 if notebook is not None: |
|
519 return notebook.GetPageCount() |
|
520 else: |
|
521 return 0 |
|
522 else: |
|
523 return self.TabsOpened.GetPageCount() |
|
524 |
|
525 def GetPage(self, idx): |
|
526 if wx.VERSION >= (2, 8, 0): |
|
527 notebook = self.GetNotebook() |
|
528 if notebook is not None: |
|
529 return notebook.GetPage(idx).GetViewer() |
|
530 else: |
|
531 return None |
|
532 else: |
|
533 return self.TabsOpened.GetPage(idx) |
|
534 |
|
535 def GetPageSelection(self): |
|
536 if wx.VERSION >= (2, 8, 0): |
|
537 notebook = self.GetNotebook() |
|
538 if notebook is not None: |
|
539 return notebook.GetSelection() |
|
540 else: |
|
541 return -1 |
|
542 else: |
|
543 return self.TabsOpened.GetSelection() |
|
544 |
|
545 def SetPageSelection(self, idx): |
|
546 if wx.VERSION >= (2, 8, 0): |
|
547 notebook = self.GetNotebook() |
|
548 if notebook is not None: |
|
549 notebook.SetSelection(idx) |
|
550 else: |
|
551 self.TabsOpened.SetSelection(idx) |
|
552 |
|
553 def DeletePage(self, idx): |
|
554 if wx.VERSION >= (2, 8, 0): |
|
555 notebook = self.GetNotebook() |
|
556 if notebook is not None: |
|
557 notebook.DeletePage(idx) |
|
558 else: |
|
559 self.TabsOpened.DeletePage(idx) |
|
560 |
|
561 def DeleteAllPages(self): |
|
562 if wx.VERSION >= (2, 8, 0): |
|
563 notebook = self.GetNotebook() |
|
564 if notebook is not None: |
|
565 for idx in xrange(notebook.GetPageCount()): |
|
566 notebook.DeletePage(0) |
|
567 else: |
|
568 self.TabsOpened.DeleteAllPages() |
|
569 |
|
570 def SetPageText(self, idx, text): |
|
571 if wx.VERSION >= (2, 8, 0): |
|
572 notebook = self.GetNotebook() |
|
573 if notebook is not None: |
|
574 return notebook.SetPageText(idx, text) |
|
575 else: |
|
576 return self.TabsOpened.SetPageText(idx, text) |
|
577 |
|
578 def GetPageText(self, idx): |
|
579 if wx.VERSION >= (2, 8, 0): |
|
580 notebook = self.GetNotebook() |
|
581 if notebook is not None: |
|
582 return notebook.GetPageText(idx) |
|
583 else: |
|
584 return "" |
|
585 else: |
|
586 return self.TabsOpened.GetPageText(idx) |
|
587 |
|
588 |
|
589 #------------------------------------------------------------------------------- |
|
590 # File Menu Functions |
|
591 #------------------------------------------------------------------------------- |
|
592 |
|
593 def RefreshFileMenu(self): |
|
594 if self.FileMenu: |
|
595 if self.Controler.HasOpenedProject(): |
|
596 if self.GetPageCount() > 0: |
|
597 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, True) |
|
598 else: |
|
599 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False) |
|
600 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, True) |
|
601 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, True) |
|
602 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, True) |
|
603 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, True) |
|
604 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, True) |
|
605 else: |
|
606 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False) |
|
607 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, False) |
|
608 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, False) |
|
609 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, False) |
|
610 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, False) |
|
611 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, False) |
|
612 |
680 def OnNewProjectMenu(self, event): |
613 def OnNewProjectMenu(self, event): |
681 dialog = ProjectDialog(self) |
614 dialog = ProjectDialog(self) |
682 if dialog.ShowModal() == wx.ID_OK: |
615 if dialog.ShowModal() == wx.ID_OK: |
683 properties = dialog.GetValues() |
616 properties = dialog.GetValues() |
684 self.Controler.CreateNewProject(properties) |
617 self.Controler.CreateNewProject(properties) |
820 |
753 |
821 def OnQuitMenu(self, event): |
754 def OnQuitMenu(self, event): |
822 self.Close() |
755 self.Close() |
823 event.Skip() |
756 event.Skip() |
824 |
757 |
825 def ResetCurrentMode(self): |
758 |
|
759 #------------------------------------------------------------------------------- |
|
760 # Edit Project Menu Functions |
|
761 #------------------------------------------------------------------------------- |
|
762 |
|
763 def RefreshEditMenu(self): |
|
764 if self.EditMenu: |
|
765 if self.Controler.HasOpenedProject(): |
|
766 undo, redo = self.Controler.GetBufferState() |
|
767 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, undo) |
|
768 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo) |
|
769 else: |
|
770 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False) |
|
771 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False) |
|
772 if self.Controler.HasOpenedProject(): |
|
773 if self.GetPageCount() > 0: |
|
774 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True) |
|
775 else: |
|
776 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
|
777 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True) |
|
778 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, True) |
|
779 else: |
|
780 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
|
781 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False) |
|
782 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, False) |
|
783 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True) |
|
784 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True) |
|
785 if self.CopyBuffer is not None: |
|
786 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True) |
|
787 else: |
|
788 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False) |
|
789 |
|
790 def OnRefreshMenu(self, event): |
826 selected = self.GetPageSelection() |
791 selected = self.GetPageSelection() |
827 if selected != -1: |
792 if selected != -1: |
828 window = self.GetPage(selected) |
793 window = self.GetPage(selected) |
829 window.SetMode(MODE_SELECTION) |
794 window.RefreshView() |
830 if wx.VERSION < (2, 8, 0): |
795 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
831 ToolBar = self.ToolBar |
796 event.Skip() |
832 else: |
797 |
833 ToolBar = self.Panes["ToolBar"] |
798 def OnUndoMenu(self, event): |
834 if ToolBar: |
799 self.Controler.LoadPrevious() |
835 ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True) |
800 idxs = range(self.GetPageCount()) |
836 |
801 idxs.reverse() |
837 def ResetToolToggle(self, id): |
802 for idx in idxs: |
838 if wx.VERSION < (2, 8, 0): |
803 tagname = self.GetPage(idx).GetTagName() |
839 tool = self.ToolBar.FindById(id) |
804 if self.Controler.GetEditedElement(tagname) is None: |
840 else: |
805 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
841 tool = self.Panes["ToolBar"].FindById(id) |
806 self.DeletePage(idx) |
842 tool.SetToggle(False) |
807 selected = self.GetPageSelection() |
843 |
808 if selected != -1: |
844 def OnSelectionTool(self, event): |
809 window = self.GetPage(selected) |
|
810 window.RefreshView() |
|
811 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
|
812 self.RefreshTitle() |
|
813 self.RefreshEditMenu() |
|
814 self.RefreshProjectTree() |
|
815 event.Skip() |
|
816 |
|
817 def OnRedoMenu(self, event): |
|
818 self.Controler.LoadNext() |
|
819 idxs = range(self.GetPageCount()) |
|
820 idxs.reverse() |
|
821 for idx in idxs: |
|
822 tagname = self.GetPage(idx).GetTagName() |
|
823 if self.Controler.GetEditedElement(tagname) is None: |
|
824 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
825 self.DeletePage(idx) |
845 selected = self.GetPageSelection() |
826 selected = self.GetPageSelection() |
846 if selected != -1: |
827 if selected != -1: |
847 self.GetPage(selected).SetMode(MODE_SELECTION) |
828 window = self.GetPage(selected) |
848 event.Skip() |
829 window.RefreshView() |
849 |
830 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
850 def OnCommentTool(self, event): |
831 self.RefreshTitle() |
851 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT) |
832 self.RefreshEditMenu() |
|
833 self.RefreshProjectTree() |
|
834 event.Skip() |
|
835 |
|
836 def OnCutMenu(self, event): |
852 selected = self.GetPageSelection() |
837 selected = self.GetPageSelection() |
853 if selected != -1: |
838 if selected != -1: |
854 self.GetPage(selected).SetMode(MODE_COMMENT) |
839 try: |
855 event.Skip() |
840 self.GetPage(selected).Cut() |
856 |
841 except: |
857 def OnVariableTool(self, event): |
842 pass |
858 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE) |
843 event.Skip() |
|
844 |
|
845 def OnCopyMenu(self, event): |
859 selected = self.GetPageSelection() |
846 selected = self.GetPageSelection() |
860 if selected != -1: |
847 if selected != -1: |
861 self.GetPage(selected).SetMode(MODE_VARIABLE) |
848 try: |
862 event.Skip() |
849 self.GetPage(selected).Copy() |
863 |
850 except: |
864 def OnBlockTool(self, event): |
851 pass |
865 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARBLOCK) |
852 event.Skip() |
|
853 |
|
854 def OnPasteMenu(self, event): |
866 selected = self.GetPageSelection() |
855 selected = self.GetPageSelection() |
867 if selected != -1: |
856 if selected != -1: |
868 self.GetPage(selected).SetMode(MODE_BLOCK) |
857 try: |
869 event.Skip() |
858 self.GetPage(selected).Paste() |
870 |
859 except: |
871 def OnConnectionTool(self, event): |
860 pass |
872 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION) |
861 event.Skip() |
873 selected = self.GetPageSelection() |
862 |
874 if selected != -1: |
863 def OnDeleteMenu(self, event): |
875 self.GetPage(selected).SetMode(MODE_CONNECTION) |
864 window = self.FindFocus() |
876 event.Skip() |
865 if window == self.ProjectTree: |
877 |
866 selected = self.ProjectTree.GetSelection() |
878 def OnPowerRailTool(self, event): |
867 if selected.IsOk(): |
879 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL) |
868 type = self.ProjectTree.GetPyData(selected) |
880 selected = self.GetPageSelection() |
869 tagname = "" |
881 if selected != -1: |
870 if type == ITEM_DATATYPE: |
882 self.GetPage(selected).SetMode(MODE_POWERRAIL) |
871 name = self.ProjectTree.GetItemText(selected) |
883 event.Skip() |
872 if not self.Controler.DataTypeIsUsed(name): |
884 |
873 self.Controler.ProjectRemoveDataType(name) |
885 def OnRungTool(self, event): |
874 tagname = self.Controler.ComputeDataTypeName(name) |
886 selected = self.GetPageSelection() |
875 else: |
887 if selected != -1: |
876 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
888 self.GetPage(selected).AddLadderRung() |
877 message.ShowModal() |
889 event.Skip() |
878 message.Destroy() |
890 |
879 elif type == ITEM_POU: |
891 def OnCoilTool(self, event): |
880 name = self.ProjectTree.GetItemText(selected) |
892 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL) |
881 if not self.Controler.DataTypeIsUsed(name): |
893 selected = self.GetPageSelection() |
882 self.Controler.ProjectRemoveDataType(name) |
894 if selected != -1: |
883 tagname = self.Controler.ComputeDataTypeName(name) |
895 self.GetPage(selected).SetMode(MODE_COIL) |
884 else: |
896 event.Skip() |
885 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
897 |
886 message.ShowModal() |
898 def OnContactTool(self, event): |
887 message.Destroy() |
899 if self.DrawingMode == FREEDRAWING_MODE: |
888 elif type in [ITEM_TRANSITION, ITEM_ACTION]: |
900 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT) |
889 item = self.ProjectTree.GetItemParent(selected) |
901 selected = self.GetPageSelection() |
890 item_type = self.ProjectTree.GetPyData(item) |
902 if selected != -1: |
891 while item_type != ITEM_POU: |
903 if self.DrawingMode == FREEDRAWING_MODE: |
892 item = self.ProjectTree.GetItemParent(item) |
904 self.GetPage(selected).SetMode(MODE_CONTACT) |
893 item_type = self.ProjectTree.GetPyData(item) |
905 else: |
894 pou_name = self.ProjectTree.GetItemText(item) |
906 self.GetPage(selected).AddLadderContact() |
895 if type == ITEM_TRANSITION: |
907 event.Skip() |
896 transition = self.ProjectTree.GetItemText(selected) |
908 |
897 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
909 def OnBranchTool(self, event): |
898 tagname = self.Controler.ComputePouTransitionName(pou_name, transition) |
910 selected = self.GetPageSelection() |
899 elif type == ITEM_ACTION: |
911 if selected != -1: |
900 action = self.ProjectTree.GetItemText(selected) |
912 self.GetPage(selected).AddLadderBranch() |
901 self.Controler.ProjectRemovePouAction(pou_name, action) |
913 event.Skip() |
902 tagname = self.Controler.ComputePouActionName(pou_name, action) |
914 |
903 elif type == ITEM_CONFIGURATION: |
915 def OnInitialStepTool(self, event): |
904 name = self.ProjectTree.GetItemText(selected) |
916 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP) |
905 self.Controler.ProjectRemoveConfiguration(name) |
917 selected = self.GetPageSelection() |
906 tagname = self.Controler.ComputeConfigurationName(name) |
918 if selected != -1: |
907 elif type == ITEM_RESOURCE: |
919 self.GetPage(selected).SetMode(MODE_INITIALSTEP) |
908 resource = self.ProjectTree.GetItemText(selected) |
920 event.Skip() |
909 item = self.ProjectTree.GetItemParent(selected) |
921 |
910 item_type = self.ProjectTree.GetPyData(item) |
922 def OnStepTool(self, event): |
911 while item_type != ITEM_CONFIGURATION: |
923 if self.GetDrawingMode() == FREEDRAWING_MODE: |
912 item = self.ProjectTree.GetItemParent(item) |
924 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP) |
913 item_type = self.ProjectTree.GetPyData(item) |
925 selected = self.GetPageSelection() |
914 config_name = self.ProjectTree.GetItemText(item) |
926 if selected != -1: |
915 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
927 if self.GetDrawingMode() == FREEDRAWING_MODE: |
916 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
928 self.GetPage(selected).SetMode(MODE_STEP) |
917 idx = self.IsOpened(tagname) |
929 else: |
918 if idx is not None: |
930 self.GetPage(selected).AddStep() |
919 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
931 event.Skip() |
920 self.DeletePage(idx) |
932 |
921 self.RefreshTitle() |
933 def OnActionBlockTool(self, event): |
922 self.RefreshEditMenu() |
934 if self.GetDrawingMode() == FREEDRAWING_MODE: |
923 self.RefreshProjectTree() |
935 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK) |
924 self.RefreshToolBar() |
936 selected = self.GetPageSelection() |
925 elif isinstance(window, (Viewer, TextViewer)): |
937 if selected != -1: |
926 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
938 if self.GetDrawingMode() == FREEDRAWING_MODE: |
927 event.m_keyCode = wx.WXK_DELETE |
939 self.GetPage(selected).SetMode(MODE_ACTION) |
928 window.ProcessEvent(event) |
940 else: |
929 event.Skip() |
941 self.GetPage(selected).AddStepAction() |
930 |
942 event.Skip() |
931 |
943 |
932 #------------------------------------------------------------------------------- |
944 def OnTransitionTool(self, event): |
933 # Project Editor Panels Management Functions |
945 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION) |
934 #------------------------------------------------------------------------------- |
946 selected = self.GetPageSelection() |
935 |
947 if selected != -1: |
|
948 self.GetPage(selected).SetMode(MODE_TRANSITION) |
|
949 event.Skip() |
|
950 |
|
951 def OnDivergenceTool(self, event): |
|
952 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
953 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE) |
|
954 selected = self.GetPageSelection() |
|
955 if selected != -1: |
|
956 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
957 self.GetPage(selected).SetMode(MODE_DIVERGENCE) |
|
958 else: |
|
959 self.GetPage(selected).AddDivergence() |
|
960 event.Skip() |
|
961 |
|
962 def OnJumpTool(self, event): |
|
963 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
964 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP) |
|
965 selected = self.GetPageSelection() |
|
966 if selected != -1: |
|
967 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
968 self.GetPage(selected).SetMode(MODE_JUMP) |
|
969 else: |
|
970 self.GetPage(selected).AddJump() |
|
971 event.Skip() |
|
972 |
|
973 def OnPouSelectedChanged(self, event): |
936 def OnPouSelectedChanged(self, event): |
974 if wx.VERSION < (2, 8, 0) or event.GetActive(): |
937 if wx.VERSION < (2, 8, 0) or event.GetActive(): |
975 old_selected = self.GetPageSelection() |
938 old_selected = self.GetPageSelection() |
976 if old_selected >= 0: |
939 if old_selected >= 0: |
977 self.GetPage(old_selected).ResetBuffer() |
940 self.GetPage(old_selected).ResetBuffer() |
1002 self.RefreshFileMenu() |
965 self.RefreshFileMenu() |
1003 self.RefreshEditMenu() |
966 self.RefreshEditMenu() |
1004 self.RefreshToolBar() |
967 self.RefreshToolBar() |
1005 event.Skip() |
968 event.Skip() |
1006 |
969 |
|
970 def RefreshEditor(self, variablepanel = True): |
|
971 selected = self.GetPageSelection() |
|
972 if selected != -1: |
|
973 window = self.GetPage(selected) |
|
974 window.RefreshView() |
|
975 if variablepanel: |
|
976 self.RefreshVariablePanel(window.GetTagName()) |
|
977 |
|
978 def RefreshVariablePanel(self, tagname): |
|
979 self.VariablePanelIndexer.RefreshVariablePanel(tagname) |
|
980 |
|
981 def RefreshEditorNames(self, old_tagname, new_tagname): |
|
982 for i in xrange(self.GetPageCount()): |
|
983 editor = self.GetPage(i) |
|
984 if editor.GetTagName() == old_tagname: |
|
985 editor.SetTagName(new_tagname) |
|
986 self.VariablePanelIndexer.UpdateVariablePanelTagName(old_tagname, new_tagname) |
|
987 |
|
988 def IsOpened(self, tagname): |
|
989 for idx in xrange(self.GetPageCount()): |
|
990 if self.GetPage(idx).IsViewing(tagname): |
|
991 return idx |
|
992 return None |
|
993 |
|
994 def RefreshPageTitles(self): |
|
995 for idx in xrange(self.GetPageCount()): |
|
996 window = self.GetPage(idx) |
|
997 words = window.GetTagName().split("::") |
|
998 self.SetPageText(idx, "-".join(words[1:])) |
|
999 |
|
1000 |
|
1001 #------------------------------------------------------------------------------- |
|
1002 # Project Tree Management Functions |
|
1003 #------------------------------------------------------------------------------- |
|
1004 |
|
1005 def RefreshProjectTree(self): |
|
1006 infos = self.Controler.GetProjectInfos() |
|
1007 root = self.ProjectTree.GetRootItem() |
|
1008 if not root.IsOk(): |
|
1009 root = self.ProjectTree.AddRoot(infos["name"]) |
|
1010 self.GenerateTreeBranch(root, infos) |
|
1011 self.ProjectTree.Expand(self.ProjectTree.GetRootItem()) |
|
1012 |
|
1013 def GenerateTreeBranch(self, root, infos): |
|
1014 to_delete = [] |
|
1015 self.ProjectTree.SetItemText(root, infos["name"]) |
|
1016 self.ProjectTree.SetPyData(root, infos["type"]) |
|
1017 if infos["type"] == ITEM_POU and wx.Platform != '__WXMSW__': |
|
1018 self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"]))) |
|
1019 if wx.VERSION >= (2, 6, 0): |
|
1020 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
|
1021 else: |
|
1022 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
|
1023 for values in infos["values"]: |
|
1024 if not item.IsOk(): |
|
1025 item = self.ProjectTree.AppendItem(root, "") |
|
1026 if wx.Platform != '__WXMSW__': |
|
1027 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
1028 self.GenerateTreeBranch(item, values) |
|
1029 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
1030 while item.IsOk(): |
|
1031 to_delete.append(item) |
|
1032 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
1033 for item in to_delete: |
|
1034 self.ProjectTree.Delete(item) |
|
1035 |
1007 def SelectProjectTreeItem(self, root, items): |
1036 def SelectProjectTreeItem(self, root, items): |
1008 found = False |
1037 found = False |
1009 if self.ProjectTree: |
1038 if self.ProjectTree: |
1010 if wx.VERSION >= (2, 6, 0): |
1039 if wx.VERSION >= (2, 6, 0): |
1011 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1040 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1370 self.RefreshEditMenu() |
1386 self.RefreshEditMenu() |
1371 self.RefreshToolBar() |
1387 self.RefreshToolBar() |
1372 |
1388 |
1373 def OnProjectTreeRightUp(self, event): |
1389 def OnProjectTreeRightUp(self, event): |
1374 if wx.Platform == '__WXMSW__': |
1390 if wx.Platform == '__WXMSW__': |
1375 cursor_pos = event.GetPoint() |
1391 item = event.GetItem() |
1376 else: |
1392 else: |
1377 cursor_pos = event.GetPosition() |
1393 item = self.ProjectTree.GetSelection() |
1378 selected = self.ProjectTree.GetSelection() |
1394 name = self.ProjectTree.GetItemText(item) |
1379 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1395 type = self.ProjectTree.GetPyData(item) |
1380 name = self.ProjectTree.GetItemText(selected) |
1396 if type == ITEM_POU: |
|
1397 menu = wx.Menu(title='') |
1381 if self.Controler.GetPouBodyType(name) == "SFC": |
1398 if self.Controler.GetPouBodyType(name) == "SFC": |
1382 self.PopupMenuXY(self.SFCMenu, cursor_pos.x, cursor_pos.y) |
1399 new_id = wx.NewId() |
1383 elif self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
1400 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition") |
1384 self.PopupMenu(self.ConfigMenu) |
1401 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id) |
1385 event.Skip() |
1402 new_id = wx.NewId() |
1386 |
1403 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action") |
1387 def RefreshProjectTree(self): |
1404 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(name), id=new_id) |
1388 infos = self.Controler.GetProjectInfos() |
1405 menu.AppendSeparator() |
1389 root = self.ProjectTree.GetRootItem() |
1406 new_id = wx.NewId() |
1390 if not root.IsOk(): |
1407 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete") |
1391 root = self.ProjectTree.AddRoot(infos["name"]) |
1408 self.Bind(wx.EVT_MENU, self.OnRemovePouMenu, id=new_id) |
1392 self.GenerateTreeBranch(root, infos) |
1409 self.PopupMenu(menu) |
1393 self.ProjectTree.Expand(self.ProjectTree.GetRootItem()) |
1410 elif type == ITEM_CONFIGURATION: |
1394 |
1411 menu = wx.Menu(title='') |
1395 def GenerateTreeBranch(self, root, infos): |
1412 new_id = wx.NewId() |
1396 to_delete = [] |
1413 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Resource") |
1397 self.ProjectTree.SetItemText(root, infos["name"]) |
1414 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id) |
1398 self.ProjectTree.SetPyData(root, infos["type"]) |
1415 new_id = wx.NewId() |
1399 if infos["type"] == ITEM_POU and wx.Platform != '__WXMSW__': |
1416 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete") |
1400 self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"]))) |
1417 self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu, id=new_id) |
1401 if wx.VERSION >= (2, 5, 0): |
1418 self.PopupMenu(menu) |
1402 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
1419 elif type in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]: |
1403 else: |
1420 menu = wx.Menu(title='') |
1404 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
1421 new_id = wx.NewId() |
1405 for values in infos["values"]: |
1422 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete") |
1406 if not item.IsOk(): |
1423 if type == ITEM_DATATYPE: |
1407 item = self.ProjectTree.AppendItem(root, "") |
1424 self.Bind(wx.EVT_MENU, self.OnRemoveDataTypeMenu, id=new_id) |
1408 if wx.Platform != '__WXMSW__': |
1425 elif type == ITEM_TRANSITION: |
1409 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1426 self.Bind(wx.EVT_MENU, self.OnRemoveTransitionMenu, id=new_id) |
1410 self.GenerateTreeBranch(item, values) |
1427 elif type == ITEM_ACTION: |
1411 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1428 self.Bind(wx.EVT_MENU, self.OnRemoveActionMenu, id=new_id) |
1412 while item.IsOk(): |
1429 elif type == ITEM_RESOURCE: |
1413 to_delete.append(item) |
1430 self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu, id=new_id) |
1414 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
1431 self.PopupMenu(menu) |
1415 for item in to_delete: |
1432 elif type == ITEM_UNEDITABLE: |
1416 self.ProjectTree.Delete(item) |
1433 if name == "Data Types": |
1417 |
1434 menu = wx.Menu(title='') |
|
1435 new_id = wx.NewId() |
|
1436 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add DataType") |
|
1437 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, id=new_id) |
|
1438 self.PopupMenu(menu) |
|
1439 elif name in ["Functions", "Function Blocks", "Programs"]: |
|
1440 menu = wx.Menu(title='') |
|
1441 new_id = wx.NewId() |
|
1442 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Pou") |
|
1443 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction({"Functions" : "function", "Function Blocks" : "functionBlock", "Programs" : "program"}[name]), id=new_id) |
|
1444 self.PopupMenu(menu) |
|
1445 elif name == "Configurations": |
|
1446 menu = wx.Menu(title='') |
|
1447 new_id = wx.NewId() |
|
1448 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Configuration") |
|
1449 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, id=new_id) |
|
1450 self.PopupMenu(menu) |
|
1451 elif name == "Transitions": |
|
1452 menu = wx.Menu(title='') |
|
1453 new_id = wx.NewId() |
|
1454 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition") |
|
1455 parent = self.ProjectTree.GetItemParent(item) |
|
1456 parent_type = self.ProjectTree.GetPyData(parent) |
|
1457 while parent_type != ITEM_POU: |
|
1458 parent = self.ProjectTree.GetItemParent(parent) |
|
1459 parent_type = self.ProjectTree.GetPyData(parent) |
|
1460 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
|
1461 self.PopupMenu(menu) |
|
1462 elif name == "Actions": |
|
1463 menu = wx.Menu(title='') |
|
1464 new_id = wx.NewId() |
|
1465 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action") |
|
1466 parent = self.ProjectTree.GetItemParent(item) |
|
1467 parent_type = self.ProjectTree.GetPyData(parent) |
|
1468 while parent_type != ITEM_POU: |
|
1469 parent = self.ProjectTree.GetItemParent(parent) |
|
1470 parent_type = self.ProjectTree.GetPyData(parent) |
|
1471 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
|
1472 self.PopupMenu(menu) |
|
1473 elif name == "Resources": |
|
1474 menu = wx.Menu(title='') |
|
1475 new_id = wx.NewId() |
|
1476 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Resource") |
|
1477 parent = self.ProjectTree.GetItemParent(item) |
|
1478 parent_type = self.ProjectTree.GetPyData(parent) |
|
1479 while parent_type != ITEM_CONFIGURATION: |
|
1480 parent = self.ProjectTree.GetItemParent(parent) |
|
1481 parent_type = self.ProjectTree.GetPyData(parent) |
|
1482 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
|
1483 self.PopupMenu(menu) |
|
1484 event.Skip() |
|
1485 |
|
1486 |
|
1487 #------------------------------------------------------------------------------- |
|
1488 # ToolBar Management Functions |
|
1489 #------------------------------------------------------------------------------- |
|
1490 |
1418 def ResetToolBar(self): |
1491 def ResetToolBar(self): |
1419 for item in self.CurrentToolBar: |
1492 for item in self.CurrentToolBar: |
1420 if wx.VERSION >= (2, 6, 0): |
1493 if wx.VERSION >= (2, 6, 0): |
1421 self.Unbind(wx.EVT_MENU, id=item) |
1494 self.Unbind(wx.EVT_MENU, id=item) |
1422 else: |
1495 else: |
1463 elif not language: |
1536 elif not language: |
1464 self.ResetToolBar() |
1537 self.ResetToolBar() |
1465 self.CurrentLanguage = language |
1538 self.CurrentLanguage = language |
1466 self.ResetCurrentMode() |
1539 self.ResetCurrentMode() |
1467 |
1540 |
1468 def RefreshPageTitles(self): |
1541 |
1469 for idx in xrange(self.GetPageCount()): |
1542 #------------------------------------------------------------------------------- |
1470 window = self.GetPage(idx) |
1543 # Tool Bar Items Functions |
1471 words = window.GetTagName().split("::") |
1544 #------------------------------------------------------------------------------- |
1472 self.SetPageText(idx, "-".join(words[1:])) |
1545 |
1473 |
1546 def ResetCurrentMode(self): |
1474 def OnRefreshMenu(self, event): |
|
1475 selected = self.GetPageSelection() |
1547 selected = self.GetPageSelection() |
1476 if selected != -1: |
1548 if selected != -1: |
1477 window = self.GetPage(selected) |
1549 window = self.GetPage(selected) |
1478 window.RefreshView() |
1550 window.SetMode(MODE_SELECTION) |
1479 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1551 if wx.VERSION < (2, 8, 0): |
1480 event.Skip() |
1552 ToolBar = self.ToolBar |
1481 |
1553 else: |
1482 def OnUndoMenu(self, event): |
1554 ToolBar = self.Panes["ToolBar"] |
1483 self.Controler.LoadPrevious() |
1555 if ToolBar: |
|
1556 ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True) |
|
1557 |
|
1558 def ResetToolToggle(self, id): |
|
1559 if wx.VERSION < (2, 8, 0): |
|
1560 tool = self.ToolBar.FindById(id) |
|
1561 else: |
|
1562 tool = self.Panes["ToolBar"].FindById(id) |
|
1563 tool.SetToggle(False) |
|
1564 |
|
1565 def OnSelectionTool(self, event): |
1484 selected = self.GetPageSelection() |
1566 selected = self.GetPageSelection() |
1485 if selected != -1: |
1567 if selected != -1: |
1486 window = self.GetPage(selected) |
1568 self.GetPage(selected).SetMode(MODE_SELECTION) |
1487 window.RefreshView() |
1569 event.Skip() |
1488 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1570 |
1489 self.RefreshTitle() |
1571 def OnCommentTool(self, event): |
1490 self.RefreshEditMenu() |
1572 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT) |
1491 self.RefreshProjectTree() |
|
1492 event.Skip() |
|
1493 |
|
1494 def OnRedoMenu(self, event): |
|
1495 self.Controler.LoadNext() |
|
1496 selected = self.GetPageSelection() |
1573 selected = self.GetPageSelection() |
1497 if selected != -1: |
1574 if selected != -1: |
1498 window = self.GetPage(selected) |
1575 self.GetPage(selected).SetMode(MODE_COMMENT) |
1499 window.RefreshView() |
1576 event.Skip() |
1500 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1577 |
1501 self.RefreshTitle() |
1578 def OnVariableTool(self, event): |
1502 self.RefreshEditMenu() |
1579 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE) |
1503 self.RefreshProjectTree() |
|
1504 event.Skip() |
|
1505 |
|
1506 def OnCutMenu(self, event): |
|
1507 selected = self.GetPageSelection() |
1580 selected = self.GetPageSelection() |
1508 if selected != -1: |
1581 if selected != -1: |
1509 try: |
1582 self.GetPage(selected).SetMode(MODE_VARIABLE) |
1510 self.GetPage(selected).Cut() |
1583 event.Skip() |
1511 except: |
1584 |
1512 pass |
1585 def OnBlockTool(self, event): |
1513 event.Skip() |
1586 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARBLOCK) |
1514 |
|
1515 def OnCopyMenu(self, event): |
|
1516 selected = self.GetPageSelection() |
1587 selected = self.GetPageSelection() |
1517 if selected != -1: |
1588 if selected != -1: |
1518 try: |
1589 self.GetPage(selected).SetMode(MODE_BLOCK) |
1519 self.GetPage(selected).Copy() |
1590 event.Skip() |
1520 except: |
1591 |
1521 pass |
1592 def OnConnectionTool(self, event): |
1522 event.Skip() |
1593 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION) |
1523 |
|
1524 def OnPasteMenu(self, event): |
|
1525 selected = self.GetPageSelection() |
1594 selected = self.GetPageSelection() |
1526 if selected != -1: |
1595 if selected != -1: |
1527 try: |
1596 self.GetPage(selected).SetMode(MODE_CONNECTION) |
1528 self.GetPage(selected).Paste() |
1597 event.Skip() |
1529 except: |
1598 |
1530 pass |
1599 def OnPowerRailTool(self, event): |
1531 event.Skip() |
1600 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL) |
1532 |
1601 selected = self.GetPageSelection() |
|
1602 if selected != -1: |
|
1603 self.GetPage(selected).SetMode(MODE_POWERRAIL) |
|
1604 event.Skip() |
|
1605 |
|
1606 def OnRungTool(self, event): |
|
1607 selected = self.GetPageSelection() |
|
1608 if selected != -1: |
|
1609 self.GetPage(selected).AddLadderRung() |
|
1610 event.Skip() |
|
1611 |
|
1612 def OnCoilTool(self, event): |
|
1613 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL) |
|
1614 selected = self.GetPageSelection() |
|
1615 if selected != -1: |
|
1616 self.GetPage(selected).SetMode(MODE_COIL) |
|
1617 event.Skip() |
|
1618 |
|
1619 def OnContactTool(self, event): |
|
1620 if self.DrawingMode == FREEDRAWING_MODE: |
|
1621 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT) |
|
1622 selected = self.GetPageSelection() |
|
1623 if selected != -1: |
|
1624 if self.DrawingMode == FREEDRAWING_MODE: |
|
1625 self.GetPage(selected).SetMode(MODE_CONTACT) |
|
1626 else: |
|
1627 self.GetPage(selected).AddLadderContact() |
|
1628 event.Skip() |
|
1629 |
|
1630 def OnBranchTool(self, event): |
|
1631 selected = self.GetPageSelection() |
|
1632 if selected != -1: |
|
1633 self.GetPage(selected).AddLadderBranch() |
|
1634 event.Skip() |
|
1635 |
|
1636 def OnInitialStepTool(self, event): |
|
1637 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP) |
|
1638 selected = self.GetPageSelection() |
|
1639 if selected != -1: |
|
1640 self.GetPage(selected).SetMode(MODE_INITIALSTEP) |
|
1641 event.Skip() |
|
1642 |
|
1643 def OnStepTool(self, event): |
|
1644 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1645 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP) |
|
1646 selected = self.GetPageSelection() |
|
1647 if selected != -1: |
|
1648 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1649 self.GetPage(selected).SetMode(MODE_STEP) |
|
1650 else: |
|
1651 self.GetPage(selected).AddStep() |
|
1652 event.Skip() |
|
1653 |
|
1654 def OnActionBlockTool(self, event): |
|
1655 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1656 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK) |
|
1657 selected = self.GetPageSelection() |
|
1658 if selected != -1: |
|
1659 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1660 self.GetPage(selected).SetMode(MODE_ACTION) |
|
1661 else: |
|
1662 self.GetPage(selected).AddStepAction() |
|
1663 event.Skip() |
|
1664 |
|
1665 def OnTransitionTool(self, event): |
|
1666 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION) |
|
1667 selected = self.GetPageSelection() |
|
1668 if selected != -1: |
|
1669 self.GetPage(selected).SetMode(MODE_TRANSITION) |
|
1670 event.Skip() |
|
1671 |
|
1672 def OnDivergenceTool(self, event): |
|
1673 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1674 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE) |
|
1675 selected = self.GetPageSelection() |
|
1676 if selected != -1: |
|
1677 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1678 self.GetPage(selected).SetMode(MODE_DIVERGENCE) |
|
1679 else: |
|
1680 self.GetPage(selected).AddDivergence() |
|
1681 event.Skip() |
|
1682 |
|
1683 def OnJumpTool(self, event): |
|
1684 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1685 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP) |
|
1686 selected = self.GetPageSelection() |
|
1687 if selected != -1: |
|
1688 if self.GetDrawingMode() == FREEDRAWING_MODE: |
|
1689 self.GetPage(selected).SetMode(MODE_JUMP) |
|
1690 else: |
|
1691 self.GetPage(selected).AddJump() |
|
1692 event.Skip() |
|
1693 |
|
1694 |
|
1695 #------------------------------------------------------------------------------- |
|
1696 # Add Project Elements Functions |
|
1697 #------------------------------------------------------------------------------- |
|
1698 |
1533 def OnAddDataTypeMenu(self, event): |
1699 def OnAddDataTypeMenu(self, event): |
1534 dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL) |
1700 dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL) |
1535 dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames()) |
1701 dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames()) |
1536 if dialog.ShowModal() == wx.ID_OK: |
1702 if dialog.ShowModal() == wx.ID_OK: |
1537 self.Controler.ProjectAddDataType(dialog.GetValue()) |
1703 self.Controler.ProjectAddDataType(dialog.GetValue()) |
1538 self.RefreshTitle() |
1704 self.RefreshTitle() |
1539 self.RefreshEditMenu() |
1705 self.RefreshEditMenu() |
1540 self.RefreshProjectTree() |
1706 self.RefreshProjectTree() |
1541 dialog.Destroy() |
1707 dialog.Destroy() |
1542 event.Skip() |
1708 event.Skip() |
1543 |
1709 |
1544 def OnRemoveDataTypeMenu(self, event): |
1710 def GenerateAddPouFunction(self, pou_type): |
1545 datatypes = self.Controler.GetProjectDataTypeNames() |
1711 def OnAddPouMenu(event): |
1546 dialog = wx.SingleChoiceDialog(self, "Select Data Type to remove:", "Data Type Remove", datatypes, wx.OK|wx.CANCEL) |
1712 dialog = PouDialog(self, pou_type) |
1547 if dialog.ShowModal() == wx.ID_OK: |
1713 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1548 selected = dialog.GetStringSelection() |
1714 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1549 if not self.Controler.DataTypeIsUsed(selected): |
1715 if dialog.ShowModal() == wx.ID_OK: |
1550 self.Controler.ProjectRemoveDataType(selected) |
1716 values = dialog.GetValues() |
1551 tagname = self.Controler.ComputeDataTypeName(selected) |
1717 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
1552 idx = self.IsOpened(tagname) |
|
1553 if idx is not None: |
|
1554 self.DeletePage(idx) |
|
1555 self.RefreshTitle() |
1718 self.RefreshTitle() |
1556 self.RefreshEditMenu() |
1719 self.RefreshEditMenu() |
1557 self.RefreshProjectTree() |
1720 self.RefreshProjectTree() |
1558 self.RefreshToolBar() |
1721 dialog.Destroy() |
1559 else: |
1722 event.Skip() |
1560 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1723 return OnAddPouMenu |
1561 message.ShowModal() |
1724 |
1562 message.Destroy() |
1725 def GenerateAddTransitionFunction(self, pou_name): |
1563 event.Skip() |
1726 def OnAddTransitionMenu(event): |
1564 |
1727 dialog = PouTransitionDialog(self) |
1565 def OnAddPouMenu(self, event): |
1728 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1566 dialog = PouDialog(self) |
1729 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name)) |
1567 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1730 if dialog.ShowModal() == wx.ID_OK: |
1568 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1731 values = dialog.GetValues() |
1569 if dialog.ShowModal() == wx.ID_OK: |
1732 self.Controler.ProjectAddPouTransition(pou_name, values["transitionName"], values["language"]) |
1570 values = dialog.GetValues() |
|
1571 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
|
1572 self.RefreshTitle() |
|
1573 self.RefreshEditMenu() |
|
1574 self.RefreshProjectTree() |
|
1575 dialog.Destroy() |
|
1576 event.Skip() |
|
1577 |
|
1578 def OnRemovePouMenu(self, event): |
|
1579 pous = self.Controler.GetProjectPouNames() |
|
1580 dialog = wx.SingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wx.OK|wx.CANCEL) |
|
1581 if dialog.ShowModal() == wx.ID_OK: |
|
1582 selected = dialog.GetStringSelection() |
|
1583 if not self.Controler.PouIsUsed(selected): |
|
1584 self.Controler.ProjectRemovePou(selected) |
|
1585 tagname = self.Controler.ComputePouName(selected) |
|
1586 idx = self.IsOpened(tagname) |
|
1587 if idx is not None: |
|
1588 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName()) |
|
1589 self.DeletePage(idx) |
|
1590 self.RefreshTitle() |
1733 self.RefreshTitle() |
1591 self.RefreshEditMenu() |
1734 self.RefreshEditMenu() |
1592 self.RefreshProjectTree() |
1735 self.RefreshProjectTree() |
1593 self.RefreshToolBar() |
1736 dialog.Destroy() |
1594 else: |
1737 event.Skip() |
1595 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1738 return OnAddTransitionMenu |
1596 message.ShowModal() |
1739 |
1597 message.Destroy() |
1740 def GenerateAddActionFunction(self, pou_name): |
1598 event.Skip() |
1741 def OnAddActionMenu(event): |
|
1742 dialog = PouActionDialog(self) |
|
1743 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
1744 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name)) |
|
1745 if dialog.ShowModal() == wx.ID_OK: |
|
1746 values = dialog.GetValues() |
|
1747 self.Controler.ProjectAddPouAction(pou_name, values["actionName"], values["language"]) |
|
1748 self.RefreshTitle() |
|
1749 self.RefreshEditMenu() |
|
1750 self.RefreshProjectTree() |
|
1751 dialog.Destroy() |
|
1752 event.Skip() |
|
1753 return OnAddActionMenu |
1599 |
1754 |
1600 def OnAddConfigurationMenu(self, event): |
1755 def OnAddConfigurationMenu(self, event): |
1601 dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration") |
1756 dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration") |
1602 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1757 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1603 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1758 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1608 self.RefreshEditMenu() |
1763 self.RefreshEditMenu() |
1609 self.RefreshProjectTree() |
1764 self.RefreshProjectTree() |
1610 dialog.Destroy() |
1765 dialog.Destroy() |
1611 event.Skip() |
1766 event.Skip() |
1612 |
1767 |
1613 def OnRemoveConfigurationMenu(self, event): |
1768 def GenerateAddResourceFunction(self, config_name): |
1614 configs = self.Controler.GetProjectConfigNames() |
1769 def OnAddResourceMenu(self, event): |
1615 dialog = wx.SingleChoiceDialog(self, "Please select a configuration", "Remove configuration", configs, wx.OK|wx.CANCEL) |
|
1616 if dialog.ShowModal() == wx.ID_OK: |
|
1617 selected = dialog.GetStringSelection() |
|
1618 self.Controler.ProjectRemoveConfiguration(selected) |
|
1619 tagname = self.Controler.ComputeConfigurationName(selected) |
|
1620 idx = self.IsOpened(tagname) |
|
1621 if idx is not None: |
|
1622 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName()) |
|
1623 self.DeletePage(idx) |
|
1624 self.RefreshTitle() |
|
1625 self.RefreshEditMenu() |
|
1626 self.RefreshProjectTree() |
|
1627 event.Skip() |
|
1628 |
|
1629 def OnAddPouTransitionMenu(self, event): |
|
1630 selected = self.ProjectTree.GetSelection() |
|
1631 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
|
1632 pouname = self.ProjectTree.GetItemText(selected) |
|
1633 if self.Controler.GetPouBodyType(pouname) == "SFC": |
|
1634 dialog = PouTransitionDialog(self) |
|
1635 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
1636 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pouname)) |
|
1637 if dialog.ShowModal() == wx.ID_OK: |
|
1638 values = dialog.GetValues() |
|
1639 self.Controler.ProjectAddPouTransition(pouname, values["transitionName"], values["language"]) |
|
1640 self.RefreshTitle() |
|
1641 self.RefreshEditMenu() |
|
1642 self.RefreshProjectTree() |
|
1643 dialog.Destroy() |
|
1644 event.Skip() |
|
1645 |
|
1646 def OnRemovePouTransitionMenu(self, event): |
|
1647 selected = self.ProjectTree.GetSelection() |
|
1648 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
|
1649 pouname = self.ProjectTree.GetItemText(selected) |
|
1650 if self.Controler.GetPouBodyType(pouname) == "SFC": |
|
1651 transitions = self.Controler.GetPouTransitions(pouname) |
|
1652 dialog = wx.SingleChoiceDialog(self, "Select Transition to remove:", "Remove transition", transitions, wx.OK|wx.CANCEL) |
|
1653 if dialog.ShowModal() == wx.ID_OK: |
|
1654 selected = dialog.GetStringSelection() |
|
1655 self.Controler.ProjectRemovePouTransition(pouname, selected) |
|
1656 tagname = self.Controler.ComputePouTransitionName(pouname, selected) |
|
1657 idx = self.IsOpened(tagname) |
|
1658 if idx is not None: |
|
1659 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName()) |
|
1660 self.DeletePage(idx) |
|
1661 self.RefreshTitle() |
|
1662 self.RefreshEditMenu() |
|
1663 self.RefreshProjectTree() |
|
1664 dialog.Destroy() |
|
1665 event.Skip() |
|
1666 |
|
1667 def OnAddPouActionMenu(self, event): |
|
1668 selected = self.ProjectTree.GetSelection() |
|
1669 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
|
1670 pouname = self.ProjectTree.GetItemText(selected) |
|
1671 if self.Controler.GetPouBodyType(pouname) == "SFC": |
|
1672 dialog = PouActionDialog(self) |
|
1673 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
1674 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pouname)) |
|
1675 if dialog.ShowModal() == wx.ID_OK: |
|
1676 values = dialog.GetValues() |
|
1677 self.Controler.ProjectAddPouAction(pouname, values["actionName"], values["language"]) |
|
1678 self.RefreshTitle() |
|
1679 self.RefreshEditMenu() |
|
1680 self.RefreshProjectTree() |
|
1681 dialog.Destroy() |
|
1682 event.Skip() |
|
1683 |
|
1684 def OnRemovePouActionMenu(self, event): |
|
1685 selected = self.ProjectTree.GetSelection() |
|
1686 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
|
1687 pouname = self.ProjectTree.GetItemText(selected) |
|
1688 if self.Controler.GetPouBodyType(pouname) == "SFC": |
|
1689 actions = self.Controler.GetPouActions(pouname) |
|
1690 dialog = wx.SingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wx.OK|wx.CANCEL) |
|
1691 if dialog.ShowModal() == wx.ID_OK: |
|
1692 selected = dialog.GetStringSelection() |
|
1693 self.Controler.ProjectRemovePouAction(pouname, selected) |
|
1694 tagname = self.Controler.ComputePouActionName(pouname, selected) |
|
1695 idx = self.IsOpened(tagname) |
|
1696 if idx is not None: |
|
1697 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName()) |
|
1698 self.DeletePage(idx) |
|
1699 self.RefreshTitle() |
|
1700 self.RefreshEditMenu() |
|
1701 self.RefreshProjectTree() |
|
1702 dialog.Destroy() |
|
1703 event.Skip() |
|
1704 |
|
1705 def OnAddResourceMenu(self, event): |
|
1706 selected = self.ProjectTree.GetSelection() |
|
1707 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
|
1708 config_name = self.ProjectTree.GetItemText(selected) |
|
1709 dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource") |
1770 dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource") |
1710 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1771 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1711 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1772 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1712 if dialog.ShowModal() == wx.ID_OK: |
1773 if dialog.ShowModal() == wx.ID_OK: |
1713 value = dialog.GetValue() |
1774 value = dialog.GetValue() |
1714 self.Controler.ProjectAddConfigurationResource(config_name, value) |
1775 self.Controler.ProjectAddConfigurationResource(config_name, value) |
1715 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
1776 self.RefreshTitle() |
|
1777 self.RefreshEditMenu() |
|
1778 self.RefreshProjectTree() |
|
1779 dialog.Destroy() |
|
1780 event.Skip() |
|
1781 return OnAddResourceMenu |
|
1782 |
|
1783 |
|
1784 #------------------------------------------------------------------------------- |
|
1785 # Remove Project Elements Functions |
|
1786 #------------------------------------------------------------------------------- |
|
1787 |
|
1788 def OnRemoveDataTypeMenu(self, event): |
|
1789 selected = self.ProjectTree.GetSelection() |
|
1790 if self.ProjectTree.GetPyData(selected) == ITEM_DATATYPE: |
|
1791 name = self.ProjectTree.GetItemText(selected) |
|
1792 if not self.Controler.DataTypeIsUsed(name): |
|
1793 self.Controler.ProjectRemoveDataType(name) |
|
1794 tagname = self.Controler.ComputeDataTypeName(name) |
1716 idx = self.IsOpened(tagname) |
1795 idx = self.IsOpened(tagname) |
1717 if idx is not None: |
1796 if idx is not None: |
1718 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName()) |
|
1719 self.DeletePage(idx) |
1797 self.DeletePage(idx) |
1720 self.RefreshTitle() |
1798 self.RefreshTitle() |
1721 self.RefreshEditMenu() |
1799 self.RefreshEditMenu() |
1722 self.RefreshProjectTree() |
1800 self.RefreshProjectTree() |
1723 dialog.Destroy() |
1801 self.RefreshToolBar() |
1724 event.Skip() |
1802 else: |
1725 |
1803 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1726 def OnRemoveResourceMenu(self, event): |
1804 message.ShowModal() |
|
1805 message.Destroy() |
|
1806 event.Skip() |
|
1807 |
|
1808 def OnRemovePouMenu(self, event): |
1727 selected = self.ProjectTree.GetSelection() |
1809 selected = self.ProjectTree.GetSelection() |
1728 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
1810 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1729 config_name = self.ProjectTree.GetItemText(selected) |
1811 name = self.ProjectTree.GetItemText(selected) |
1730 infos = self.Controler.GetProjectInfos() |
1812 if not self.Controler.PouIsUsed(name): |
1731 resources = [] |
1813 self.Controler.ProjectRemovePou(name) |
1732 for config in infos["configs"]: |
1814 tagname = self.Controler.ComputePouName(name) |
1733 if config["name"] == config_name: |
1815 idx = self.IsOpened(tagname) |
1734 resources = config["resources"] |
1816 if idx is not None: |
1735 dialog = wx.SingleChoiceDialog(self, "Select Resource to remove:", "Remove resource", resources, wx.OK|wx.CANCEL) |
1817 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
1736 if dialog.ShowModal() == wx.ID_OK: |
1818 self.DeletePage(idx) |
1737 resource = dialog.GetStringSelection() |
|
1738 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
|
1739 self.RefreshTitle() |
1819 self.RefreshTitle() |
1740 self.RefreshEditMenu() |
1820 self.RefreshEditMenu() |
1741 self.RefreshProjectTree() |
1821 self.RefreshProjectTree() |
1742 dialog.Destroy() |
1822 self.RefreshToolBar() |
|
1823 else: |
|
1824 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
|
1825 message.ShowModal() |
|
1826 message.Destroy() |
|
1827 event.Skip() |
|
1828 |
|
1829 def OnRemoveConfigurationMenu(self, event): |
|
1830 selected = self.ProjectTree.GetSelection() |
|
1831 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
|
1832 name = self.ProjectTree.GetItemText(selected) |
|
1833 self.Controler.ProjectRemoveConfiguration(name) |
|
1834 tagname = self.Controler.ComputeConfigurationName(name) |
|
1835 idx = self.IsOpened(tagname) |
|
1836 if idx is not None: |
|
1837 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
1838 self.DeletePage(idx) |
|
1839 self.RefreshTitle() |
|
1840 self.RefreshEditMenu() |
|
1841 self.RefreshProjectTree() |
|
1842 event.Skip() |
|
1843 |
|
1844 def OnRemoveTransitionMenu(self, event): |
|
1845 selected = self.ProjectTree.GetSelection() |
|
1846 if self.ProjectTree.GetPyData(selected) == ITEM_TRANSITION: |
|
1847 transition = self.ProjectTree.GetItemText(selected) |
|
1848 item = self.ProjectTree.GetItemParent(selected) |
|
1849 item_type = self.ProjectTree.GetPyData(item) |
|
1850 while item_type != ITEM_POU: |
|
1851 item = self.ProjectTree.GetItemParent(item) |
|
1852 item_type = self.ProjectTree.GetPyData(item) |
|
1853 pou_name = self.ProjectTree.GetItemText(item) |
|
1854 self.Controler.ProjectRemovePouTransition(pou_name, transition) |
|
1855 tagname = self.Controler.ComputePouTransitionName(pou_name, transition) |
|
1856 idx = self.IsOpened(tagname) |
|
1857 if idx is not None: |
|
1858 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
1859 self.DeletePage(idx) |
|
1860 self.RefreshTitle() |
|
1861 self.RefreshEditMenu() |
|
1862 self.RefreshProjectTree() |
|
1863 event.Skip() |
|
1864 |
|
1865 def OnRemoveActionMenu(self, event): |
|
1866 selected = self.ProjectTree.GetSelection() |
|
1867 if self.ProjectTree.GetPyData(selected) == ITEM_ACTION: |
|
1868 transition = self.ProjectTree.GetItemText(selected) |
|
1869 item = self.ProjectTree.GetItemParent(selected) |
|
1870 item_type = self.ProjectTree.GetPyData(item) |
|
1871 while item_type != ITEM_POU: |
|
1872 item = self.ProjectTree.GetItemParent(item) |
|
1873 item_type = self.ProjectTree.GetPyData(item) |
|
1874 pou_name = self.ProjectTree.GetItemText(item) |
|
1875 self.Controler.ProjectRemovePouAction(pou_name, action) |
|
1876 tagname = self.Controler.ComputePouActionName(pou_name, action) |
|
1877 idx = self.IsOpened(tagname) |
|
1878 if idx is not None: |
|
1879 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
1880 self.DeletePage(idx) |
|
1881 self.RefreshTitle() |
|
1882 self.RefreshEditMenu() |
|
1883 self.RefreshProjectTree() |
|
1884 event.Skip() |
|
1885 |
|
1886 def OnRemoveResourceMenu(self, event): |
|
1887 selected = self.ProjectTree.GetSelection() |
|
1888 if self.ProjectTree.GetPyData(selected) == ITEM_RESOURCE: |
|
1889 resource = self.ProjectTree.GetItemText(selected) |
|
1890 item = self.ProjectTree.GetItemParent(selected) |
|
1891 item_type = self.ProjectTree.GetPyData(item) |
|
1892 while item_type != ITEM_CONFIGURATION: |
|
1893 item = self.ProjectTree.GetItemParent(item) |
|
1894 item_type = self.ProjectTree.GetPyData(item) |
|
1895 config_name = self.ProjectTree.GetItemText(item) |
|
1896 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
|
1897 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
|
1898 idx = self.IsOpened(tagname) |
|
1899 if idx is not None: |
|
1900 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
1901 self.DeletePage(idx) |
|
1902 self.RefreshTitle() |
|
1903 self.RefreshEditMenu() |
|
1904 self.RefreshProjectTree() |
1743 event.Skip() |
1905 event.Skip() |
1744 |
1906 |
1745 def OnPLCOpenMenu(self, event): |
1907 def OnPLCOpenMenu(self, event): |
1746 result = OpenPDFDoc() |
1908 result = OpenPDFDoc() |
1747 if type(result) == StringType: |
1909 if type(result) == StringType: |