graphics/GraphicCommons.py
changeset 993 7fbde4a19ec3
parent 945 c1159acb0886
child 1047 efcc2283dd77
--- a/graphics/GraphicCommons.py	Thu Mar 21 17:33:50 2013 +0100
+++ b/graphics/GraphicCommons.py	Fri Mar 22 00:18:51 2013 +0100
@@ -578,20 +578,27 @@
 
 class ToolTip(wx.PopupWindow):
     
-    def __init__(self, parent, tip):
+    def __init__(self, parent, tip, restricted=True):
         wx.PopupWindow.__init__(self, parent)
         
         self.CurrentPosition = wx.Point(0, 0)
+        self.Restricted = restricted
         
         self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
         self.SetTip(tip)
         
+        self.Font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"])
+        
         self.Bind(wx.EVT_PAINT, self.OnPaint)
-        
+    
+    def SetFont(self, font):
+        self.Font = font
+        self.RefreshTip()
+    
     def SetTip(self, tip):
         lines = []
         for line in tip.splitlines():
-            if line != "":
+            if self.Restricted and line != "":
                 words = line.split()
                 new_line = words[0]
                 for word in words[1:]:
@@ -603,7 +610,7 @@
                 lines.append(new_line)
             else:
                 lines.append(line)
-        if len(lines) > TOOLTIP_MAX_LINE:
+        if self.Restricted and len(lines) > TOOLTIP_MAX_LINE:
             self.Tip = lines[:TOOLTIP_MAX_LINE]
             if len(self.Tip[-1]) < TOOLTIP_MAX_CHARACTERS - 3:
                 self.Tip[-1] += "..."
@@ -614,14 +621,20 @@
         wx.CallAfter(self.RefreshTip)
     
     def MoveToolTip(self, pos):
-        self.CurrentPosition = pos
+        screen_size = wx.GetDisplaySize()
+        w, h = self.GetTipExtent()
+        self.CurrentPosition = wx.Point(
+            max(0, min(pos.x, screen_size[0] - w - 4)),
+            max(0, min(pos.y, screen_size[1] - h - 4))) 
         self.SetPosition(pos)
     
     def GetTipExtent(self):
         max_width = 0
         max_height = 0
         for line in self.Tip:
-            w, h = self.GetTextExtent(line)
+            dc = wx.MemoryDC()
+            dc.SetFont(self.Font)
+            w, h = dc.GetTextExtent(line)
             max_width = max(max_width, w)
             max_height += h
         return max_width, max_height
@@ -638,7 +651,7 @@
         dc.Clear()
         dc.SetPen(MiterPen(wx.BLACK))
         dc.SetBrush(wx.Brush(wx.Colour(255, 238, 170)))
-        dc.SetFont(wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"]))
+        dc.SetFont(self.Font)
         dc.BeginDrawing()
         w, h = self.GetTipExtent()
         dc.DrawRectangle(0, 0, w + 4, h + 4)