graphics/GraphicCommons.py
changeset 625 b7062a7018ec
parent 612 fdb9501e5cc8
child 628 edcd40605fff
--- a/graphics/GraphicCommons.py	Thu Jan 12 17:04:22 2012 +0100
+++ b/graphics/GraphicCommons.py	Tue Jan 17 16:44:00 2012 +0100
@@ -101,6 +101,9 @@
 # Define highlight refresh inhibition period in second
 REFRESH_HIGHLIGHT_PERIOD = 0.1
 
+# Define tooltip wait for displaying period in second
+TOOLTIP_WAIT_PERIOD = 0.5
+
 HANDLE_CURSORS = {
     (1, 1) : 2,
     (3, 3) : 2,
@@ -602,6 +605,13 @@
         self.Size = wx.Size(0, 0)
         self.BoundingBox = wx.Rect(0, 0, 0, 0)
         self.Visible = False
+        self.ToolTip = None
+        self.ToolTipPos = None
+        self.ToolTipTimer = wx.Timer(self.Parent, -1)
+        self.Parent.Bind(wx.EVT_TIMER, self.OnToolTipTimer, self.ToolTipTimer)
+    
+    def __del__(self):
+        self
     
     def GetDefinition(self):
         return [self.Id], []
@@ -967,6 +977,36 @@
             return movex, movey
         return 0, 0
     
+    def OnToolTipTimer(self, event):
+        value = self.GetToolTipValue()
+        if value is not None and self.ToolTipPos is not None:
+            self.ToolTip = ToolTip(self.Parent, value)
+            self.ToolTip.MoveToolTip(self.ToolTipPos)
+            self.ToolTip.Show()
+        
+    def GetToolTipValue(self):
+        return None
+    
+    def CreateToolTip(self, pos):
+        value = self.GetToolTipValue()
+        if value is not None:
+            self.ToolTipPos = pos
+            self.ToolTipTimer.Start(int(TOOLTIP_WAIT_PERIOD * 1000), oneShot=True)
+        
+    def MoveToolTip(self, pos):
+        if self.ToolTip is not None:
+            self.ToolTip.MoveToolTip(pos)
+        elif self.ToolTipPos is not None:
+            self.ToolTipPos = pos
+            self.ToolTipTimer.Start(int(TOOLTIP_WAIT_PERIOD * 1000), oneShot=True)
+    
+    def ClearToolTip(self):
+        self.ToolTipTimer.Stop()
+        self.ToolTipPos = None
+        if self.ToolTip is not None:
+            self.ToolTip.Destroy()
+            self.ToolTip = None
+    
     # Override this method for defining the method to call for adding an highlight to this element
     def AddHighlight(self, infos, start, end, highlight_type):
         pass
@@ -1792,7 +1832,6 @@
         self.OverStart = False
         self.OverEnd = False
         self.ComputingType = False
-        self.ToolTip = None
         self.Font = parent.GetMiniFont()
     
     def GetDefinition(self):
@@ -1806,24 +1845,13 @@
         self.StartConnected = None
         self.EndConnected = None
     
-    def CreateToolTip(self, pos):
+    def GetToolTipValue(self):
         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
             if isinstance(self.Value, StringType) and self.Value.find("#") == -1:
-                computed_value = "\"%s\""%self.Value
+                return "\"%s\""%self.Value
             else:
-                computed_value = str(self.Value)
-            self.ToolTip = ToolTip(self.Parent, computed_value)
-            self.ToolTip.MoveToolTip(pos)
-            self.ToolTip.Show()
-    
-    def MoveToolTip(self, pos):
-        if self.ToolTip is not None:
-            self.ToolTip.MoveToolTip(pos)
-    
-    def ClearToolTip(self):
-        if self.ToolTip is not None:
-            self.ToolTip.Destroy()
-            self.ToolTip = None
+                return str(self.Value)
+        return None
     
     # Returns the RedrawRect
     def GetRedrawRect(self, movex = 0, movey = 0):