diff -r fc7e0b8ed9d3 -r 9c74d00ce93e Viewer.py --- a/Viewer.py Mon Dec 10 15:52:49 2007 +0100 +++ b/Viewer.py Wed Dec 26 16:38:09 2007 +0100 @@ -43,14 +43,21 @@ # Graphic elements Viewer base class #------------------------------------------------------------------------------- -# ID Constants for menu items -[ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1, - ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3, - ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6, - ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9, - ID_FBDVIEWERCONTEXTUALMENUITEMS11, ID_FBDVIEWERCONTEXTUALMENUITEMS12, - ID_FBDVIEWERCONTEXTUALMENUITEMS14, ID_FBDVIEWERCONTEXTUALMENUITEMS15, -] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(12)] +# ID Constants for alignment menu items +[ID_VIEWERALIGNMENTMENUITEMS0, ID_VIEWERALIGNMENTMENUITEMS1, + ID_VIEWERALIGNMENTMENUITEMS2, ID_VIEWERALIGNMENTMENUITEMS4, + ID_VIEWERALIGNMENTMENUITEMS5, ID_VIEWERALIGNMENTMENUITEMS6, +] = [wx.NewId() for _init_coll_AlignmentMenu_Items in range(6)] + +# ID Constants for contextual menu items +[ID_VIEWERCONTEXTUALMENUITEMS0, ID_VIEWERCONTEXTUALMENUITEMS1, + ID_VIEWERCONTEXTUALMENUITEMS2, ID_VIEWERCONTEXTUALMENUITEMS3, + ID_VIEWERCONTEXTUALMENUITEMS5, ID_VIEWERCONTEXTUALMENUITEMS6, + ID_VIEWERCONTEXTUALMENUITEMS8, ID_VIEWERCONTEXTUALMENUITEMS9, + ID_VIEWERCONTEXTUALMENUITEMS11, ID_VIEWERCONTEXTUALMENUITEMS12, + ID_VIEWERCONTEXTUALMENUITEMS14, ID_VIEWERCONTEXTUALMENUITEMS16, + ID_VIEWERCONTEXTUALMENUITEMS17, +] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(13)] class ViewerDropTarget(wx.TextDropTarget): @@ -155,67 +162,101 @@ else: event(self, function) + # Create Alignment Menu items + def _init_coll_AlignmentMenu_Items(self, parent): + # Create menu items + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS0, + kind=wx.ITEM_NORMAL, text=u'Left') + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS1, + kind=wx.ITEM_NORMAL, text=u'Center') + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS2, + kind=wx.ITEM_NORMAL, text=u'Right') + parent.AppendSeparator() + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS4, + kind=wx.ITEM_NORMAL, text=u'Top') + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS5, + kind=wx.ITEM_NORMAL, text=u'Middle') + AppendMenu(parent, help='', id=ID_VIEWERALIGNMENTMENUITEMS6, + kind=wx.ITEM_NORMAL, text=u'Bottom') + # Link menu event to corresponding called functions + self.Bind(wx.EVT_MENU, self.OnAlignLeftMenu, + id=ID_VIEWERALIGNMENTMENUITEMS0) + self.Bind(wx.EVT_MENU, self.OnAlignCenterMenu, + id=ID_VIEWERALIGNMENTMENUITEMS1) + self.Bind(wx.EVT_MENU, self.OnAlignRightMenu, + id=ID_VIEWERALIGNMENTMENUITEMS2) + self.Bind(wx.EVT_MENU, self.OnAlignTopMenu, + id=ID_VIEWERALIGNMENTMENUITEMS4) + self.Bind(wx.EVT_MENU, self.OnAlignMiddleMenu, + id=ID_VIEWERALIGNMENTMENUITEMS5) + self.Bind(wx.EVT_MENU, self.OnAlignBottomMenu, + id=ID_VIEWERALIGNMENTMENUITEMS6) + # Create Contextual Menu items def _init_coll_ContextualMenu_Items(self, parent): # Create menu items - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS0, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS0, kind=wx.ITEM_RADIO, text=u'No Modifier') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS1, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS1, kind=wx.ITEM_RADIO, text=u'Negated') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS2, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS2, kind=wx.ITEM_RADIO, text=u'Rising Edge') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS3, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS3, kind=wx.ITEM_RADIO, text=u'Falling Edge') parent.AppendSeparator() - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS5, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS5, kind=wx.ITEM_NORMAL, text=u'Add Wire Segment') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS6, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS6, kind=wx.ITEM_NORMAL, text=u'Delete Wire Segment') parent.AppendSeparator() - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS8, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS8, kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS9, kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch') parent.AppendSeparator() - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS11, kind=wx.ITEM_NORMAL, text=u'Clear Execution Order') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS12, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS12, kind=wx.ITEM_NORMAL, text=u'Reset Execution Order') parent.AppendSeparator() - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS14, + parent.AppendMenu(ID_VIEWERCONTEXTUALMENUITEMS14, "Alignment", self.AlignmentMenu) + parent.AppendSeparator() + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS16, kind=wx.ITEM_NORMAL, text=u'Edit Block') - AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS15, + AppendMenu(parent, help='', id=ID_VIEWERCONTEXTUALMENUITEMS17, kind=wx.ITEM_NORMAL, text=u'Delete') # Link menu event to corresponding called functions self.Bind(wx.EVT_MENU, self.OnNoModifierMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS0) + id=ID_VIEWERCONTEXTUALMENUITEMS0) self.Bind(wx.EVT_MENU, self.OnNegatedMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS1) + id=ID_VIEWERCONTEXTUALMENUITEMS1) self.Bind(wx.EVT_MENU, self.OnRisingEdgeMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS2) + id=ID_VIEWERCONTEXTUALMENUITEMS2) self.Bind(wx.EVT_MENU, self.OnFallingEdgeMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS3) + id=ID_VIEWERCONTEXTUALMENUITEMS3) self.Bind(wx.EVT_MENU, self.OnAddSegmentMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS5) + id=ID_VIEWERCONTEXTUALMENUITEMS5) self.Bind(wx.EVT_MENU, self.OnDeleteSegmentMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS6) + id=ID_VIEWERCONTEXTUALMENUITEMS6) self.Bind(wx.EVT_MENU, self.OnAddBranchMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS8) + id=ID_VIEWERCONTEXTUALMENUITEMS8) self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS9) + id=ID_VIEWERCONTEXTUALMENUITEMS9) self.Bind(wx.EVT_MENU, self.OnClearExecutionOrderMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS11) + id=ID_VIEWERCONTEXTUALMENUITEMS11) self.Bind(wx.EVT_MENU, self.OnResetExecutionOrderMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS12) + id=ID_VIEWERCONTEXTUALMENUITEMS12) self.Bind(wx.EVT_MENU, self.OnEditBlockMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS14) + id=ID_VIEWERCONTEXTUALMENUITEMS16) self.Bind(wx.EVT_MENU, self.OnDeleteMenu, - id=ID_FBDVIEWERCONTEXTUALMENUITEMS15) + id=ID_VIEWERCONTEXTUALMENUITEMS17) # Create and initialize Contextual Menu def _init_menus(self): + self.AlignmentMenu = wx.Menu(title='') self.ContextualMenu = wx.Menu(title='') + self._init_coll_AlignmentMenu_Items(self.AlignmentMenu) self._init_coll_ContextualMenu_Items(self.ContextualMenu) # Create a new Viewer @@ -230,6 +271,7 @@ self.Scaling = None #self.Scaling = (8, 8) self.DrawGrid = True + self.DrawingWire = False self.current_id = 0 self.TagName = tagname @@ -741,75 +783,129 @@ def PopupBlockMenu(self, connector = None): if connector is not None and connector.IsCompatible("BOOL"): type = self.Controler.GetEditedElementType(self.TagName) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, True) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, True) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, type != "function") - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, type != "function") + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, type != "function") + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, type != "function") else: - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, self.SelectedElement.GetType() in self.Controler.GetProjectPouNames()) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS5, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS6, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, self.SelectedElement.GetType() in self.Controler.GetProjectPouNames()) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, True) if connector: if connector.IsNegated(): - self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS1, True) + self.ContextualMenu.Check(ID_VIEWERCONTEXTUALMENUITEMS1, True) elif connector.GetEdge() == "rising": - self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS2, True) + self.ContextualMenu.Check(ID_VIEWERCONTEXTUALMENUITEMS2, True) elif connector.GetEdge() == "falling": - self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS3, True) - else: - self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS0, True) + self.ContextualMenu.Check(ID_VIEWERCONTEXTUALMENUITEMS3, True) + else: + self.ContextualMenu.Check(ID_VIEWERCONTEXTUALMENUITEMS0, True) self.PopupMenu(self.ContextualMenu) def PopupWireMenu(self): - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, True) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, True) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS5, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS6, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, True) self.PopupMenu(self.ContextualMenu) def PopupDivergenceMenu(self, connector): - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, True) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, connector) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS5, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS6, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, connector) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, True) self.PopupMenu(self.ContextualMenu) + def PopupGroupMenu(self): + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS5, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS6, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, True) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, True) + self.PopupMenu(self.ContextualMenu) + def PopupDefaultMenu(self, block = True): - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False) - self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, block) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS0, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS1, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS2, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS3, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS5, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS6, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS8, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS9, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS14, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS16, False) + self.ContextualMenu.Enable(ID_VIEWERCONTEXTUALMENUITEMS17, block) self.PopupMenu(self.ContextualMenu) #------------------------------------------------------------------------------- # Menu items functions #------------------------------------------------------------------------------- + def OnAlignLeftMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(ALIGN_LEFT, None) + self.RefreshBuffer() + event.Skip() + + def OnAlignCenterMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(ALIGN_CENTER, None) + self.RefreshBuffer() + event.Skip() + + def OnAlignRightMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(ALIGN_RIGHT, None) + self.RefreshBuffer() + event.Skip() + + def OnAlignTopMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(None, ALIGN_TOP) + self.RefreshBuffer() + event.Skip() + + def OnAlignMiddleMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(None, ALIGN_MIDDLE) + self.RefreshBuffer() + event.Skip() + + def OnAlignBottomMenu(self, event): + if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group): + self.SelectedElement.AlignElements(None, ALIGN_BOTTOM) + self.RefreshBuffer() + event.Skip() + def OnNoModifierMenu(self, event): if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorNegated(False) @@ -858,7 +954,7 @@ def OnEditBlockMenu(self, event): if self.SelectedElement: - self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType()) + self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s"%self.SelectedElement.GetType()) event.Skip() def OnDeleteMenu(self, event): @@ -905,42 +1001,55 @@ self.SelectedElement.SetSelected(True) else: element = self.FindElement(pos) - if self.SelectedElement and self.SelectedElement != element: - self.SelectedElement.SetSelected(False) - self.SelectedElement = None + connector = self.FindBlockConnector(pos) + if self.DrawingWire: + self.DrawingWire = False + if connector: + event.Dragging = lambda : True + self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) + if self.SelectedElement.EndConnected is not None: + self.SelectedElement.ResetPoints() + self.SelectedElement.GeneratePoints() + self.SelectedElement.RefreshModel() + self.SelectedElement.SetSelected(True) + element = self.SelectedElement + self.RefreshBuffer() + else: + self.SelectedElement.Delete() + element = None self.Refresh(False) - if element: - self.SelectedElement = element - self.SelectedElement.OnLeftDown(event, dc, self.Scaling) - self.Refresh(False) + elif connector: + self.DrawingWire = True + pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling) + if (connector.GetDirection() == EAST): + wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST]) + else: + wire = Wire(self, [wx.Point(pos.x, pos.y), WEST], [wx.Point(pos.x, pos.y), EAST]) + wire.oldPos = pos + wire.Handle = (HANDLE_POINT, 0) + wire.ProcessDragging(0, 0) + wire.Handle = (HANDLE_POINT, 1) + self.AddWire(wire) + if self.SelectedElement: + self.SelectedElement.SetSelected(False) + self.SelectedElement = wire else: - self.rubberBand.Reset() - self.rubberBand.OnLeftDown(event, dc, self.Scaling) + if self.SelectedElement and self.SelectedElement != element: + self.SelectedElement.SetSelected(False) + self.SelectedElement = None + self.Refresh(False) + if element: + self.SelectedElement = element + self.SelectedElement.OnLeftDown(event, dc, self.Scaling) + self.Refresh(False) + else: + self.rubberBand.Reset() + self.rubberBand.OnLeftDown(event, dc, self.Scaling) elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, MODE_STEP, MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION]: self.rubberBand.Reset() self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) - elif self.Mode == MODE_WIRE: - pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling) - connector = self.FindBlockConnector(pos) - if connector: - if (connector.GetDirection() == EAST): - wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST]) - else: - wire = Wire(self, [wx.Point(pos.x, pos.y), WEST], [wx.Point(pos.x, pos.y), EAST]) - wire.oldPos = pos - wire.Handle = (HANDLE_POINT, 0) - wire.ProcessDragging(0, 0) - wire.Handle = (HANDLE_POINT, 1) - self.AddWire(wire) - if self.SelectedElement: - self.SelectedElement.SetSelected(False) - self.SelectedElement = wire - elif self.SelectedElement: - self.SelectedElement.SetSelected(False) - self.SelectedElement = None - self.Refresh(False) event.Skip() def OnViewerLeftUp(self, event): @@ -987,21 +1096,27 @@ elif self.Mode == MODE_ACTION: wx.CallAfter(self.AddNewActionBlock, bbox) elif self.Mode == MODE_SELECTION and self.SelectedElement: - self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) - wx.CallAfter(self.SetCursor, wx.NullCursor) - self.Refresh(False) - elif self.Mode == MODE_WIRE and self.SelectedElement: - if self.SelectedElement.EndConnected != None: - self.SelectedElement.ResetPoints() - self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) - self.SelectedElement.GeneratePoints() - self.SelectedElement.RefreshModel() - self.SelectedElement.SetSelected(True) - self.RefreshBuffer() - else: - self.SelectedElement.Delete() - self.SelectedElement = None - self.Refresh(False) + dc = self.GetLogicalDC() + if self.DrawingWire: + pos = event.GetLogicalPosition(dc) + connector = self.FindBlockConnector(pos) + if self.SelectedElement.EndConnected is not None: + self.DrawingWire = False + self.SelectedElement.ResetPoints() + self.SelectedElement.OnMotion(event, dc, self.Scaling) + self.SelectedElement.GeneratePoints() + self.SelectedElement.RefreshModel() + self.SelectedElement.SetSelected(True) + self.RefreshBuffer() + elif connector is None: + self.DrawingWire = False + self.SelectedElement.Delete() + self.SelectedElement = None + self.Refresh(False) + else: + self.SelectedElement.OnLeftUp(event, dc, self.Scaling) + wx.CallAfter(self.SetCursor, wx.NullCursor) + self.Refresh(False) if self.Mode != MODE_SELECTION and not self.SavedMode: wx.CallAfter(self.ParentWindow.ResetCurrentMode) event.Skip() @@ -1035,16 +1150,16 @@ if self.rubberBand.IsShown(): self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling) elif self.Mode == MODE_SELECTION and self.SelectedElement: - if self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling): - self.Refresh(False) - elif self.Mode == MODE_WIRE and self.SelectedElement: - dc = self.GetLogicalDC() - pos = GetScaledEventPosition(event, dc, self.Scaling) - connector = self.FindBlockConnector(pos, False) - if not connector or self.SelectedElement.EndConnected == None: - self.SelectedElement.ResetPoints() - self.SelectedElement.OnMotion(event, dc, self.Scaling) - self.SelectedElement.GeneratePoints() + if self.DrawingWire: + dc = self.GetLogicalDC() + pos = GetScaledEventPosition(event, dc, self.Scaling) + connector = self.FindBlockConnector(pos, False) + if not connector or self.SelectedElement.EndConnected == None: + self.SelectedElement.ResetPoints() + self.SelectedElement.OnMotion(event, dc, self.Scaling) + self.SelectedElement.GeneratePoints() + self.Refresh(False) + elif self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling): self.Refresh(False) self.UpdateScrollPos(event) event.Skip() @@ -1086,7 +1201,10 @@ self.SelectedElement = None self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh(False) + self.SetCursor(wx.NullCursor) + self.Refresh(False) + elif keycode == wx.WXK_RETURN and self.SelectedElement: + self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) elif keycode == wx.WXK_LEFT: if event.ControlDown() and event.ShiftDown(): self.Scroll(0, ypos)