diff -r c2d093402005 -r 06d28f03f6f4 Viewer.py --- a/Viewer.py Mon Dec 31 13:36:11 2007 +0100 +++ b/Viewer.py Wed Jan 02 18:15:31 2008 +0100 @@ -294,6 +294,7 @@ self.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp) self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick) self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp) + self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer) self.Bind(wx.EVT_MOTION, self.OnViewerMotion) self.Bind(wx.EVT_CHAR, self.OnChar) if wx.VERSION < (2, 7, 0): @@ -389,6 +390,7 @@ self.Wires = {} self.Comments = {} self.SelectedElement = None + self.HighlightedElement = None # Remove all elements def CleanView(self): @@ -1147,21 +1149,41 @@ event.Skip() def OnViewerMotion(self, event): + refresh = False + dc = self.GetLogicalDC() + pos = GetScaledEventPosition(event, dc, self.Scaling) + if not event.Dragging(): + highlighted = self.FindElement(pos) + if self.HighlightedElement is not None and self.HighlightedElement != highlighted: + self.HighlightedElement.SetHighlighted(False) + self.HighlightedElement = None + refresh = True + if highlighted is not None: + highlighted.SetHighlighted(True) + refresh = True + self.HighlightedElement = highlighted if self.rubberBand.IsShown(): - self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling) + self.rubberBand.OnMotion(event, dc, self.Scaling) elif self.Mode == MODE_SELECTION and self.SelectedElement: 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) + refresh = True + elif self.SelectedElement.OnMotion(event, dc, self.Scaling): + refresh = True self.UpdateScrollPos(event) + if refresh: + self.Refresh(False) + event.Skip() + + def OnLeaveViewer(self, event): + if self.HighlightedElement is not None: + self.HighlightedElement.SetHighlighted(False) + self.HighlightedElement = None + self.Refresh(False) event.Skip() def UpdateScrollPos(self, event): @@ -2133,6 +2155,16 @@ dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height) for i in xrange(1, height / self.Scaling[1] + 1): dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1]) + + # Draw highlighted elements + for comment in self.Comments: + comment.DrawHighlightment(dc) + for wire in self.Wires: + wire.DrawHighlightment(dc) + for block in self.Blocks: + block.DrawHighlightment(dc) + + # Draw all elements for comment in self.Comments: if comment != self.SelectedElement: comment.Draw(dc) @@ -2144,6 +2176,7 @@ block.Draw(dc) if self.SelectedElement: self.SelectedElement.Draw(dc) + if self.rubberBand.IsShown(): self.rubberBand.Draw(dc) dc.EndDrawing()