editors/Viewer.py
changeset 2568 c73fd7467669
parent 2565 b5ce86166880
parent 2567 eb9392511989
child 2579 8fb5c6eddc72
equal deleted inserted replaced
2565:b5ce86166880 2568:c73fd7467669
   551         self.Bind(wx.EVT_MENU, callback, item)
   551         self.Bind(wx.EVT_MENU, callback, item)
   552         return item
   552         return item
   553 
   553 
   554     # Add Block Pin Menu items to the given menu
   554     # Add Block Pin Menu items to the given menu
   555     def AddBlockPinMenuItems(self, menu, connector):
   555     def AddBlockPinMenuItems(self, menu, connector):
   556         # Create menu items
       
   557         no_modifier = self.AppendItem(menu,  _(u'No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO)
   556         no_modifier = self.AppendItem(menu,  _(u'No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO)
   558         negated = self.AppendItem(menu,  _(u'Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO)
   557         negated = self.AppendItem(menu,  _(u'Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO)
   559         rising_edge = self.AppendItem(menu,  _(u'Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO)
   558         rising_edge = self.AppendItem(menu,  _(u'Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO)
   560         falling_edge = self.AppendItem(menu,  _(u'Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO)
   559         falling_edge = self.AppendItem(menu,  _(u'Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO)
   561 
   560 
   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 
  2156                         if self.Editor.HasCapture():
  2133                         if self.Editor.HasCapture():
  2157                             self.Editor.ReleaseMouse()
  2134                             self.Editor.ReleaseMouse()
  2158 
  2135 
  2159                         # Popup contextual menu
  2136                         # Popup contextual menu
  2160                         menu = wx.Menu()
  2137                         menu = wx.Menu()
  2161                         self.AddMenuItems(menu,
  2138                         for text, callback in items :
  2162                                           [(wx.NewId(), wx.ITEM_NORMAL, text, '', callback)
  2139                             self.AppendItem(menu, text, callback) 
  2163                                            for text, callback in items])
       
  2164                         self.PopupMenu(menu)
  2140                         self.PopupMenu(menu)
  2165 
  2141 
  2166                     self.SelectedElement.StartConnected.HighlightParentBlock(False)
  2142                     self.SelectedElement.StartConnected.HighlightParentBlock(False)
  2167                     if self.DrawingWire:
  2143                     if self.DrawingWire:
  2168                         self.DrawingWire = False
  2144                         self.DrawingWire = False