--- 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()