editors/Viewer.py
changeset 2558 c9d16163f981
parent 2557 a6e7c34497b8
child 2565 b5ce86166880
child 2567 eb9392511989
equal deleted inserted replaced
2552:46a1e8d1e92c 2558:c9d16163f981
   449             else:
   449             else:
   450                 child_path = child_name
   450                 child_path = child_name
   451             if len(child_dimensions) > 0:
   451             if len(child_dimensions) > 0:
   452                 child_path += "[%s]" % ",".join([str(dimension[0]) for dimension in child_dimensions])
   452                 child_path += "[%s]" % ",".join([str(dimension[0]) for dimension in child_dimensions])
   453                 child_name += "[]"
   453                 child_name += "[]"
   454             new_id = wx.NewId()
   454             item = menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=child_name)
   455             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=child_name)
   455             self.ParentWindow.Bind(wx.EVT_MENU, self.GetAddVariableBlockFunction(x, y, scaling, var_class, child_path, child_type), item)
   456             self.ParentWindow.Bind(wx.EVT_MENU, self.GetAddVariableBlockFunction(x, y, scaling, var_class, child_path, child_type), id=new_id)
       
   457             if len(child_tree) > 0:
   456             if len(child_tree) > 0:
   458                 new_id = wx.NewId()
       
   459                 child_menu = wx.Menu(title='')
   457                 child_menu = wx.Menu(title='')
   460                 self.GenerateTreeMenu(x, y, scaling, child_menu, child_path, var_class, child_tree)
   458                 self.GenerateTreeMenu(x, y, scaling, child_menu, child_path, var_class, child_tree)
   461                 menu.AppendMenu(new_id, "%s." % child_name, child_menu)
   459                 menu.AppendMenu(wx.ID_ANY, "%s." % child_name, child_menu)
   462 
   460 
   463     def GetAddVariableBlockFunction(self, x, y, scaling, var_class, var_name, var_type):
   461     def GetAddVariableBlockFunction(self, x, y, scaling, var_class, var_name, var_type):
   464         def AddVariableFunction(event):
   462         def AddVariableFunction(event):
   465             self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type)
   463             self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type)
   466         return AddVariableFunction
   464         return AddVariableFunction
   546                 id, kind, text, help, callback = item
   544                 id, kind, text, help, callback = item
   547                 AppendMenu(menu, help=help, id=id, kind=kind, text=text)
   545                 AppendMenu(menu, help=help, id=id, kind=kind, text=text)
   548                 # Link menu event to corresponding called functions
   546                 # Link menu event to corresponding called functions
   549                 self.Bind(wx.EVT_MENU, callback, id=id)
   547                 self.Bind(wx.EVT_MENU, callback, id=id)
   550 
   548 
       
   549     def AppendItem(self, menu, text, callback, *args, **kwargs):
       
   550         item = menu.Append(wx.ID_ANY, text, *args, **kwargs)
       
   551         self.Bind(wx.EVT_MENU, callback, item)
       
   552         return item
       
   553 
   551     # Add Block Pin Menu items to the given menu
   554     # Add Block Pin Menu items to the given menu
   552     def AddBlockPinMenuItems(self, menu, connector):
   555     def AddBlockPinMenuItems(self, menu, connector):
   553         [ID_NO_MODIFIER, ID_NEGATED, ID_RISING_EDGE,
       
   554          ID_FALLING_EDGE] = [wx.NewId() for dummy in xrange(4)]
       
   555 
       
   556         # Create menu items
   556         # Create menu items
   557         self.AddMenuItems(menu, [
   557         no_modifier = self.AppendItem(menu,  _(u'No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO)
   558             (ID_NO_MODIFIER, wx.ITEM_RADIO, _(u'No Modifier'), '', self.OnNoModifierMenu),
   558         negated = self.AppendItem(menu,  _(u'Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO)
   559             (ID_NEGATED, wx.ITEM_RADIO, _(u'Negated'), '', self.OnNegatedMenu),
   559         rising_edge = self.AppendItem(menu,  _(u'Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO)
   560             (ID_RISING_EDGE, wx.ITEM_RADIO, _(u'Rising Edge'), '', self.OnRisingEdgeMenu),
   560         falling_edge = self.AppendItem(menu,  _(u'Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO)
   561             (ID_FALLING_EDGE, wx.ITEM_RADIO, _(u'Falling Edge'), '', self.OnFallingEdgeMenu)])
   561 
   562 
   562         not_a_function = self.Controler.GetEditedElementType(
   563         type = self.Controler.GetEditedElementType(self.TagName, self.Debug)
   563             self.TagName, self.Debug) != "function"
   564         menu.Enable(ID_RISING_EDGE, type != "function")
   564         rising_edge.Enable(not_a_function)
   565         menu.Enable(ID_FALLING_EDGE, type != "function")
   565         falling_edge.Enable(not_a_function)
   566 
   566 
   567         if connector.IsNegated():
   567         if connector.IsNegated():
   568             menu.Check(ID_NEGATED, True)
   568             negated.Check(True)
   569         elif connector.GetEdge() == "rising":
   569         elif connector.GetEdge() == "rising":
   570             menu.Check(ID_RISING_EDGE, True)
   570             rising_edge.Check(True)
   571         elif connector.GetEdge() == "falling":
   571         elif connector.GetEdge() == "falling":
   572             menu.Check(ID_FALLING_EDGE, True)
   572             falling_edge.Check(True)
   573         else:
   573         else:
   574             menu.Check(ID_NO_MODIFIER, True)
   574             no_modifier.Check(True)
   575 
   575 
   576     # Add Alignment Menu items to the given menu
   576     # Add Alignment Menu items to the given menu
   577     def AddAlignmentMenuItems(self, menu):
   577     def AddAlignmentMenuItems(self, menu):
   578         [
       
   579             ID_ALIGN_LEFT, ID_ALIGN_CENTER, ID_ALIGN_RIGHT,
       
   580             ID_ALIGN_TOP, ID_ALIGN_MIDDLE, ID_ALIGN_BOTTOM,
       
   581         ] = [wx.NewId() for dummy in xrange(6)]
       
   582 
       
   583         # Create menu items
   578         # Create menu items
   584         self.AddMenuItems(menu, [
   579         self.AppendItem(menu, _(u'Left'), self.OnAlignLeftMenu)
   585             (ID_ALIGN_LEFT, wx.ITEM_NORMAL, _(u'Left'), '', self.OnAlignLeftMenu),
   580         self.AppendItem(menu, _(u'Center'), self.OnAlignCenterMenu)
   586             (ID_ALIGN_CENTER, wx.ITEM_NORMAL, _(u'Center'), '', self.OnAlignCenterMenu),
   581         self.AppendItem(menu, _(u'Right'), self.OnAlignRightMenu)
   587             (ID_ALIGN_RIGHT, wx.ITEM_NORMAL, _(u'Right'), '', self.OnAlignRightMenu),
   582         menu.AppendSeparator()
   588             None,
   583         self.AppendItem(menu, _(u'Top'), self.OnAlignTopMenu)
   589             (ID_ALIGN_TOP, wx.ITEM_NORMAL, _(u'Top'), '', self.OnAlignTopMenu),
   584         self.AppendItem(menu, _(u'Middle'), self.OnAlignMiddleMenu)
   590             (ID_ALIGN_MIDDLE, wx.ITEM_NORMAL, _(u'Middle'), '', self.OnAlignMiddleMenu),
   585         self.AppendItem(menu, _(u'Bottom'), self.OnAlignBottomMenu)
   591             (ID_ALIGN_BOTTOM, wx.ITEM_NORMAL, _(u'Bottom'), '', self.OnAlignBottomMenu)])
       
   592 
   586 
   593     # Add Wire Menu items to the given menu
   587     # Add Wire Menu items to the given menu
   594     def AddWireMenuItems(self, menu, delete=False, replace=False):
   588     def AddWireMenuItems(self, menu, delete=False, replace=False):
   595         [
   589         [
   596             ID_ADD_SEGMENT, ID_DELETE_SEGMENT, ID_REPLACE_WIRE,
   590             ID_ADD_SEGMENT, ID_DELETE_SEGMENT, ID_REPLACE_WIRE,
  1632 
  1626 
  1633     def PopupForceMenu(self):
  1627     def PopupForceMenu(self):
  1634         iec_path = self.GetElementIECPath(self.SelectedElement)
  1628         iec_path = self.GetElementIECPath(self.SelectedElement)
  1635         if iec_path is not None:
  1629         if iec_path is not None:
  1636             menu = wx.Menu(title='')
  1630             menu = wx.Menu(title='')
  1637             new_id = wx.NewId()
  1631             item = menu.Append(wx.ANY_ID, help='', kind=wx.ITEM_NORMAL, text=_("Force value"))
  1638             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Force value"))
  1632             self.Bind(wx.EVT_MENU, self.GetForceVariableMenuFunction(iec_path.upper(), self.SelectedElement), item)
  1639             self.Bind(wx.EVT_MENU, self.GetForceVariableMenuFunction(iec_path.upper(), self.SelectedElement), id=new_id)
  1633             ritem = menu.Append(wx.ANY_ID, help='', kind=wx.ITEM_NORMAL, text=_("Release value"))
  1640             new_id = wx.NewId()
  1634             self.Bind(wx.EVT_MENU, self.GetReleaseVariableMenuFunction(iec_path.upper()), ritem)
  1641             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Release value"))
       
  1642             self.Bind(wx.EVT_MENU, self.GetReleaseVariableMenuFunction(iec_path.upper()), id=new_id)
       
  1643             if self.SelectedElement.IsForced():
  1635             if self.SelectedElement.IsForced():
  1644                 menu.Enable(new_id, True)
  1636                 ritem.Enable(True)
  1645             else:
  1637             else:
  1646                 menu.Enable(new_id, False)
  1638                 ritem.Enable(False)
  1647             if self.Editor.HasCapture():
  1639             if self.Editor.HasCapture():
  1648                 self.Editor.ReleaseMouse()
  1640                 self.Editor.ReleaseMouse()
  1649             self.Editor.PopupMenu(menu)
  1641             self.Editor.PopupMenu(menu)
  1650             menu.Destroy()
  1642             menu.Destroy()
  1651 
  1643