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