573 else: |
572 else: |
574 no_modifier.Check(True) |
573 no_modifier.Check(True) |
575 |
574 |
576 # Add Alignment Menu items to the given menu |
575 # Add Alignment Menu items to the given menu |
577 def AddAlignmentMenuItems(self, menu): |
576 def AddAlignmentMenuItems(self, menu): |
578 # Create menu items |
|
579 self.AppendItem(menu, _(u'Left'), self.OnAlignLeftMenu) |
577 self.AppendItem(menu, _(u'Left'), self.OnAlignLeftMenu) |
580 self.AppendItem(menu, _(u'Center'), self.OnAlignCenterMenu) |
578 self.AppendItem(menu, _(u'Center'), self.OnAlignCenterMenu) |
581 self.AppendItem(menu, _(u'Right'), self.OnAlignRightMenu) |
579 self.AppendItem(menu, _(u'Right'), self.OnAlignRightMenu) |
582 menu.AppendSeparator() |
580 menu.AppendSeparator() |
583 self.AppendItem(menu, _(u'Top'), self.OnAlignTopMenu) |
581 self.AppendItem(menu, _(u'Top'), self.OnAlignTopMenu) |
584 self.AppendItem(menu, _(u'Middle'), self.OnAlignMiddleMenu) |
582 self.AppendItem(menu, _(u'Middle'), self.OnAlignMiddleMenu) |
585 self.AppendItem(menu, _(u'Bottom'), self.OnAlignBottomMenu) |
583 self.AppendItem(menu, _(u'Bottom'), self.OnAlignBottomMenu) |
586 |
584 |
587 # Add Wire Menu items to the given menu |
585 # Add Wire Menu items to the given menu |
588 def AddWireMenuItems(self, menu, delete=False, replace=False): |
586 def AddWireMenuItems(self, menu, delete=False, replace=False): |
589 [ |
587 self.AppendItem(menu, _(u'Add Wire Segment'), self.OnAddSegmentMenu) |
590 ID_ADD_SEGMENT, ID_DELETE_SEGMENT, ID_REPLACE_WIRE, |
588 delete_segment = self.AppendItem(menu, _(u'Delete Wire Segment'), |
591 ] = [wx.NewId() for dummy in xrange(3)] |
589 self.OnDeleteSegmentMenu) |
592 |
590 replace_wire = self.AppendItem(menu, _(u'Replace Wire by connections'), |
593 # Create menu items |
591 self.OnReplaceWireMenu) |
594 self.AddMenuItems(menu, [ |
592 |
595 (ID_ADD_SEGMENT, wx.ITEM_NORMAL, _(u'Add Wire Segment'), '', self.OnAddSegmentMenu), |
593 delete_segment.Enable(delete) |
596 (ID_DELETE_SEGMENT, wx.ITEM_NORMAL, _(u'Delete Wire Segment'), '', self.OnDeleteSegmentMenu), |
594 replace_wire.Enable(replace) |
597 (ID_REPLACE_WIRE, wx.ITEM_NORMAL, _(u'Replace Wire by connections'), '', self.OnReplaceWireMenu)]) |
|
598 |
|
599 menu.Enable(ID_DELETE_SEGMENT, delete) |
|
600 menu.Enable(ID_REPLACE_WIRE, replace) |
|
601 |
595 |
602 # Add Divergence Menu items to the given menu |
596 # Add Divergence Menu items to the given menu |
603 def AddDivergenceMenuItems(self, menu, delete=False): |
597 def AddDivergenceMenuItems(self, menu, delete=False): |
604 [ID_ADD_BRANCH, ID_DELETE_BRANCH] = [wx.NewId() for dummy in xrange(2)] |
598 add_branch = self.AppendItem(menu, _(u'Add Divergence Branch'), |
605 |
599 self.OnAddBranchMenu) |
606 # Create menu items |
600 delete_branch = self.AppendItem(menu, _(u'Delete Divergence Branch'), |
607 self.AddMenuItems(menu, [ |
601 self.OnDeleteBranchMenu) |
608 (ID_ADD_BRANCH, wx.ITEM_NORMAL, _(u'Add Divergence Branch'), '', self.OnAddBranchMenu), |
602 |
609 (ID_DELETE_BRANCH, wx.ITEM_NORMAL, _(u'Delete Divergence Branch'), '', self.OnDeleteBranchMenu)]) |
603 delete_branch.Enable(delete) |
610 |
|
611 menu.Enable(ID_DELETE_BRANCH, delete) |
|
612 |
604 |
613 # Add Add Menu items to the given menu |
605 # Add Add Menu items to the given menu |
614 def AddAddMenuItems(self, menu): |
606 def AddAddMenuItems(self, menu): |
615 [ID_ADD_BLOCK, ID_ADD_VARIABLE, ID_ADD_CONNECTION, |
607 self.AppendItem(menu, _(u'Block'), |
616 ID_ADD_COMMENT] = [wx.NewId() for dummy in xrange(4)] |
608 self.GetAddMenuCallBack(self.AddNewBlock)) |
617 |
609 self.AppendItem(menu, _(u'Variable'), |
618 # Create menu items |
610 self.GetAddMenuCallBack(self.AddNewVariable)) |
619 self.AddMenuItems(menu, [ |
611 self.AppendItem(menu, _(u'Connection'), |
620 (ID_ADD_BLOCK, wx.ITEM_NORMAL, _(u'Block'), '', self.GetAddMenuCallBack(self.AddNewBlock)), |
612 self.GetAddMenuCallBack(self.AddNewConnection)) |
621 (ID_ADD_VARIABLE, wx.ITEM_NORMAL, _(u'Variable'), '', self.GetAddMenuCallBack(self.AddNewVariable)), |
613 menu.AppendSeparator() |
622 (ID_ADD_CONNECTION, wx.ITEM_NORMAL, _(u'Connection'), '', self.GetAddMenuCallBack(self.AddNewConnection)), |
|
623 None]) |
|
624 |
614 |
625 if self.CurrentLanguage != "FBD": |
615 if self.CurrentLanguage != "FBD": |
626 [ |
616 self.AppendItem(menu, _(u'Power Rail'), |
627 ID_ADD_POWER_RAIL, ID_ADD_CONTACT, ID_ADD_COIL, |
617 self.GetAddMenuCallBack(self.AddNewPowerRail)) |
628 ] = [wx.NewId() for dummy in xrange(3)] |
618 self.AppendItem(menu, _(u'Contact'), |
629 |
619 self.GetAddMenuCallBack(self.AddNewContact)) |
630 # Create menu items |
|
631 self.AddMenuItems(menu, [ |
|
632 (ID_ADD_POWER_RAIL, wx.ITEM_NORMAL, _(u'Power Rail'), '', self.GetAddMenuCallBack(self.AddNewPowerRail)), |
|
633 (ID_ADD_CONTACT, wx.ITEM_NORMAL, _(u'Contact'), '', self.GetAddMenuCallBack(self.AddNewContact))]) |
|
634 |
620 |
635 if self.CurrentLanguage != "SFC": |
621 if self.CurrentLanguage != "SFC": |
636 self.AddMenuItems(menu, [ |
622 self.AppendItem(menu, _(u'Coil'), |
637 (ID_ADD_COIL, wx.ITEM_NORMAL, _(u'Coil'), '', self.GetAddMenuCallBack(self.AddNewCoil))]) |
623 self.GetAddMenuCallBack(self.AddNewCoil)) |
638 |
624 |
639 menu.AppendSeparator() |
625 menu.AppendSeparator() |
640 |
626 |
641 if self.CurrentLanguage == "SFC": |
627 if self.CurrentLanguage == "SFC": |
642 [ |
628 self.AppendItem(menu, _(u'Initial Step'), |
643 ID_ADD_INITIAL_STEP, ID_ADD_STEP, ID_ADD_TRANSITION, |
629 self.GetAddMenuCallBack(self.AddNewStep, True)) |
644 ID_ADD_ACTION_BLOCK, ID_ADD_DIVERGENCE, ID_ADD_JUMP, |
630 self.AppendItem(menu, (u'Step'), |
645 ] = [wx.NewId() for dummy in xrange(6)] |
631 self.GetAddMenuCallBack(self.AddNewStep)) |
646 |
632 self.AppendItem(menu, (u'Transition'), |
647 # Create menu items |
633 self.GetAddMenuCallBack(self.AddNewTransition)) |
648 self.AddMenuItems(menu, [ |
634 self.AppendItem(menu, (u'Action Block'), |
649 (ID_ADD_INITIAL_STEP, wx.ITEM_NORMAL, _(u'Initial Step'), '', self.GetAddMenuCallBack(self.AddNewStep, True)), |
635 self.GetAddMenuCallBack(self.AddNewActionBlock)) |
650 (ID_ADD_STEP, wx.ITEM_NORMAL, _(u'Step'), '', self.GetAddMenuCallBack(self.AddNewStep)), |
636 self.AppendItem(menu, (u'Divergence'), |
651 (ID_ADD_TRANSITION, wx.ITEM_NORMAL, _(u'Transition'), '', self.GetAddMenuCallBack(self.AddNewTransition)), |
637 self.GetAddMenuCallBack(self.AddNewDivergence)) |
652 (ID_ADD_ACTION_BLOCK, wx.ITEM_NORMAL, _(u'Action Block'), '', self.GetAddMenuCallBack(self.AddNewActionBlock)), |
638 self.AppendItem(menu, (u'Jump'), |
653 (ID_ADD_DIVERGENCE, wx.ITEM_NORMAL, _(u'Divergence'), '', self.GetAddMenuCallBack(self.AddNewDivergence)), |
639 self.GetAddMenuCallBack(self.AddNewJump)) |
654 (ID_ADD_JUMP, wx.ITEM_NORMAL, _(u'Jump'), '', self.GetAddMenuCallBack(self.AddNewJump)), |
640 menu.AppendSeparator() |
655 None]) |
641 |
656 |
642 self.AppendItem(menu, _(u'Comment'), |
657 self.AddMenuItems(menu, [ |
643 self.GetAddMenuCallBack(self.AddNewComment)) |
658 (ID_ADD_COMMENT, wx.ITEM_NORMAL, _(u'Comment'), '', self.GetAddMenuCallBack(self.AddNewComment))]) |
|
659 |
644 |
660 # Add Default Menu items to the given menu |
645 # Add Default Menu items to the given menu |
661 def AddDefaultMenuItems(self, menu, edit=False, block=False): |
646 def AddDefaultMenuItems(self, menu, edit=False, block=False): |
662 if block: |
647 if block: |
663 [ID_EDIT_BLOCK, ID_DELETE, ID_ADJUST_BLOCK_SIZE] = [wx.NewId() for dummy in xrange(3)] |
648 edit_block = self.AppendItem(menu, _(u'Edit Block'), |
664 |
649 self.OnEditBlockMenu) |
665 # Create menu items |
650 self.AppendItem(menu, _(u'Adjust Block Size'), |
666 self.AddMenuItems(menu, [ |
651 self.OnAdjustBlockSizeMenu) |
667 (ID_EDIT_BLOCK, wx.ITEM_NORMAL, _(u'Edit Block'), '', self.OnEditBlockMenu), |
652 self.AppendItem(menu, _(u'Delete'), self.OnDeleteMenu) |
668 (ID_ADJUST_BLOCK_SIZE, wx.ITEM_NORMAL, _(u'Adjust Block Size'), '', self.OnAdjustBlockSizeMenu), |
653 |
669 (ID_DELETE, wx.ITEM_NORMAL, _(u'Delete'), '', self.OnDeleteMenu)]) |
654 edit_block.Enable(edit) |
670 |
|
671 menu.Enable(ID_EDIT_BLOCK, edit) |
|
672 |
655 |
673 else: |
656 else: |
674 [ID_CLEAR_EXEC_ORDER, ID_RESET_EXEC_ORDER] = [wx.NewId() for dummy in xrange(2)] |
|
675 |
|
676 # Create menu items |
|
677 if self.CurrentLanguage == 'FBD': |
657 if self.CurrentLanguage == 'FBD': |
678 self.AddMenuItems(menu, [ |
658 self.AppendItem(menu, _(u'Clear Execution Order'), |
679 (ID_CLEAR_EXEC_ORDER, wx.ITEM_NORMAL, _(u'Clear Execution Order'), '', self.OnClearExecutionOrderMenu), |
659 self.OnClearExecutionOrderMenu) |
680 (ID_RESET_EXEC_ORDER, wx.ITEM_NORMAL, _(u'Reset Execution Order'), '', self.OnResetExecutionOrderMenu)]) |
660 self.AppendItem(menu, _(u'Reset Execution Order'), |
|
661 self.OnResetExecutionOrderMenu) |
681 menu.AppendSeparator() |
662 menu.AppendSeparator() |
682 |
663 |
683 add_menu = wx.Menu(title='') |
664 add_menu = wx.Menu(title='') |
684 self.AddAddMenuItems(add_menu) |
665 self.AddAddMenuItems(add_menu) |
685 menu.AppendMenu(-1, _(u'Add'), add_menu) |
666 menu.AppendMenu(-1, _(u'Add'), add_menu) |
686 |
667 |
687 menu.AppendSeparator() |
668 menu.AppendSeparator() |
688 |
669 |
689 [ID_CUT, ID_COPY, ID_PASTE] = [wx.NewId() for dummy in xrange(3)] |
670 cut = self.AppendItem(menu, _(u'Cut'), self.GetClipboardCallBack(self.Cut)) |
690 |
671 copy = self.AppendItem(menu, _(u'Copy'), self.GetClipboardCallBack(self.Copy)) |
691 # Create menu items |
672 paste = self.AppendItem(menu, _(u'Paste'), self.GetAddMenuCallBack(self.Paste)) |
692 self.AddMenuItems(menu, [ |
673 |
693 (ID_CUT, wx.ITEM_NORMAL, _(u'Cut'), '', self.GetClipboardCallBack(self.Cut)), |
674 cut.Enable(block) |
694 (ID_COPY, wx.ITEM_NORMAL, _(u'Copy'), '', self.GetClipboardCallBack(self.Copy)), |
675 copy.Enable(block) |
695 (ID_PASTE, wx.ITEM_NORMAL, _(u'Paste'), '', self.GetAddMenuCallBack(self.Paste))]) |
676 paste.Enable(self.ParentWindow.GetCopyBuffer() is not None) |
696 |
|
697 menu.Enable(ID_CUT, block) |
|
698 menu.Enable(ID_COPY, block) |
|
699 menu.Enable(ID_PASTE, self.ParentWindow.GetCopyBuffer() is not None) |
|
700 |
677 |
701 def _init_Editor(self, prnt): |
678 def _init_Editor(self, prnt): |
702 self.Editor = wx.ScrolledWindow(prnt, name="Viewer", |
679 self.Editor = wx.ScrolledWindow(prnt, name="Viewer", |
703 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
680 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
704 style=wx.HSCROLL | wx.VSCROLL) |
681 style=wx.HSCROLL | wx.VSCROLL) |
1655 menu = wx.Menu(title='') |
1632 menu = wx.Menu(title='') |
1656 variable_type = self.SelectedElement.GetType() |
1633 variable_type = self.SelectedElement.GetType() |
1657 for type_label, type in [(_("Input"), INPUT), |
1634 for type_label, type in [(_("Input"), INPUT), |
1658 (_("Output"), OUTPUT), |
1635 (_("Output"), OUTPUT), |
1659 (_("InOut"), INOUT)]: |
1636 (_("InOut"), INOUT)]: |
1660 new_id = wx.NewId() |
1637 item = self.AppendItem(menu, type_label, |
1661 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_RADIO, text=type_label) |
1638 self.GetChangeVariableTypeMenuFunction(type), |
1662 self.Bind(wx.EVT_MENU, self.GetChangeVariableTypeMenuFunction(type), id=new_id) |
1639 kind=wx.ITEM_RADIO) |
1663 if type == variable_type: |
1640 if type == variable_type: |
1664 menu.Check(new_id, True) |
1641 item.Check(True) |
1665 menu.AppendSeparator() |
1642 menu.AppendSeparator() |
1666 self.AddDefaultMenuItems(menu, block=True) |
1643 self.AddDefaultMenuItems(menu, block=True) |
1667 self.Editor.PopupMenu(menu) |
1644 self.Editor.PopupMenu(menu) |
1668 menu.Destroy() |
1645 menu.Destroy() |
1669 |
1646 |
1670 def PopupConnectionMenu(self): |
1647 def PopupConnectionMenu(self): |
1671 menu = wx.Menu(title='') |
1648 menu = wx.Menu(title='') |
1672 connection_type = self.SelectedElement.GetType() |
1649 connection_type = self.SelectedElement.GetType() |
1673 for type_label, type in [(_("Connector"), CONNECTOR), |
1650 for type_label, type in [(_("Connector"), CONNECTOR), |
1674 (_("Continuation"), CONTINUATION)]: |
1651 (_("Continuation"), CONTINUATION)]: |
1675 new_id = wx.NewId() |
1652 item = self.AppendItem(menu, type_label, |
1676 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_RADIO, text=type_label) |
1653 self.GetChangeConnectionTypeMenuFunction(type), |
1677 self.Bind(wx.EVT_MENU, self.GetChangeConnectionTypeMenuFunction(type), id=new_id) |
1654 kind=wx.ITEM_RADIO) |
1678 if type == connection_type: |
1655 if type == variable_type: |
1679 menu.Check(new_id, True) |
1656 item.Check(True) |
1680 menu.AppendSeparator() |
1657 menu.AppendSeparator() |
1681 self.AddDefaultMenuItems(menu, block=True) |
1658 self.AddDefaultMenuItems(menu, block=True) |
1682 self.Editor.PopupMenu(menu) |
1659 self.Editor.PopupMenu(menu) |
1683 menu.Destroy() |
1660 menu.Destroy() |
1684 |
1661 |