graphics/GraphicCommons.py
changeset 338 87e5015330ae
parent 334 cf0809bc5675
child 339 d4977f6d1621
--- a/graphics/GraphicCommons.py	Tue Mar 24 17:31:11 2009 +0100
+++ b/graphics/GraphicCommons.py	Tue Mar 24 17:31:42 2009 +0100
@@ -293,6 +293,42 @@
                 self.currentBox.height)
 
 #-------------------------------------------------------------------------------
+#                               Viewer Rubberband
+#-------------------------------------------------------------------------------
+
+"""
+Class that implements a custom tool tip
+"""
+
+class ToolTip(wx.PopupWindow):
+    
+    # Create a rubberband by indicated on which window it must be drawn
+    def __init__(self, parent, tip):
+        wx.PopupWindow.__init__(self, parent)
+        self.SetTip(tip)
+        
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
+        
+    def SetTip(self, tip):
+        self.Tip = tip
+        dc = wx.ClientDC(self)
+        w, h = dc.GetTextExtent(tip)
+        self.SetSize(wx.Size(w + 4, h + 4))
+        self.Refresh()
+        
+    def OnPaint(self, event):
+        dc = wx.AutoBufferedPaintDC(self)
+        dc.Clear()
+        dc.SetPen(wx.BLACK_PEN)
+        dc.SetBrush(wx.Brush(wx.Colour(255, 238, 170)))
+        dc.BeginDrawing()
+        w, h = dc.GetTextExtent(self.Tip)
+        dc.DrawRectangle(0, 0, w + 4, h + 4)
+        dc.DrawText(self.Tip, 2, 2)
+        dc.EndDrawing()
+        event.Skip()
+
+#-------------------------------------------------------------------------------
 #                    Helper for highlighting error in drawn text
 #-------------------------------------------------------------------------------
 
@@ -1385,12 +1421,28 @@
         self.OverStart = False
         self.OverEnd = False
         self.ComputingType = False
+        self.ToolTip = None
         self.Font = parent.GetMiniFont()
         
     def Flush(self):
         self.StartConnected = None
         self.EndConnected = None
     
+    def CreateToolTip(self, pos):
+        if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
+            if isinstance(self.Value, StringType):
+                self.ComputedValue = "\"%s\""%self.Value
+            else:
+                self.ComputedValue = str(self.Value)
+            self.ToolTip = ToolTip(self.Parent, self.ComputedValue)
+            self.ToolTip.SetPosition(pos)
+            self.ToolTip.Show()
+    
+    def ClearToolTip(self):
+        if self.ToolTip is not None:
+            self.ToolTip.Destroy()
+            self.ToolTip = None
+    
     # Returns the RedrawRect
     def GetRedrawRect(self, movex = 0, movey = 0):
         rect = Graphic_Element.GetRedrawRect(self, movex, movey)
@@ -1532,15 +1584,17 @@
         return False
     
     def SetValue(self, value):
-        if self.Value != value:
+        if self.Value != value and self.Parent:
             self.Value = value
             if value is not None and not isinstance(value, BooleanType):
                 if isinstance(value, StringType):
                     self.ComputedValue = "\"%s\""%value
                 else:
                     self.ComputedValue = str(value)
+                if self.ToolTip is not None:
+                    self.ToolTip.SetTip(self.ComputedValue)
                 if len(self.ComputedValue) > 4:
-                    self.ComputedValue = self.ComputedValue[:4] + "..."            
+                    self.ComputedValue = self.ComputedValue[:4] + "..."
             if isinstance(self.ComputedValue, StringType):
                 dc = wx.ClientDC(self.Parent)
                 dc.SetFont(self.Font)