diff -r 3ea55a5db68e -r 3536f4469cde Viewer.py --- a/Viewer.py Wed Jan 25 01:26:29 2012 +0100 +++ b/Viewer.py Mon Jan 30 16:12:19 2012 +0100 @@ -539,6 +539,7 @@ self.Editor.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE, self.OnScrollStop) self.Editor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelWindow) self.Editor.Bind(wx.EVT_SIZE, self.OnMoveWindow) + self.Editor.Bind(wx.EVT_MOUSE_EVENTS, self.OnViewerMouseEvent) def __del__(self): DebugViewer.__del__(self) @@ -621,6 +622,9 @@ def GetScale(self): return self.CurrentScale + def GetViewScale(self): + return self.ViewScale + def GetLogicalDC(self, buffered=False): if buffered: bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize()) @@ -781,6 +785,7 @@ self.Subscribed = {} self.SelectedElement = None self.HighlightedElement = None + self.ToolTipElement = None def Flush(self): self.DeleteDataConsumers() @@ -1130,14 +1135,14 @@ return wire return None - def FindElement(self, event, exclude_group = False): + def FindElement(self, event, exclude_group = False, connectors = True): dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) if self.SelectedElement and not (exclude_group and isinstance(self.SelectedElement, Graphic_Group)): - if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(event) != (0, 0): + if self.SelectedElement.HitTest(pos, connectors) or self.SelectedElement.TestHandle(event) != (0, 0): return self.SelectedElement for element in self.GetElements(): - if element.HitTest(pos) or element.TestHandle(event) != (0, 0): + if element.HitTest(pos, connectors) or element.TestHandle(event) != (0, 0): return element return None @@ -1400,6 +1405,21 @@ # Mouse event functions #------------------------------------------------------------------------------- + def OnViewerMouseEvent(self, event): + if not event.Entering(): + element = None + if not event.Leaving(): + element = self.FindElement(event, True, False) + if self.ToolTipElement is not None: + self.ToolTipElement.ClearToolTip() + self.ToolTipElement = element + if self.ToolTipElement is not None: + tooltip_pos = self.Editor.ClientToScreen(event.GetPosition()) + tooltip_pos.x += 10 + tooltip_pos.y += 10 + self.ToolTipElement.CreateToolTip(tooltip_pos) + event.Skip() + def OnViewerLeftDown(self, event): if self.Mode == MODE_SELECTION: dc = self.GetLogicalDC() @@ -1466,8 +1486,11 @@ if self.SelectedElement is not None: self.SelectedElement.SetSelected(False) self.SelectedElement = wire + if self.HighlightedElement is not None: + self.HighlightedElement.SetHighlighted(False) + self.HighlightedElement = wire self.RefreshVisibleElements() - self.SelectedElement.Refresh() + self.SelectedElement.SetHighlighted(True) else: if self.SelectedElement is not None and self.SelectedElement != element: self.SelectedElement.SetSelected(False) @@ -1556,12 +1579,8 @@ self.SelectedElement.OnMotion(event, dc, self.Scaling) self.SelectedElement.GeneratePoints() self.SelectedElement.RefreshModel() - if self.HighlightedElement is not None: - self.HighlightedElement.SetHighlighted(False) - self.HighlightedElement = None - self.SelectedElement.SetHighlighted(True) - self.HighlightedElement = self.SelectedElement self.SelectedElement.SetSelected(True) + self.SelectedElement.HighlightPoint(pos) self.RefreshBuffer() elif connector is None or self.SelectedElement.GetDragging(): self.DrawingWire = False @@ -1666,20 +1685,15 @@ self.RefreshVisibleElements() else: if not event.Dragging(): - highlighted = self.FindElement(event) + highlighted = self.FindElement(event, connectors=False) if self.HighlightedElement is not None and self.HighlightedElement != highlighted: - self.HighlightedElement.ClearToolTip() self.HighlightedElement.SetHighlighted(False) self.HighlightedElement = None if highlighted is not None: - tooltip_pos = self.Editor.ClientToScreen(event.GetPosition()) - tooltip_pos.x += 10 - tooltip_pos.y += 10 + if isinstance(highlighted, (Wire, Graphic_Group)): + highlighted.HighlightPoint(pos) if self.HighlightedElement != highlighted: - highlighted.CreateToolTip(tooltip_pos) highlighted.SetHighlighted(True) - else: - highlighted.MoveToolTip(tooltip_pos) self.HighlightedElement = highlighted if self.rubberBand.IsShown(): self.rubberBand.OnMotion(event, dc, self.Scaling) @@ -1692,6 +1706,8 @@ self.SelectedElement.GeneratePoints() if movex != 0 or movey != 0: self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) + else: + self.SelectedElement.HighlightPoint(pos) else: movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling) if movex != 0 or movey != 0: @@ -1703,8 +1719,6 @@ if iec_path is not None: self.StartMousePos = None if self.HighlightedElement is not None: - if isinstance(self.HighlightedElement, Wire): - self.HighlightedElement.ClearToolTip() self.HighlightedElement.SetHighlighted(False) self.HighlightedElement = None data = wx.TextDataObject(str((iec_path, "debug"))) @@ -1720,7 +1734,6 @@ if self.SelectedElement is not None and self.SelectedElement.GetDragging(): event.Skip() elif self.HighlightedElement is not None: - self.HighlightedElement.ClearToolTip() self.HighlightedElement.SetHighlighted(False) self.HighlightedElement = None event.Skip()