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 |