301 self._init_coll_HelpMenu_Items(self.HelpMenu) |
307 self._init_coll_HelpMenu_Items(self.HelpMenu) |
302 self._init_coll_SFCMenu_Items(self.SFCMenu) |
308 self._init_coll_SFCMenu_Items(self.SFCMenu) |
303 self._init_coll_ConfigMenu_Items(self.ConfigMenu) |
309 self._init_coll_ConfigMenu_Items(self.ConfigMenu) |
304 |
310 |
305 def _init_ctrls(self, prnt): |
311 def _init_ctrls(self, prnt): |
306 wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', |
312 if wx.VERSION >= (2, 8, 0): |
307 parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600), |
313 wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', |
308 style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor') |
314 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
|
315 style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor') |
|
316 else: |
|
317 wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', |
|
318 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
|
319 style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor') |
309 self._init_utils() |
320 self._init_utils() |
310 self.SetClientSize(wx.Size(1000, 600)) |
321 self.SetClientSize(wx.Size(1000, 600)) |
311 self.SetMenuBar(self.menuBar1) |
322 self.SetMenuBar(self.menuBar1) |
312 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) |
323 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) |
313 if not self.ModeSolo: |
324 if not self.ModeSolo: |
|
325 self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=ID_PLCOPENEDITORFILEMENUITEMS2) |
314 self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5) |
326 self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5) |
315 accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)]) |
327 accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 119, ID_PLCOPENEDITORFILEMENUITEMS2), |
|
328 wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)]) |
316 self.SetAcceleratorTable(accel) |
329 self.SetAcceleratorTable(accel) |
317 |
330 |
318 if wx.VERSION >= (2, 8, 0): |
331 if wx.VERSION >= (2, 8, 0): |
319 self.AUIManager = wx.aui.AuiManager(self) |
332 self.AUIManager = wx.aui.AuiManager(self) |
|
333 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
320 self.Panes = {} |
334 self.Panes = {} |
321 |
335 |
322 if wx.VERSION < (2, 8, 0): |
336 if wx.VERSION < (2, 8, 0): |
323 self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER, |
337 self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER, |
324 name='MainSplitter', parent=self, point=wx.Point(0, 0), |
338 name='MainSplitter', parent=self, point=wx.Point(0, 0), |
373 |
387 |
374 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
388 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
375 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
389 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
376 |
390 |
377 if wx.VERSION < (2, 8, 0): |
391 if wx.VERSION < (2, 8, 0): |
|
392 self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER, |
|
393 name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0), |
|
394 size=wx.Size(0, 0), style=wx.SP_3D) |
|
395 self.SecondSplitter.SetMinimumPaneSize(1) |
|
396 |
|
397 self.MainSplitter.SplitVertically(self.ProjectTree, self.SecondSplitter, 200) |
|
398 |
378 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
399 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
379 name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0, |
400 name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0, |
380 0), size=wx.Size(0, 0), style=0) |
401 0), size=wx.Size(0, 0), style=0) |
381 self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200) |
402 if wx.VERSION >= (2, 6, 0): |
382 else: |
403 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
383 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
404 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
384 name='TabsOpened', parent=self, pos=wx.Point(0, |
405 else: |
385 0), size=wx.Size(0, 0), style=0) |
406 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED, |
386 self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().Name("TabsOpened").CenterPane()) |
407 self.OnPouSelectedChanged) |
387 |
408 |
388 if wx.VERSION >= (2, 6, 0): |
409 if wx.VERSION < (2, 8, 0): |
389 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
410 self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self.Controler) |
390 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
411 |
391 else: |
412 self.SecondSplitter.SplitHorizontally(self.TabsOpened, self.VariablePanelIndexer, -200) |
392 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED, |
413 else: |
393 self.OnPouSelectedChanged) |
414 self.VariablePanelIndexer = VariablePanelIndexer(self, self.Controler) |
394 |
415 self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variable Panel").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False)) |
395 if wx.VERSION > (2, 8, 0): |
416 |
396 self.AUIManager.Update(); |
417 self.AUIManager.Update(); |
397 |
418 |
398 def __init__(self, parent, controler = None, fileOpen = None): |
419 def __init__(self, parent, controler = None, fileOpen = None): |
399 self.ModeSolo = controler == None |
420 self.ModeSolo = controler == None |
|
421 if self.ModeSolo: |
|
422 self.Controler = PLCControler() |
|
423 if fileOpen is not None: |
|
424 self.Controler.OpenXMLFile(fileOpen) |
|
425 else: |
|
426 self.Controler = controler |
|
427 |
400 self._init_ctrls(parent) |
428 self._init_ctrls(parent) |
401 |
429 |
402 if wx.Platform != '__WXMSW__': |
430 if wx.Platform != '__WXMSW__': |
403 self.TreeImageList = wx.ImageList(16, 16) |
431 self.TreeImageList = wx.ImageList(16, 16) |
404 for language in LANGUAGES: |
432 for language in LANGUAGES: |
405 self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language))) |
433 self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language))) |
406 self.ProjectTree.AssignImageList(self.TreeImageList) |
434 self.ProjectTree.AssignImageList(self.TreeImageList) |
407 |
435 |
408 if self.ModeSolo: |
|
409 self.Controler = PLCControler() |
|
410 if fileOpen: |
|
411 self.Controler.OpenXMLFile(fileOpen) |
|
412 self.RefreshProjectTree() |
|
413 else: |
|
414 self.Controler = controler |
|
415 self.RefreshProjectTree() |
|
416 |
|
417 self.CurrentToolBar = [] |
436 self.CurrentToolBar = [] |
418 self.CurrentLanguage = "" |
437 self.CurrentLanguage = "" |
419 self.CopyBuffer = None |
438 self.CopyBuffer = None |
420 self.DrawingMode = FREEDRAWING_MODE |
439 self.DrawingMode = FREEDRAWING_MODE |
421 #self.DrawingMode = DRIVENDRAWING_MODE |
440 #self.DrawingMode = DRIVENDRAWING_MODE |
422 |
441 |
|
442 if not self.ModeSolo or fileOpen is not None: |
|
443 self.RefreshProjectTree() |
|
444 |
423 self.RefreshFileMenu() |
445 self.RefreshFileMenu() |
424 self.RefreshEditMenu() |
446 self.RefreshEditMenu() |
425 self.RefreshTitle() |
447 self.RefreshTitle() |
426 self.RefreshToolBar() |
448 self.RefreshToolBar() |
427 |
449 |
|
450 def GetPageCount(self): |
|
451 if wx.VERSION >= (2, 8, 0): |
|
452 notebook = self.GetNotebook() |
|
453 if notebook is not None: |
|
454 return notebook.GetPageCount() |
|
455 else: |
|
456 return 0 |
|
457 else: |
|
458 return self.TabsOpened.GetPageCount() |
|
459 |
|
460 def GetPage(self, idx): |
|
461 if wx.VERSION >= (2, 8, 0): |
|
462 notebook = self.GetNotebook() |
|
463 if notebook is not None: |
|
464 return notebook.GetPage(idx).GetViewer() |
|
465 else: |
|
466 return None |
|
467 else: |
|
468 return self.TabsOpened.GetPage(idx) |
|
469 |
|
470 def GetPageSelection(self): |
|
471 if wx.VERSION >= (2, 8, 0): |
|
472 notebook = self.GetNotebook() |
|
473 if notebook is not None: |
|
474 return notebook.GetSelection() |
|
475 else: |
|
476 return -1 |
|
477 else: |
|
478 return self.TabsOpened.GetSelection() |
|
479 |
|
480 def SetPageSelection(self, idx): |
|
481 if wx.VERSION >= (2, 8, 0): |
|
482 notebook = self.GetNotebook() |
|
483 if notebook is not None: |
|
484 notebook.SetSelection(idx) |
|
485 else: |
|
486 self.TabsOpened.SetSelection(idx) |
|
487 |
|
488 def DeletePage(self, idx): |
|
489 if wx.VERSION >= (2, 8, 0): |
|
490 notebook = self.GetNotebook() |
|
491 if notebook is not None: |
|
492 notebook.DeletePage(idx) |
|
493 else: |
|
494 self.TabsOpened.DeletePage(idx) |
|
495 |
|
496 def DeleteAllPages(self): |
|
497 if wx.VERSION >= (2, 8, 0): |
|
498 notebook = self.GetNotebook() |
|
499 if notebook is not None: |
|
500 for idx in xrange(notebook.GetPageCount()): |
|
501 notebook.DeletePage(idx) |
|
502 else: |
|
503 self.TabsOpened.DeleteAllPages() |
|
504 |
|
505 def SetPageText(self, idx, text): |
|
506 if wx.VERSION >= (2, 8, 0): |
|
507 notebook = self.GetNotebook() |
|
508 if notebook is not None: |
|
509 return notebook.SetPageText(idx, text) |
|
510 else: |
|
511 return self.TabsOpened.SetPageText(idx, text) |
|
512 |
|
513 def GetPageText(self, idx): |
|
514 if wx.VERSION >= (2, 8, 0): |
|
515 notebook = self.GetNotebook() |
|
516 if notebook is not None: |
|
517 return notebook.GetPageText(idx) |
|
518 else: |
|
519 return "" |
|
520 else: |
|
521 return self.TabsOpened.GetPageText(idx) |
|
522 |
|
523 def OnPageClose(self, event): |
|
524 selected = self.GetPageSelection() |
|
525 if selected >= 0: |
|
526 tagname = self.GetPage(selected).GetTagName() |
|
527 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
528 if self.GetPageCount() > 0: |
|
529 new_index = min(selected, self.GetPageCount() - 1) |
|
530 tagname = self.GetPage(new_index).GetTagName() |
|
531 self.SetPageSelection(new_index) |
|
532 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
|
533 self.RefreshTitle() |
|
534 self.RefreshFileMenu() |
|
535 self.RefreshEditMenu() |
|
536 self.RefreshToolBar() |
|
537 event.Skip() |
|
538 |
428 def GetCopyBuffer(self): |
539 def GetCopyBuffer(self): |
429 return self.CopyBuffer |
540 return self.CopyBuffer |
430 |
541 |
431 def SetCopyBuffer(self, element): |
542 def SetCopyBuffer(self, element): |
432 self.CopyBuffer = element |
543 self.CopyBuffer = element |
469 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo) |
580 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo) |
470 else: |
581 else: |
471 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False) |
582 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False) |
472 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False) |
583 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False) |
473 if self.Controler.HasOpenedProject(): |
584 if self.Controler.HasOpenedProject(): |
474 if self.TabsOpened.GetPageCount() > 0: |
585 if self.GetPageCount() > 0: |
475 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True) |
586 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True) |
476 else: |
587 else: |
477 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
588 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
478 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True) |
589 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True) |
479 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, True) |
590 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, True) |
480 else: |
591 else: |
481 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
592 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False) |
482 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False) |
593 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False) |
483 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, False) |
594 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, False) |
484 bodytype = self.Controler.GetCurrentElementEditingBodyType() |
|
485 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True) |
595 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True) |
486 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True) |
596 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True) |
487 if self.CopyBuffer is not None: |
597 if self.CopyBuffer is not None: |
488 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True) |
598 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True) |
489 else: |
599 else: |
490 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False) |
600 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False) |
491 |
601 |
492 def RefreshEditor(self): |
602 def RefreshEditor(self, variablepanel = True): |
493 selected = self.TabsOpened.GetSelection() |
603 selected = self.GetPageSelection() |
494 if selected != -1: |
604 if selected != -1: |
495 self.TabsOpened.GetPage(selected).RefreshView() |
605 window = self.GetPage(selected) |
|
606 window.RefreshView() |
|
607 if variablepanel: |
|
608 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
496 |
609 |
497 def ShowProperties(self): |
610 def ShowProperties(self): |
498 old_values = self.Controler.GetProjectProperties() |
611 old_values = self.Controler.GetProjectProperties() |
499 dialog = ProjectDialog(self) |
612 dialog = ProjectDialog(self) |
500 dialog.SetValues(old_values) |
613 dialog.SetValues(old_values) |
550 dialog = wx.FileDialog(self, "Choose a file", directory, "", "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.OPEN) |
664 dialog = wx.FileDialog(self, "Choose a file", directory, "", "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.OPEN) |
551 if dialog.ShowModal() == wx.ID_OK: |
665 if dialog.ShowModal() == wx.ID_OK: |
552 filepath = dialog.GetPath() |
666 filepath = dialog.GetPath() |
553 if os.path.isfile(filepath): |
667 if os.path.isfile(filepath): |
554 self.Controler.OpenXMLFile(filepath) |
668 self.Controler.OpenXMLFile(filepath) |
555 self.TabsOpened.DeleteAllPages() |
669 self.DeleteAllPages() |
556 self.RefreshProjectTree() |
670 self.RefreshProjectTree() |
557 self.RefreshTitle() |
671 self.RefreshTitle() |
558 self.RefreshFileMenu() |
672 self.RefreshFileMenu() |
559 self.RefreshEditMenu() |
673 self.RefreshEditMenu() |
560 self.RefreshToolBar() |
674 self.RefreshToolBar() |
561 dialog.Destroy() |
675 dialog.Destroy() |
562 event.Skip() |
676 event.Skip() |
563 |
677 |
564 def OnCloseTabMenu(self, event): |
678 def OnCloseTabMenu(self, event): |
565 selected = self.TabsOpened.GetSelection() |
679 selected = self.GetPageSelection() |
566 if selected >= 0: |
680 if selected >= 0: |
567 self.Controler.CloseElementEditing() |
681 tagname = self.GetPage(selected).GetTagName() |
568 self.TabsOpened.DeletePage(selected) |
682 self.DeletePage(selected) |
569 if self.TabsOpened.GetPageCount() > 0: |
683 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
570 self.TabsOpened.SetSelection(min(selected, self.TabsOpened.GetPageCount() - 1)) |
684 if self.GetPageCount() > 0: |
|
685 new_index = min(selected, self.GetPageCount() - 1) |
|
686 tagname = self.GetPage(new_index).GetTagName() |
|
687 self.SetPageSelection(new_index) |
|
688 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
571 self.RefreshTitle() |
689 self.RefreshTitle() |
572 self.RefreshFileMenu() |
690 self.RefreshFileMenu() |
573 self.RefreshEditMenu() |
691 self.RefreshEditMenu() |
574 self.RefreshToolBar() |
692 self.RefreshToolBar() |
575 event.Skip() |
693 event.Skip() |
576 |
694 |
577 def OnCloseProjectMenu(self, event): |
695 def OnCloseProjectMenu(self, event): |
578 self.TabsOpened.DeleteAllPages() |
696 self.DeleteAllPages() |
|
697 self.VariablePanelIndexer.RemoveAllPanels() |
579 self.ProjectTree.DeleteAllItems() |
698 self.ProjectTree.DeleteAllItems() |
580 self.Controler.Reset() |
699 self.Controler.Reset() |
581 self.RefreshTitle() |
700 self.RefreshTitle() |
582 self.RefreshFileMenu() |
701 self.RefreshFileMenu() |
583 self.RefreshEditMenu() |
702 self.RefreshEditMenu() |
652 def OnQuitMenu(self, event): |
771 def OnQuitMenu(self, event): |
653 self.Close() |
772 self.Close() |
654 event.Skip() |
773 event.Skip() |
655 |
774 |
656 def ResetCurrentMode(self): |
775 def ResetCurrentMode(self): |
657 selected = self.TabsOpened.GetSelection() |
776 selected = self.GetPageSelection() |
658 if selected != -1: |
777 if selected != -1: |
659 window = self.TabsOpened.GetPage(selected) |
778 window = self.GetPage(selected) |
660 window.SetMode(MODE_SELECTION) |
779 window.SetMode(MODE_SELECTION) |
661 if wx.VERSION < (2, 8, 0): |
780 if wx.VERSION < (2, 8, 0): |
662 self.ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True) |
781 ToolBar = self.ToolBar |
663 else: |
782 else: |
664 self.Panes["ToolBar"].ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True) |
783 ToolBar = self.Panes["ToolBar"] |
665 |
784 if ToolBar: |
|
785 ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True) |
|
786 |
666 def ResetToolToggle(self, id): |
787 def ResetToolToggle(self, id): |
667 if wx.VERSION < (2, 8, 0): |
788 if wx.VERSION < (2, 8, 0): |
668 tool = self.ToolBar.FindById(id) |
789 tool = self.ToolBar.FindById(id) |
669 else: |
790 else: |
670 tool = self.Panes["ToolBar"].FindById(id) |
791 tool = self.Panes["ToolBar"].FindById(id) |
671 tool.SetToggle(False) |
792 tool.SetToggle(False) |
672 |
793 |
673 def OnSelectionTool(self, event): |
794 def OnSelectionTool(self, event): |
674 selected = self.TabsOpened.GetSelection() |
795 self.GetPageSelection() |
675 if selected != -1: |
796 if selected != -1: |
676 self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION) |
797 self.GetPage(selected).SetMode(MODE_SELECTION) |
677 event.Skip() |
798 event.Skip() |
678 |
799 |
679 def OnCommentTool(self, event): |
800 def OnCommentTool(self, event): |
680 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT) |
801 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT) |
681 selected = self.TabsOpened.GetSelection() |
802 selected = self.GetPageSelection() |
682 if selected != -1: |
803 if selected != -1: |
683 self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT) |
804 self.GetPage(selected).SetMode(MODE_COMMENT) |
684 event.Skip() |
805 event.Skip() |
685 |
806 |
686 def OnVariableTool(self, event): |
807 def OnVariableTool(self, event): |
687 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE) |
808 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE) |
688 selected = self.TabsOpened.GetSelection() |
809 selected = self.GetPageSelection() |
689 if selected != -1: |
810 if selected != -1: |
690 self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE) |
811 self.GetPage(selected).SetMode(MODE_VARIABLE) |
691 event.Skip() |
812 event.Skip() |
692 |
813 |
693 def OnBlockTool(self, event): |
814 def OnBlockTool(self, event): |
694 selected = self.TabsOpened.GetSelection() |
815 selected = self.GetPageSelection() |
695 if selected != -1: |
816 if selected != -1: |
696 self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK) |
817 self.GetPage(selected).SetMode(MODE_BLOCK) |
697 event.Skip() |
818 event.Skip() |
698 |
819 |
699 def OnConnectionTool(self, event): |
820 def OnConnectionTool(self, event): |
700 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION) |
821 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION) |
701 selected = self.TabsOpened.GetSelection() |
822 selected = self.GetPageSelection() |
702 if selected != -1: |
823 if selected != -1: |
703 self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION) |
824 self.GetPage(selected).SetMode(MODE_CONNECTION) |
704 event.Skip() |
825 event.Skip() |
705 |
826 |
706 def OnWireTool(self, event): |
827 def OnWireTool(self, event): |
707 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARWIRE) |
828 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARWIRE) |
708 selected = self.TabsOpened.GetSelection() |
829 selected = self.GetPageSelection() |
709 if selected != -1: |
830 if selected != -1: |
710 self.TabsOpened.GetPage(selected).SetMode(MODE_WIRE) |
831 self.GetPage(selected).SetMode(MODE_WIRE) |
711 event.Skip() |
832 event.Skip() |
712 |
833 |
713 def OnPowerRailTool(self, event): |
834 def OnPowerRailTool(self, event): |
714 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL) |
835 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL) |
715 selected = self.TabsOpened.GetSelection() |
836 selected = self.GetPageSelection() |
716 if selected != -1: |
837 if selected != -1: |
717 self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL) |
838 self.GetPage(selected).SetMode(MODE_POWERRAIL) |
718 event.Skip() |
839 event.Skip() |
719 |
840 |
720 def OnRungTool(self, event): |
841 def OnRungTool(self, event): |
721 selected = self.TabsOpened.GetSelection() |
842 selected = self.GetPageSelection() |
722 if selected != -1: |
843 if selected != -1: |
723 self.TabsOpened.GetPage(selected).Viewer.AddLadderRung() |
844 self.GetPage(selected).AddLadderRung() |
724 event.Skip() |
845 event.Skip() |
725 |
846 |
726 def OnCoilTool(self, event): |
847 def OnCoilTool(self, event): |
727 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL) |
848 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL) |
728 selected = self.TabsOpened.GetSelection() |
849 selected = self.GetPageSelection() |
729 if selected != -1: |
850 if selected != -1: |
730 self.TabsOpened.GetPage(selected).SetMode(MODE_COIL) |
851 self.GetPage(selected).SetMode(MODE_COIL) |
731 event.Skip() |
852 event.Skip() |
732 |
853 |
733 def OnContactTool(self, event): |
854 def OnContactTool(self, event): |
734 if self.DrawingMode == FREEDRAWING_MODE: |
855 if self.DrawingMode == FREEDRAWING_MODE: |
735 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT) |
856 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT) |
736 selected = self.TabsOpened.GetSelection() |
857 selected = self.GetPageSelection() |
737 if selected != -1: |
858 if selected != -1: |
738 if self.DrawingMode == FREEDRAWING_MODE: |
859 if self.DrawingMode == FREEDRAWING_MODE: |
739 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT) |
860 self.GetPage(selected).SetMode(MODE_CONTACT) |
740 else: |
861 else: |
741 self.TabsOpened.GetPage(selected).Viewer.AddLadderContact() |
862 self.GetPage(selected).AddLadderContact() |
742 event.Skip() |
863 event.Skip() |
743 |
864 |
744 def OnBranchTool(self, event): |
865 def OnBranchTool(self, event): |
745 selected = self.TabsOpened.GetSelection() |
866 selected = self.GetPageSelection() |
746 if selected != -1: |
867 if selected != -1: |
747 self.TabsOpened.GetPage(selected).Viewer.AddLadderBranch() |
868 self.GetPage(selected).AddLadderBranch() |
748 event.Skip() |
869 event.Skip() |
749 |
870 |
750 def OnInitialStepTool(self, event): |
871 def OnInitialStepTool(self, event): |
751 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP) |
872 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP) |
752 selected = self.TabsOpened.GetSelection() |
873 selected = self.GetPageSelection() |
753 if selected != -1: |
874 if selected != -1: |
754 self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP) |
875 self.GetPage(selected).SetMode(MODE_INITIALSTEP) |
755 event.Skip() |
876 event.Skip() |
756 |
877 |
757 def OnStepTool(self, event): |
878 def OnStepTool(self, event): |
758 if self.GetDrawingMode() == FREEDRAWING_MODE: |
879 if self.GetDrawingMode() == FREEDRAWING_MODE: |
759 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP) |
880 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP) |
760 selected = self.TabsOpened.GetSelection() |
881 selected = self.GetPageSelection() |
761 if selected != -1: |
882 if selected != -1: |
762 if self.GetDrawingMode() == FREEDRAWING_MODE: |
883 if self.GetDrawingMode() == FREEDRAWING_MODE: |
763 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP) |
884 self.GetPage(selected).SetMode(MODE_STEP) |
764 else: |
885 else: |
765 self.TabsOpened.GetPage(selected).Viewer.AddStep() |
886 self.GetPage(selected).AddStep() |
766 event.Skip() |
887 event.Skip() |
767 |
888 |
768 def OnActionBlockTool(self, event): |
889 def OnActionBlockTool(self, event): |
769 if self.GetDrawingMode() == FREEDRAWING_MODE: |
890 if self.GetDrawingMode() == FREEDRAWING_MODE: |
770 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK) |
891 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK) |
771 selected = self.TabsOpened.GetSelection() |
892 selected = self.GetPageSelection() |
772 if selected != -1: |
893 if selected != -1: |
773 if self.GetDrawingMode() == FREEDRAWING_MODE: |
894 if self.GetDrawingMode() == FREEDRAWING_MODE: |
774 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION) |
895 self.GetPage(selected).SetMode(MODE_ACTION) |
775 else: |
896 else: |
776 self.TabsOpened.GetPage(selected).Viewer.AddStepAction() |
897 self.GetPage(selected).AddStepAction() |
777 event.Skip() |
898 event.Skip() |
778 |
899 |
779 def OnTransitionTool(self, event): |
900 def OnTransitionTool(self, event): |
780 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION) |
901 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION) |
781 selected = self.TabsOpened.GetSelection() |
902 selected = self.GetPageSelection() |
782 if selected != -1: |
903 if selected != -1: |
783 self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION) |
904 self.GetPage(selected).SetMode(MODE_TRANSITION) |
784 event.Skip() |
905 event.Skip() |
785 |
906 |
786 def OnDivergenceTool(self, event): |
907 def OnDivergenceTool(self, event): |
787 if self.GetDrawingMode() == FREEDRAWING_MODE: |
908 if self.GetDrawingMode() == FREEDRAWING_MODE: |
788 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE) |
909 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE) |
789 selected = self.TabsOpened.GetSelection() |
910 selected = self.GetPageSelection() |
790 if selected != -1: |
911 if selected != -1: |
791 if self.GetDrawingMode() == FREEDRAWING_MODE: |
912 if self.GetDrawingMode() == FREEDRAWING_MODE: |
792 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE) |
913 self.GetPage(selected).SetMode(MODE_DIVERGENCE) |
793 else: |
914 else: |
794 self.TabsOpened.GetPage(selected).Viewer.AddDivergence() |
915 self.GetPage(selected).AddDivergence() |
795 event.Skip() |
916 event.Skip() |
796 |
917 |
797 def OnJumpTool(self, event): |
918 def OnJumpTool(self, event): |
798 if self.GetDrawingMode() == FREEDRAWING_MODE: |
919 if self.GetDrawingMode() == FREEDRAWING_MODE: |
799 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP) |
920 self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP) |
800 selected = self.TabsOpened.GetSelection() |
921 selected = self.GetPageSelection() |
801 if selected != -1: |
922 if selected != -1: |
802 if self.GetDrawingMode() == FREEDRAWING_MODE: |
923 if self.GetDrawingMode() == FREEDRAWING_MODE: |
803 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP) |
924 self.GetPage(selected).SetMode(MODE_JUMP) |
804 else: |
925 else: |
805 self.TabsOpened.GetPage(selected).Viewer.AddJump() |
926 self.GetPage(selected).AddJump() |
806 event.Skip() |
927 event.Skip() |
807 |
928 |
808 def OnPouSelectedChanged(self, event): |
929 def OnPouSelectedChanged(self, event): |
809 old_selected = self.TabsOpened.GetSelection() |
930 if wx.VERSION < (2, 8, 0) or event.GetActive(): |
810 if old_selected >= 0: |
931 old_selected = self.GetPageSelection() |
811 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
932 if old_selected >= 0: |
812 selected = event.GetSelection() |
933 self.GetPage(old_selected).ResetBuffer() |
813 if selected >= 0: |
934 if wx.VERSION >= (2, 8, 0): |
814 self.Controler.RefreshCurrentElementEditing(selected) |
935 window = event.GetEventObject().GetViewer() |
815 found = False |
936 else: |
816 name = self.TabsOpened.GetPageText(selected) |
937 selected = event.GetSelection() |
817 if self.ProjectTree: |
938 if selected >= 0: |
818 root = self.ProjectTree.GetRootItem() |
939 window = self.GetPage(selected) |
819 if wx.VERSION >= (2, 6, 0): |
|
820 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
|
821 else: |
940 else: |
822 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
941 window = None |
823 while item.IsOk() and not found: |
942 if window: |
824 if self.ProjectTree.GetItemText(item) == name: |
943 ## found = False |
825 self.ProjectTree.SelectItem(item) |
944 ## words = window.GetTagName().split("::") |
826 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
945 ## if self.ProjectTree: |
827 self.TabsOpened.GetPage(selected).RefreshView() |
946 ## root = self.ProjectTree.GetRootItem() |
828 self.RefreshFileMenu() |
947 ## if wx.VERSION >= (2, 6, 0): |
829 self.RefreshEditMenu() |
948 ## item, root_cookie = self.ProjectTree.GetFirstChild(root) |
830 self.RefreshToolBar() |
949 ## else: |
|
950 ## item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
|
951 ## while item.IsOk() and not found: |
|
952 ## if self.ProjectTree.GetItemText(item) == words[1]: |
|
953 ## self.ProjectTree.SelectItem(item) |
|
954 ## item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
955 window.RefreshView() |
|
956 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
|
957 self.RefreshFileMenu() |
|
958 self.RefreshEditMenu() |
|
959 self.RefreshToolBar() |
831 event.Skip() |
960 event.Skip() |
832 |
961 |
833 def OnProjectTreeBeginDrag(self, event): |
962 def OnProjectTreeBeginDrag(self, event): |
834 item = event.GetItem() |
963 item = event.GetItem() |
835 if self.ProjectTree.GetPyData(item) == ITEM_POU: |
964 if self.ProjectTree.GetPyData(item) == ITEM_POU: |
976 self.ProjectTree.Expand(selected) |
1105 self.ProjectTree.Expand(selected) |
977 name = self.ProjectTree.GetItemText(selected) |
1106 name = self.ProjectTree.GetItemText(selected) |
978 data = self.ProjectTree.GetPyData(selected) |
1107 data = self.ProjectTree.GetPyData(selected) |
979 if name == "Properties": |
1108 if name == "Properties": |
980 self.ShowProperties() |
1109 self.ShowProperties() |
981 if data in [ITEM_POU, ITEM_CONFIGURATION]: |
1110 if data == ITEM_POU: |
982 self.EditProjectElement(data, name) |
1111 self.EditProjectElement(data, self.Controler.ComputePouName(name)) |
|
1112 elif data == ITEM_CONFIGURATION: |
|
1113 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name)) |
983 elif data == ITEM_RESOURCE: |
1114 elif data == ITEM_RESOURCE: |
984 item = self.ProjectTree.GetItemParent(selected) |
1115 item = self.ProjectTree.GetItemParent(selected) |
985 item_type = self.ProjectTree.GetPyData(item) |
1116 item_type = self.ProjectTree.GetPyData(item) |
986 while item_type != ITEM_CONFIGURATION: |
1117 while item_type != ITEM_CONFIGURATION: |
987 item = self.ProjectTree.GetItemParent(item) |
1118 item = self.ProjectTree.GetItemParent(item) |
988 item_type = self.ProjectTree.GetPyData(item) |
1119 item_type = self.ProjectTree.GetPyData(item) |
989 config_name = self.ProjectTree.GetItemText(item) |
1120 config_name = self.ProjectTree.GetItemText(item) |
990 self.EditProjectElement(data, "%s::%s"%(config_name, name)) |
1121 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name)) |
991 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
1122 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
992 item = self.ProjectTree.GetItemParent(selected) |
1123 item = self.ProjectTree.GetItemParent(selected) |
993 item_type = self.ProjectTree.GetPyData(item) |
1124 item_type = self.ProjectTree.GetPyData(item) |
994 while item_type != ITEM_POU: |
1125 while item_type != ITEM_POU: |
995 item = self.ProjectTree.GetItemParent(item) |
1126 item = self.ProjectTree.GetItemParent(item) |
996 item_type = self.ProjectTree.GetPyData(item) |
1127 item_type = self.ProjectTree.GetPyData(item) |
997 pou_name = self.ProjectTree.GetItemText(item) |
1128 pou_name = self.ProjectTree.GetItemText(item) |
998 self.EditProjectElement(data, "%s::%s"%(pou_name, name)) |
1129 if data == ITEM_TRANSITION: |
|
1130 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
|
1131 elif data == ITEM_ACTION: |
|
1132 tagname = self.Controler.ComputePouActionName(pou_name, name) |
|
1133 self.EditProjectElement(data, tagname) |
999 |
1134 |
1000 def OnProjectTreeItemSelected(self, event): |
1135 def OnProjectTreeItemSelected(self, event): |
1001 selected = event.GetItem() |
1136 selected = event.GetItem() |
1002 name = self.ProjectTree.GetItemText(selected) |
1137 name = self.ProjectTree.GetItemText(selected) |
1003 data = self.ProjectTree.GetPyData(selected) |
1138 data = self.ProjectTree.GetPyData(selected) |
1004 if data in [ITEM_POU, ITEM_CONFIGURATION]: |
1139 if data == ITEM_POU: |
1005 self.EditProjectElement(data, name, True) |
1140 self.EditProjectElement(data, self.Controler.ComputePouName(name), True) |
|
1141 elif data == ITEM_CONFIGURATION: |
|
1142 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True) |
1006 elif data == ITEM_RESOURCE: |
1143 elif data == ITEM_RESOURCE: |
1007 item = self.ProjectTree.GetItemParent(selected) |
1144 item = self.ProjectTree.GetItemParent(selected) |
1008 item_type = self.ProjectTree.GetPyData(item) |
1145 item_type = self.ProjectTree.GetPyData(item) |
1009 while item_type != ITEM_CONFIGURATION: |
1146 while item_type != ITEM_CONFIGURATION: |
1010 item = self.ProjectTree.GetItemParent(item) |
1147 item = self.ProjectTree.GetItemParent(item) |
1011 item_type = self.ProjectTree.GetPyData(item) |
1148 item_type = self.ProjectTree.GetPyData(item) |
1012 config_name = self.ProjectTree.GetItemText(item) |
1149 config_name = self.ProjectTree.GetItemText(item) |
1013 self.EditProjectElement(data, "%s::%s"%(config_name, name), True) |
1150 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True) |
1014 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
1151 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
1015 item = self.ProjectTree.GetItemParent(selected) |
1152 item = self.ProjectTree.GetItemParent(selected) |
1016 item_type = self.ProjectTree.GetPyData(item) |
1153 item_type = self.ProjectTree.GetPyData(item) |
1017 while item_type != ITEM_POU: |
1154 while item_type != ITEM_POU: |
1018 item = self.ProjectTree.GetItemParent(item) |
1155 item = self.ProjectTree.GetItemParent(item) |
1019 item_type = self.ProjectTree.GetPyData(item) |
1156 item_type = self.ProjectTree.GetPyData(item) |
1020 pou_name = self.ProjectTree.GetItemText(item) |
1157 pou_name = self.ProjectTree.GetItemText(item) |
1021 self.EditProjectElement(data, "%s::%s"%(pou_name, name), True) |
1158 if data == ITEM_TRANSITION: |
1022 event.Skip() |
1159 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
1023 |
1160 elif data == ITEM_ACTION: |
1024 def EditProjectElement(self, elementtype, elementname, onlyopened = False): |
1161 tagname = self.Controler.ComputePouActionName(pou_name, name) |
1025 idx = None |
1162 self.EditProjectElement(data, tagname, True) |
1026 names = elementname.split("::") |
1163 event.Skip() |
1027 if elementtype == ITEM_CONFIGURATION and len(names) == 1: |
1164 |
1028 if not onlyopened: |
1165 def IsOpened(self, tagname): |
1029 idx = self.Controler.OpenConfigurationEditing(*names) |
1166 for idx in xrange(self.GetPageCount()): |
1030 if idx is not None: |
1167 if self.GetPage(idx).IsViewing(tagname): |
1031 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = names[0]) |
1168 return idx |
1032 new_window.SetIndex(idx) |
1169 return None |
|
1170 |
|
1171 def EditProjectElement(self, elementtype, tagname, onlyopened = False): |
|
1172 openedidx = self.IsOpened(tagname) |
|
1173 if openedidx is not None: |
|
1174 old_selected = self.GetPageSelection() |
|
1175 if old_selected != openedidx: |
|
1176 if old_selected >= 0: |
|
1177 self.GetPage(old_selected).ResetBuffer() |
|
1178 self.SetPageSelection(openedidx) |
|
1179 self.GetPage(openedidx).RefreshView() |
|
1180 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
|
1181 self.RefreshPageTitles() |
|
1182 self.RefreshFileMenu() |
|
1183 self.RefreshEditMenu() |
|
1184 self.RefreshToolBar() |
|
1185 elif not onlyopened: |
|
1186 if wx.VERSION >= (2, 8, 0): |
|
1187 if elementtype == ITEM_CONFIGURATION: |
|
1188 new_window = MDIConfigurationEditor(self, tagname, self, self.Controler) |
|
1189 self.VariablePanelIndexer.AddVariablePanel(tagname, "config") |
|
1190 elif elementtype == ITEM_RESOURCE: |
|
1191 new_window = MDIResourceEditor(self, tagname, self, self.Controler) |
|
1192 self.VariablePanelIndexer.AddVariablePanel(tagname, "resource") |
|
1193 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
|
1194 bodytype = self.Controler.GetEditedElementBodyType(tagname) |
|
1195 if bodytype == "FBD": |
|
1196 new_window = MDIViewer(self, tagname, self, self.Controler) |
|
1197 elif bodytype == "LD": |
|
1198 new_window = LD_MDIViewer(self, tagname, self, self.Controler) |
|
1199 elif bodytype == "SFC": |
|
1200 new_window = SFC_MDIViewer(self, tagname, self, self.Controler) |
|
1201 else: |
|
1202 new_window = TextMDIViewer(self, tagname, self, self.Controler) |
|
1203 viewer = new_window.GetViewer() |
|
1204 viewer.SetTextSyntax(elementtype) |
|
1205 if bodytype == "IL": |
|
1206 viewer.SetKeywords(IL_KEYWORDS) |
|
1207 else: |
|
1208 viewer.SetKeywords(ST_KEYWORDS) |
|
1209 new_window.Bind(wx.EVT_ACTIVATE, self.OnPouSelectedChanged) |
|
1210 new_window.Bind(wx.EVT_CLOSE, self.OnPageClose) |
|
1211 else: |
|
1212 if elementtype == ITEM_CONFIGURATION: |
|
1213 new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler) |
1033 self.TabsOpened.AddPage(new_window, "") |
1214 self.TabsOpened.AddPage(new_window, "") |
1034 if idx is None: |
1215 self.VariablePanelIndexer.AddVariablePanel(tagname, "config") |
1035 idx = self.Controler.ChangeConfigurationEditing(*names) |
1216 elif elementtype == ITEM_RESOURCE: |
1036 elif elementtype == ITEM_RESOURCE and len(names) == 2: |
1217 new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) |
1037 if not onlyopened: |
|
1038 idx = self.Controler.OpenConfigurationResourceEditing(*names) |
|
1039 if idx is not None: |
|
1040 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = names[0], resource_name = names[1]) |
|
1041 new_window.SetIndex(idx) |
|
1042 self.TabsOpened.AddPage(new_window, "") |
1218 self.TabsOpened.AddPage(new_window, "") |
1043 if idx is None: |
1219 self.VariablePanelIndexer.AddVariablePanel(tagname, "resource") |
1044 idx = self.Controler.ChangeConfigurationResourceEditing(*names) |
1220 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
1045 elif elementtype == ITEM_POU and len(names) == 1: |
1221 bodytype = self.Controler.GetEditedElementBodyType(tagname) |
1046 if not onlyopened: |
1222 if bodytype == "FBD": |
1047 idx = self.Controler.OpenPouEditing(*names) |
1223 new_window = Viewer(self.TabsOpened, tagname, self, self.Controler) |
1048 if idx != None: |
1224 elif bodytype == "LD": |
1049 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(names[0]), pou_name = names[0]) |
1225 new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler) |
1050 new_window.SetIndex(idx) |
1226 elif bodytype == "SFC": |
|
1227 new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler) |
|
1228 else: |
|
1229 new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler) |
|
1230 new_window.SetTextSyntax(elementtype) |
|
1231 if bodytype == "IL": |
|
1232 new_window.SetKeywords(IL_KEYWORDS) |
|
1233 else: |
|
1234 new_window.SetKeywords(ST_KEYWORDS) |
1051 self.TabsOpened.AddPage(new_window, "") |
1235 self.TabsOpened.AddPage(new_window, "") |
1052 if idx is None: |
1236 if elementtype == ITEM_POU: |
1053 idx = self.Controler.ChangePouEditing(*names) |
1237 words = tagname.split("::") |
1054 elif elementtype == ITEM_TRANSITION and len(names) == 2: |
1238 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1])) |
1055 if not onlyopened: |
1239 elif elementtype == ITEM_TRANSITION: |
1056 idx = self.Controler.OpenPouTransitionEditing(*names) |
1240 self.VariablePanelIndexer.AddVariablePanel(tagname, "transition") |
1057 if idx is not None: |
1241 elif elementtype == ITEM_TRANSITION: |
1058 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = names[0], transition_name = names[1]) |
1242 self.VariablePanelIndexer.AddVariablePanel(tagname, "action") |
1059 new_window.SetIndex(idx) |
1243 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
1060 self.TabsOpened.AddPage(new_window, "") |
1244 openedidx = self.IsOpened(tagname) |
1061 if idx is None: |
1245 old_selected = self.GetPageSelection() |
1062 idx = self.Controler.ChangePouTransitionEditing(*names) |
1246 if old_selected != openedidx: |
1063 elif elementtype == ITEM_ACTION and len(names) == 2: |
1247 if old_selected >= 0: |
1064 if not onlyopened: |
1248 self.GetPage(old_selected).ResetBuffer() |
1065 idx = self.Controler.OpenPouActionEditing(*names) |
1249 for i in xrange(self.GetPageCount()): |
1066 if idx is not None: |
1250 window = self.GetPage(i) |
1067 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = names[0], action_name = names[1]) |
1251 if window.GetTagName() == tagname: |
1068 new_window.SetIndex(idx) |
1252 self.SetPageSelection(i) |
1069 self.TabsOpened.AddPage(new_window, "") |
|
1070 if idx is None: |
|
1071 idx = self.Controler.ChangePouActionEditing(*names) |
|
1072 if idx != None: |
|
1073 old_selected = self.TabsOpened.GetSelection() |
|
1074 if old_selected >= 0: |
|
1075 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
1076 for i in xrange(self.TabsOpened.GetPageCount()): |
|
1077 window = self.TabsOpened.GetPage(i) |
|
1078 if window.GetIndex() == idx: |
|
1079 self.TabsOpened.SetSelection(i) |
|
1080 window.RefreshView() |
1253 window.RefreshView() |
1081 self.RefreshTabsOpenedTitles() |
1254 self.RefreshPageTitles() |
1082 self.RefreshFileMenu() |
1255 self.RefreshFileMenu() |
1083 self.RefreshEditMenu() |
1256 self.RefreshEditMenu() |
1084 self.RefreshToolBar() |
1257 self.RefreshToolBar() |
1085 return |
|
1086 |
1258 |
1087 def OnProjectTreeRightUp(self, event): |
1259 def OnProjectTreeRightUp(self, event): |
1088 cursor_pos = event.GetPosition() |
1260 cursor_pos = event.GetPosition() |
1089 selected = self.ProjectTree.GetSelection() |
1261 selected = self.ProjectTree.GetSelection() |
1090 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1262 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1135 |
1307 |
1136 if wx.VERSION < (2, 8, 0): |
1308 if wx.VERSION < (2, 8, 0): |
1137 ToolBar = self.ToolBar |
1309 ToolBar = self.ToolBar |
1138 else: |
1310 else: |
1139 ToolBar = self.Panes["ToolBar"] |
1311 ToolBar = self.Panes["ToolBar"] |
1140 ToolBar.DeleteTool(item) |
1312 if ToolBar: |
1141 ToolBar.Realize() |
1313 ToolBar.DeleteTool(item) |
1142 if wx.VERSION >= (2, 8, 0): |
1314 ToolBar.Realize() |
1143 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
1315 if wx.VERSION >= (2, 8, 0): |
1144 self.AUIManager.Update() |
1316 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
|
1317 self.AUIManager.Update() |
1145 |
1318 |
1146 def RefreshToolBar(self): |
1319 def RefreshToolBar(self): |
1147 language = self.Controler.GetCurrentElementEditingBodyType() |
1320 selected = self.GetPageSelection() |
1148 if language and language != self.CurrentLanguage: |
1321 if selected != -1: |
|
1322 language = self.Controler.GetEditedElementBodyType(self.GetPage(selected).GetTagName()) |
|
1323 else: |
|
1324 language = None |
|
1325 if language is not None and language != self.CurrentLanguage: |
1149 self.ResetToolBar() |
1326 self.ResetToolBar() |
1150 self.CurrentLanguage = language |
1327 self.CurrentLanguage = language |
1151 self.CurrentToolBar = [] |
1328 self.CurrentToolBar = [] |
1152 if wx.VERSION < (2, 8, 0): |
1329 if wx.VERSION < (2, 8, 0): |
1153 ToolBar = self.ToolBar |
1330 ToolBar = self.ToolBar |
1154 else: |
1331 else: |
1155 ToolBar = self.Panes["ToolBar"] |
1332 ToolBar = self.Panes["ToolBar"] |
1156 for radio, modes, id, method, picture, help in ToolBarItems[language]: |
1333 if ToolBar: |
1157 if modes & self.DrawingMode: |
1334 for radio, modes, id, method, picture, help in ToolBarItems[language]: |
1158 if radio or self.DrawingMode == FREEDRAWING_MODE: |
1335 if modes & self.DrawingMode: |
1159 ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help) |
1336 if radio or self.DrawingMode == FREEDRAWING_MODE: |
1160 else: |
1337 ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help) |
1161 ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help) |
1338 else: |
1162 self.Bind(wx.EVT_TOOL, getattr(self, method), id=id) |
1339 ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help) |
1163 self.CurrentToolBar.append(id) |
1340 self.Bind(wx.EVT_TOOL, getattr(self, method), id=id) |
1164 ToolBar.Realize() |
1341 self.CurrentToolBar.append(id) |
1165 if wx.VERSION >= (2, 8, 0): |
1342 ToolBar.Realize() |
1166 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
1343 if wx.VERSION >= (2, 8, 0): |
1167 self.AUIManager.Update() |
1344 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
|
1345 self.AUIManager.Update() |
1168 elif not language: |
1346 elif not language: |
1169 self.ResetToolBar() |
1347 self.ResetToolBar() |
1170 self.CurrentLanguage = language |
1348 self.CurrentLanguage = language |
1171 self.ResetCurrentMode() |
1349 self.ResetCurrentMode() |
1172 |
1350 |
1173 def RefreshTabsOpenedTitles(self): |
1351 def RefreshPageTitles(self): |
1174 pous = self.Controler.GetElementsOpenedNames() |
1352 for idx in xrange(self.GetPageCount()): |
1175 for i, pou in enumerate(pous): |
1353 window = self.GetPage(idx) |
1176 self.TabsOpened.SetPageText(i, pou) |
1354 words = window.GetTagName().split("::") |
|
1355 self.SetPageText(idx, "-".join(words[1:])) |
1177 |
1356 |
1178 def OnRefreshMenu(self, event): |
1357 def OnRefreshMenu(self, event): |
1179 selected = self.TabsOpened.GetSelection() |
1358 selected = self.GetPageSelection() |
1180 if selected != -1: |
1359 if selected != -1: |
1181 self.TabsOpened.GetPage(selected).RefreshView() |
1360 window = self.GetPage(selected) |
1182 self.TabsOpened.GetPage(selected).Refresh() |
1361 window.RefreshView() |
|
1362 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1183 event.Skip() |
1363 event.Skip() |
1184 |
1364 |
1185 def OnUndoMenu(self, event): |
1365 def OnUndoMenu(self, event): |
1186 self.Controler.LoadPrevious() |
1366 self.Controler.LoadPrevious() |
1187 selected = self.TabsOpened.GetSelection() |
1367 selected = self.GetPageSelection() |
1188 if selected != -1: |
1368 if selected != -1: |
1189 self.TabsOpened.GetPage(selected).RefreshView() |
1369 window = self.GetPage(selected) |
1190 self.TabsOpened.GetPage(selected).Refresh() |
1370 window.RefreshView() |
|
1371 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1191 self.RefreshTitle() |
1372 self.RefreshTitle() |
1192 self.RefreshEditMenu() |
1373 self.RefreshEditMenu() |
1193 self.RefreshProjectTree() |
1374 self.RefreshProjectTree() |
1194 event.Skip() |
1375 event.Skip() |
1195 |
1376 |
1196 def OnRedoMenu(self, event): |
1377 def OnRedoMenu(self, event): |
1197 self.Controler.LoadNext() |
1378 self.Controler.LoadNext() |
1198 selected = self.TabsOpened.GetSelection() |
1379 selected = self.GetPageSelection() |
1199 if selected != -1: |
1380 if selected != -1: |
1200 self.TabsOpened.GetPage(selected).RefreshView() |
1381 window = self.GetPage(selected) |
1201 self.TabsOpened.GetPage(selected).Refresh() |
1382 window.RefreshView() |
|
1383 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1202 self.RefreshTitle() |
1384 self.RefreshTitle() |
1203 self.RefreshEditMenu() |
1385 self.RefreshEditMenu() |
1204 self.RefreshProjectTree() |
1386 self.RefreshProjectTree() |
1205 event.Skip() |
1387 event.Skip() |
1206 |
1388 |
1207 def OnCutMenu(self, event): |
1389 def OnCutMenu(self, event): |
1208 selected = self.TabsOpened.GetSelection() |
1390 selected = self.GetPageSelection() |
1209 if selected != -1: |
1391 if selected != -1: |
1210 try: |
1392 try: |
1211 self.TabsOpened.GetPage(selected).Viewer.Cut() |
1393 self.GetPage(selected).Cut() |
1212 except: |
1394 except: |
1213 pass |
1395 pass |
1214 event.Skip() |
1396 event.Skip() |
1215 |
1397 |
1216 def OnCopyMenu(self, event): |
1398 def OnCopyMenu(self, event): |
1217 selected = self.TabsOpened.GetSelection() |
1399 selected = self.GetPageSelection() |
1218 if selected != -1: |
1400 if selected != -1: |
1219 try: |
1401 try: |
1220 self.TabsOpened.GetPage(selected).Viewer.Copy() |
1402 self.GetPage(selected).Copy() |
1221 except: |
1403 except: |
1222 pass |
1404 pass |
1223 event.Skip() |
1405 event.Skip() |
1224 |
1406 |
1225 def OnPasteMenu(self, event): |
1407 def OnPasteMenu(self, event): |
1226 selected = self.TabsOpened.GetSelection() |
1408 selected = self.GetPageSelection() |
1227 if selected != -1: |
1409 if selected != -1: |
1228 try: |
1410 try: |
1229 self.TabsOpened.GetPage(selected).Viewer.Paste() |
1411 self.GetPage(selected).Paste() |
1230 except: |
1412 except: |
1231 pass |
1413 pass |
1232 event.Skip() |
1414 event.Skip() |
1233 |
1415 |
1234 def OnAddPouMenu(self, event): |
1416 def OnAddPouMenu(self, event): |
2159 |
2360 |
2160 def GetValue(self): |
2361 def GetValue(self): |
2161 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
2362 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
2162 |
2363 |
2163 #------------------------------------------------------------------------------- |
2364 #------------------------------------------------------------------------------- |
2164 # Pou Editor Panel |
2365 # Variables Editor Panel |
|
2366 #------------------------------------------------------------------------------- |
|
2367 |
|
2368 class VariablePanelIndexer(wx.Panel): |
|
2369 |
|
2370 def _init_sizers(self): |
|
2371 self.MainSizer = wx.BoxSizer(wx.HORIZONTAL) |
|
2372 |
|
2373 self.SetSizer(self.MainSizer) |
|
2374 |
|
2375 def _init_ctrls(self, prnt): |
|
2376 wx.Panel.__init__(self, id=wx.NewId(), |
|
2377 name='VariablePanelIndexer', parent=prnt, pos=wx.Point(0, 0), |
|
2378 size=wx.Size(0, 300), style=wx.TAB_TRAVERSAL) |
|
2379 |
|
2380 self._init_sizers() |
|
2381 |
|
2382 def __init__(self, parent, controler): |
|
2383 self._init_ctrls(parent) |
|
2384 |
|
2385 self.ParentWindow = parent |
|
2386 self.Controler = controler |
|
2387 |
|
2388 self.VariablePanelList = {} |
|
2389 self.CurrentPanel = None |
|
2390 |
|
2391 def AddVariablePanel(self, tagname, element_type): |
|
2392 new_panel = VariablePanel(self, self.ParentWindow, self.Controler, element_type) |
|
2393 new_panel.SetTagName(tagname) |
|
2394 new_panel.Hide() |
|
2395 new_panel.RefreshView() |
|
2396 self.MainSizer.AddWindow(new_panel, 1, border=0, flag=wx.GROW) |
|
2397 self.VariablePanelList[tagname] = new_panel |
|
2398 |
|
2399 def RemoveVariablePanel(self, tagname): |
|
2400 if tagname in self.VariablePanelList: |
|
2401 panel = self.VariablePanelList.pop(tagname) |
|
2402 panel.Hide() |
|
2403 self.MainSizer.Remove(panel) |
|
2404 if self.CurrentPanel == tagname: |
|
2405 self.CurrentPanel = None |
|
2406 |
|
2407 def RemoveAllPanels(self): |
|
2408 if self.CurrentPanel is not None and self.CurrentPanel in self.VariablePanelList: |
|
2409 self.VariablePanelList[self.CurrentPanel].Hide() |
|
2410 self.VariablePanelList = {} |
|
2411 self.MainSizer.Clear() |
|
2412 self.CurrentPanel = None |
|
2413 |
|
2414 def UpdateVariablePanelTagName(self, old_tagname, new_tagname): |
|
2415 if old_name in self.VariablePanelList: |
|
2416 self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname) |
|
2417 if self.CurrentPanel == old_tagname: |
|
2418 self.CurrentPanel = new_tagname |
|
2419 |
|
2420 def ChangeVariablePanel(self, tagname): |
|
2421 if tagname in self.VariablePanelList and tagname != self.CurrentPanel: |
|
2422 if self.CurrentPanel is not None: |
|
2423 self.VariablePanelList[self.CurrentPanel].Hide() |
|
2424 self.CurrentPanel = tagname |
|
2425 self.VariablePanelList[self.CurrentPanel].RefreshView() |
|
2426 self.VariablePanelList[self.CurrentPanel].Show() |
|
2427 self.MainSizer.Layout() |
|
2428 |
|
2429 def RefreshVariablePanel(self, tagname): |
|
2430 if tagname in self.VariablePanelList: |
|
2431 self.VariablePanelList[self.CurrentPanel].RefreshView() |
|
2432 |
|
2433 #------------------------------------------------------------------------------- |
|
2434 # Variables Editor Panel |
2165 #------------------------------------------------------------------------------- |
2435 #------------------------------------------------------------------------------- |
2166 |
2436 |
2167 class VariableTable(wx.grid.PyGridTableBase): |
2437 class VariableTable(wx.grid.PyGridTableBase): |
2168 |
2438 |
2169 """ |
2439 """ |
2382 if message is not None: |
2652 if message is not None: |
2383 message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) |
2653 message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) |
2384 message.ShowModal() |
2654 message.ShowModal() |
2385 message.Destroy() |
2655 message.Destroy() |
2386 |
2656 |
2387 [ID_POUEDITORPANEL, ID_POUEDITORPANELVIEWER, |
2657 [ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID, |
2388 ID_POUEDITORPANELVARIABLESGRID, ID_POUEDITORPANELRETURNTYPE, |
2658 ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELCLASSFILTER, |
2389 ID_POUEDITORPANELCLASSFILTER, ID_POUEDITORPANELADDBUTTON, |
2659 ID_VARIABLEEDITORPANELADDBUTTON, ID_VARIABLEEDITORPANELDELETEBUTTON, |
2390 ID_POUEDITORPANELDELETEBUTTON, ID_POUEDITORPANELUPBUTTON, |
2660 ID_VARIABLEEDITORPANELUPBUTTON, ID_VARIABLEEDITORPANELDOWNBUTTON, |
2391 ID_POUEDITORPANELDOWNBUTTON, ID_POUEDITORPANELSTATICTEXT1, |
2661 ID_VARIABLEEDITORPANELSTATICTEXT1, ID_VARIABLEEDITORPANELSTATICTEXT2, |
2392 ID_POUEDITORPANELSTATICTEXT2, ID_POUEDITORPANELSTATICTEXT3, |
2662 ID_VARIABLEEDITORPANELSTATICTEXT3, |
2393 ] = [wx.NewId() for _init_ctrls in range(12)] |
2663 ] = [wx.NewId() for _init_ctrls in range(11)] |
2394 |
2664 |
2395 class PouEditorPanel(wx.SplitterWindow): |
2665 class VariablePanel(wx.Panel): |
2396 |
2666 |
2397 if wx.VERSION < (2, 6, 0): |
2667 if wx.VERSION < (2, 6, 0): |
2398 def Bind(self, event, function, id = None): |
2668 def Bind(self, event, function, id = None): |
2399 if id is not None: |
2669 if id is not None: |
2400 event(self, id, function) |
2670 event(self, id, function) |
2401 else: |
2671 else: |
2402 event(self, function) |
2672 event(self, function) |
2403 |
2673 |
2404 def _init_coll_VariablePanelSizer_Items(self, parent): |
2674 def _init_coll_MainSizer_Items(self, parent): |
2405 parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW) |
2675 parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW) |
2406 parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wx.GROW) |
2676 parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wx.GROW) |
2407 |
2677 |
2408 def _init_coll_VariablePanelSizer_Growables(self, parent): |
2678 def _init_coll_MainSizer_Growables(self, parent): |
2409 parent.AddGrowableCol(0) |
2679 parent.AddGrowableCol(0) |
2410 parent.AddGrowableRow(0) |
2680 parent.AddGrowableRow(0) |
2411 |
2681 |
2412 def _init_coll_ControlPanelSizer_Items(self, parent): |
2682 def _init_coll_ControlPanelSizer_Items(self, parent): |
2413 parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wx.GROW) |
2683 parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wx.GROW) |
2436 parent.AddGrowableCol(2) |
2706 parent.AddGrowableCol(2) |
2437 parent.AddGrowableCol(3) |
2707 parent.AddGrowableCol(3) |
2438 parent.AddGrowableRow(0) |
2708 parent.AddGrowableRow(0) |
2439 |
2709 |
2440 def _init_sizers(self): |
2710 def _init_sizers(self): |
2441 self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0) |
2711 self.MainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0) |
2442 self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
2712 self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
2443 self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5) |
2713 self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5) |
2444 self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
2714 self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
2445 |
2715 |
2446 self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer) |
2716 self._init_coll_MainSizer_Items(self.MainSizer) |
2447 self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer) |
2717 self._init_coll_MainSizer_Growables(self.MainSizer) |
2448 self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer) |
2718 self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer) |
2449 self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer) |
2719 self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer) |
2450 self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer) |
2720 self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer) |
2451 self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer) |
2721 self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer) |
2452 self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer) |
2722 self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer) |
2453 |
2723 |
2454 self.VariablePanel.SetSizer(self.VariablePanelSizer) |
2724 self.SetSizer(self.MainSizer) |
2455 |
2725 |
2456 def _init_ctrls(self, prnt, element_type): |
2726 def _init_ctrls(self, prnt): |
2457 wx.SplitterWindow.__init__(self, id=ID_POUEDITORPANEL, |
2727 wx.Panel.__init__(self, id=ID_VARIABLEEDITORPANEL, |
2458 name='EditVariablePanel', parent=prnt, point=wx.Point(0, 0), |
2728 name='VariableEditorPanel', parent=prnt, pos=wx.Point(0, 0), |
2459 size=wx.Size(0, 0), style=wx.SP_3D) |
|
2460 self.SetNeedUpdating(True) |
|
2461 self.SetMinimumPaneSize(1) |
|
2462 |
|
2463 if element_type == "config": |
|
2464 self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
|
2465 name='ConfigPanel', parent=self, pos=wx.Point(0, 0), |
|
2466 size=wx.Size(0, 0), style=0) |
|
2467 self.Viewer.SetSizer(wx.BoxSizer(wx.VERTICAL)) |
|
2468 self.Viewer.ResetBuffer = lambda: None |
|
2469 self.Viewer.RefreshView = lambda: None |
|
2470 elif element_type == "resource": |
|
2471 self.Viewer = ResourceEditor(self, self.ParentWindow, self.Controler) |
|
2472 elif element_type == "FBD": |
|
2473 self.Viewer = Viewer(self, self.ParentWindow, self.Controler) |
|
2474 elif element_type == "LD": |
|
2475 self.Viewer = LD_Viewer(self, self.ParentWindow, self.Controler) |
|
2476 elif element_type == "SFC": |
|
2477 self.Viewer = SFC_Viewer(self, self.ParentWindow, self.Controler) |
|
2478 else: |
|
2479 self.Viewer = TextViewer(self, self.ParentWindow, self.Controler) |
|
2480 self.Viewer.SetTextSyntax(element_type) |
|
2481 if element_type == "IL": |
|
2482 self.Viewer.SetKeywords(IL_KEYWORDS) |
|
2483 else: |
|
2484 self.Viewer.SetKeywords(ST_KEYWORDS) |
|
2485 |
|
2486 self.VariablePanel = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
|
2487 name='VariablePanel', parent=self, pos=wx.Point(0, 0), |
|
2488 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
2729 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
2489 |
2730 |
2490 self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1, |
2731 self.staticText1 = wx.StaticText(id=ID_VARIABLEEDITORPANELSTATICTEXT1, |
2491 label='Return Type:', name='staticText1', parent=self.VariablePanel, |
2732 label='Return Type:', name='staticText1', parent=self, |
2492 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2733 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2493 |
2734 |
2494 self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE, |
2735 self.ReturnType = wx.Choice(id=ID_VARIABLEEDITORPANELRETURNTYPE, |
2495 name='ReturnType', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2736 name='ReturnType', parent=self, pos=wx.Point(0, 0), |
2496 size=wx.Size(145, 24), style=0) |
2737 size=wx.Size(145, 24), style=0) |
2497 self.Bind(wx.EVT_CHOICE, self.OnReturnTypeChanged, id=ID_POUEDITORPANELRETURNTYPE) |
2738 self.Bind(wx.EVT_CHOICE, self.OnReturnTypeChanged, id=ID_VARIABLEEDITORPANELRETURNTYPE) |
2498 |
2739 |
2499 self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2, |
2740 self.staticText2 = wx.StaticText(id=ID_VARIABLEEDITORPANELSTATICTEXT2, |
2500 label='Class Filter:', name='staticText2', parent=self.VariablePanel, |
2741 label='Class Filter:', name='staticText2', parent=self, |
2501 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2742 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2502 |
2743 |
2503 self.ClassFilter = wx.Choice(id=ID_POUEDITORPANELCLASSFILTER, |
2744 self.ClassFilter = wx.Choice(id=ID_VARIABLEEDITORPANELCLASSFILTER, |
2504 name='ClassFilter', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2745 name='ClassFilter', parent=self, pos=wx.Point(0, 0), |
2505 size=wx.Size(145, 24), style=0) |
2746 size=wx.Size(145, 24), style=0) |
2506 self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_POUEDITORPANELCLASSFILTER) |
2747 self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_VARIABLEEDITORPANELCLASSFILTER) |
2507 |
2748 |
2508 self.VariablesGrid = wx.grid.Grid(id=ID_POUEDITORPANELVARIABLESGRID, |
2749 self.VariablesGrid = wx.grid.Grid(id=ID_VARIABLEEDITORPANELVARIABLESGRID, |
2509 name='VariablesGrid', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2750 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
2510 size=wx.Size(0, 150), style=wx.VSCROLL) |
2751 size=wx.Size(0, 150), style=wx.VSCROLL) |
2511 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2752 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2512 'Sans')) |
2753 'Sans')) |
2513 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2754 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2514 False, 'Sans')) |
2755 False, 'Sans')) |
2524 wx.grid.EVT_GRID_SELECT_CELL(self.VariablesGrid, self.OnVariablesGridSelectCell) |
2765 wx.grid.EVT_GRID_SELECT_CELL(self.VariablesGrid, self.OnVariablesGridSelectCell) |
2525 wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick) |
2766 wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick) |
2526 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
2767 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
2527 self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) |
2768 self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) |
2528 |
2769 |
2529 self.AddButton = wx.Button(id=ID_POUEDITORPANELADDBUTTON, label='Add', |
2770 self.AddButton = wx.Button(id=ID_VARIABLEEDITORPANELADDBUTTON, label='Add', |
2530 name='AddButton', parent=self.VariablePanel, pos=wx.Point(345, 340), |
2771 name='AddButton', parent=self, pos=wx.Point(345, 340), |
2531 size=wx.Size(72, 32), style=0) |
2772 size=wx.Size(72, 32), style=0) |
2532 self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_POUEDITORPANELADDBUTTON) |
2773 self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_VARIABLEEDITORPANELADDBUTTON) |
2533 |
2774 |
2534 self.DeleteButton = wx.Button(id=ID_POUEDITORPANELDELETEBUTTON, label='Delete', |
2775 self.DeleteButton = wx.Button(id=ID_VARIABLEEDITORPANELDELETEBUTTON, label='Delete', |
2535 name='DeleteButton', parent=self.VariablePanel, pos=wx.Point(425, 340), |
2776 name='DeleteButton', parent=self, pos=wx.Point(425, 340), |
2536 size=wx.Size(72, 32), style=0) |
2777 size=wx.Size(72, 32), style=0) |
2537 self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_POUEDITORPANELDELETEBUTTON) |
2778 self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_VARIABLEEDITORPANELDELETEBUTTON) |
2538 |
2779 |
2539 self.UpButton = wx.Button(id=ID_POUEDITORPANELUPBUTTON, label='^', |
2780 self.UpButton = wx.Button(id=ID_VARIABLEEDITORPANELUPBUTTON, label='^', |
2540 name='UpButton', parent=self.VariablePanel, pos=wx.Point(505, 340), |
2781 name='UpButton', parent=self, pos=wx.Point(505, 340), |
2541 size=wx.Size(32, 32), style=0) |
2782 size=wx.Size(32, 32), style=0) |
2542 self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_POUEDITORPANELUPBUTTON) |
2783 self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_VARIABLEEDITORPANELUPBUTTON) |
2543 |
2784 |
2544 self.DownButton = wx.Button(id=ID_POUEDITORPANELDOWNBUTTON, label='v', |
2785 self.DownButton = wx.Button(id=ID_VARIABLEEDITORPANELDOWNBUTTON, label='v', |
2545 name='DownButton', parent=self.VariablePanel, pos=wx.Point(545, 340), |
2786 name='DownButton', parent=self, pos=wx.Point(545, 340), |
2546 size=wx.Size(32, 32), style=0) |
2787 size=wx.Size(32, 32), style=0) |
2547 self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_POUEDITORPANELDOWNBUTTON) |
2788 self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_VARIABLEEDITORPANELDOWNBUTTON) |
2548 |
|
2549 self.SplitHorizontally(self.Viewer, self.VariablePanel, -200) |
|
2550 |
2789 |
2551 self._init_sizers() |
2790 self._init_sizers() |
2552 |
2791 |
2553 def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None): |
2792 def __init__(self, parent, window, controler, element_type): |
|
2793 self._init_ctrls(parent) |
2554 self.ParentWindow = window |
2794 self.ParentWindow = window |
2555 self.Controler = controler |
2795 self.Controler = controler |
2556 self.ElementType = element_type |
2796 self.ElementType = element_type |
2557 self.PouName = pou_name |
|
2558 self.TransitionName = transition_name |
|
2559 self.ActionName = action_name |
|
2560 self.ConfigName = config_name |
|
2561 self.ResourceName = resource_name |
|
2562 |
|
2563 if element_type == "config": |
|
2564 self._init_ctrls(parent, "config") |
|
2565 pou_type = "config" |
|
2566 elif element_type == "resource": |
|
2567 self._init_ctrls(parent, "resource") |
|
2568 pou_type = "resource" |
|
2569 else: |
|
2570 if element_type == "transition": |
|
2571 self._init_ctrls(parent, self.Controler.GetTransitionBodyType(pou_name, transition_name)) |
|
2572 elif element_type == "action": |
|
2573 self._init_ctrls(parent, self.Controler.GetActionBodyType(pou_name, action_name)) |
|
2574 else: |
|
2575 self._init_ctrls(parent, self.Controler.GetPouBodyType(pou_name)) |
|
2576 pou_type = self.Controler.GetPouType(pou_name) |
|
2577 |
2797 |
2578 self.Filter = "All" |
2798 self.Filter = "All" |
2579 self.FilterChoices = [] |
2799 self.FilterChoices = [] |
2580 self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
2800 self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
2581 " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
2801 " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
2582 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2802 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2583 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2803 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2584 |
2804 |
2585 if pou_type in ["config", "resource"]: |
2805 if element_type in ["config", "resource"]: |
2586 self.DefaultTypes = {"All" : "Global"} |
2806 self.DefaultTypes = {"All" : "Global"} |
2587 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2807 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2588 else: |
2808 else: |
2589 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2809 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2590 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2810 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2591 if pou_type in ["config", "resource"] or pou_type == "program": |
2811 if element_type in ["config", "resource"] or element_type in ["program", "transition", "action"]: |
2592 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2812 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2593 if pou_type not in ["config", "resource"]: |
2813 if element_type not in ["config", "resource"]: |
2594 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2814 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2595 else: |
2815 else: |
2596 self.FilterChoices = ["All","Global","Access"] |
2816 self.FilterChoices = ["All","Global","Access"] |
2597 self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70] |
2817 self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70] |
2598 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
2818 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
2628 attr = wx.grid.GridCellAttr() |
2848 attr = wx.grid.GridCellAttr() |
2629 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
2849 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
2630 self.VariablesGrid.SetColAttr(col, attr) |
2850 self.VariablesGrid.SetColAttr(col, attr) |
2631 self.VariablesGrid.SetColSize(col, self.ColSizes[col]) |
2851 self.VariablesGrid.SetColSize(col, self.ColSizes[col]) |
2632 |
2852 |
2633 def SetIndex(self, index): |
2853 def SetTagName(self, tagname): |
2634 self.ControlerIndex = index |
2854 self.TagName = tagname |
2635 |
2855 |
2636 def GetIndex(self): |
|
2637 return self.ControlerIndex |
|
2638 |
|
2639 def RefreshName(self, name_type, old_name, new_name): |
|
2640 if name_type == ITEM_POU and self.PouName == old_name: |
|
2641 self.PouName = new_name |
|
2642 elif name_type == ITEM_TRANSITION and self.TransitionName == old_name: |
|
2643 self.TransitionName = new_name |
|
2644 elif name_type == ITEM_ACTION and self.ActionName == old_name: |
|
2645 self.ActionName = new_name |
|
2646 elif name_type == ITEM_CONFIGURATION and self.ConfigName == old_name: |
|
2647 self.ConfigName = new_name |
|
2648 elif name_type == ITEM_RESOURCE and self.ResourceName == old_name: |
|
2649 self.ResourceName = new_name |
|
2650 |
|
2651 def SetMode(self, mode): |
|
2652 if self.ElementType not in ["resource", "config"]: |
|
2653 if self.ElementType == "transition": |
|
2654 language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName) |
|
2655 elif self.ElementType == "action": |
|
2656 language = self.Controler.GetActionBodyType(self.PouName, self.ActionName) |
|
2657 else: |
|
2658 language = self.Controler.GetPouBodyType(self.PouName) |
|
2659 if language not in ["IL", "ST"]: |
|
2660 self.Viewer.SetMode(mode) |
|
2661 |
|
2662 def ResetBuffer(self): |
|
2663 self.Viewer.ResetBuffer() |
|
2664 |
|
2665 def RefreshView(self): |
2856 def RefreshView(self): |
2666 self.PouNames = self.Controler.GetProjectPouNames() |
2857 self.PouNames = self.Controler.GetProjectPouNames() |
2667 |
2858 |
|
2859 words = self.TagName.split("::") |
2668 if self.ElementType == "config": |
2860 if self.ElementType == "config": |
2669 self.PouIsUsed = False |
2861 self.PouIsUsed = False |
2670 returnType = None |
2862 returnType = None |
2671 self.Values = self.Controler.GetConfigurationGlobalVars(self.ConfigName) |
2863 self.Values = self.Controler.GetConfigurationGlobalVars(words[1]) |
2672 elif self.ElementType == "resource": |
2864 elif self.ElementType == "resource": |
2673 self.PouIsUsed = False |
2865 self.PouIsUsed = False |
2674 returnType = None |
2866 returnType = None |
2675 self.Values = self.Controler.GetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName) |
2867 self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2]) |
2676 else: |
2868 else: |
2677 self.PouIsUsed = self.Controler.PouIsUsed(self.PouName) |
2869 self.PouIsUsed = self.Controler.PouIsUsed(words[1]) |
2678 returnType = self.Controler.GetCurrentElementEditingInterfaceReturnType() |
2870 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) |
2679 self.Values = self.Controler.GetCurrentElementEditingInterfaceVars() |
2871 self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName) |
2680 |
2872 |
2681 if returnType and self.ReturnType.IsEnabled(): |
2873 if returnType and self.ReturnType.IsEnabled(): |
2682 self.ReturnType.SetStringSelection(returnType) |
2874 self.ReturnType.SetStringSelection(returnType) |
2683 |
2875 |
2684 self.RefreshValues() |
2876 self.RefreshValues() |
2685 self.RefreshViewerVarList() |
|
2686 self.RefreshButtons() |
2877 self.RefreshButtons() |
2687 self.Viewer.RefreshView() |
|
2688 |
|
2689 def RefreshViewerVarList(self): |
|
2690 if self.ElementType not in ["config", "resource"]: |
|
2691 varlist = [var["Name"] for var in self.Values] |
|
2692 if self.ElementType == "transition": |
|
2693 language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName) |
|
2694 varlist.append(self.TransitionName) |
|
2695 elif self.ElementType == "action": |
|
2696 language = self.Controler.GetActionBodyType(self.PouName, self.ActionName) |
|
2697 varlist.append(self.ActionName) |
|
2698 else: |
|
2699 language = self.Controler.GetPouBodyType(self.PouName) |
|
2700 varlist.append(self.PouName) |
|
2701 if language in ["IL", "ST"]: |
|
2702 self.Viewer.SetVariables(varlist) |
|
2703 self.Viewer.SetFunctions(self.Controler.GetBlockTypes()) |
|
2704 |
2878 |
2705 def OnReturnTypeChanged(self, event): |
2879 def OnReturnTypeChanged(self, event): |
2706 self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection()) |
2880 words = self.TagName.split("::") |
|
2881 self.Controler.SetPouInterfaceReturnType(words[1], self.ReturnType.GetStringSelection()) |
2707 self.Controler.BufferProject() |
2882 self.Controler.BufferProject() |
2708 self.ParentWindow.RefreshTitle() |
2883 self.ParentWindow.RefreshTitle() |
2709 self.ParentWindow.RefreshEditMenu() |
2884 self.ParentWindow.RefreshEditMenu() |
2710 event.Skip() |
2885 event.Skip() |
2711 |
2886 |