graphics/GraphicCommons.py
changeset 1170 074e46cdedbc
parent 1169 53e4a2b775a7
child 1173 ad09b4a755ce
equal deleted inserted replaced
1169:53e4a2b775a7 1170:074e46cdedbc
    27 from math import *
    27 from math import *
    28 from types import *
    28 from types import *
    29 import datetime
    29 import datetime
    30 from threading import Lock,Timer
    30 from threading import Lock,Timer
    31 
    31 
    32 from controls.CustomToolTip import CustomToolTip, TOOLTIP_WAIT_PERIOD
    32 from graphics.ToolTipProducer import ToolTipProducer
    33 
    33 
    34 #-------------------------------------------------------------------------------
    34 #-------------------------------------------------------------------------------
    35 #                               Common constants
    35 #                               Common constants
    36 #-------------------------------------------------------------------------------
    36 #-------------------------------------------------------------------------------
    37 
    37 
   592 
   592 
   593 """
   593 """
   594 Class that implements a generic graphic element
   594 Class that implements a generic graphic element
   595 """
   595 """
   596 
   596 
   597 class Graphic_Element:
   597 class Graphic_Element(ToolTipProducer):
   598     
   598     
   599     # Create a new graphic element
   599     # Create a new graphic element
   600     def __init__(self, parent, id = None):
   600     def __init__(self, parent, id = None):
       
   601         ToolTipProducer.__init__(self, parent)
   601         self.Parent = parent
   602         self.Parent = parent
   602         self.Id = id
   603         self.Id = id
   603         self.oldPos = None
   604         self.oldPos = None
   604         self.StartPos = None
   605         self.StartPos = None
   605         self.CurrentDrag = None
   606         self.CurrentDrag = None
   609         self.Highlighted = False
   610         self.Highlighted = False
   610         self.Pos = wx.Point(0, 0)
   611         self.Pos = wx.Point(0, 0)
   611         self.Size = wx.Size(0, 0)
   612         self.Size = wx.Size(0, 0)
   612         self.BoundingBox = wx.Rect(0, 0, 0, 0)
   613         self.BoundingBox = wx.Rect(0, 0, 0, 0)
   613         self.Visible = False
   614         self.Visible = False
   614         self.ToolTip = None
       
   615         self.ToolTipPos = None
       
   616         self.ToolTipTimer = wx.Timer(self.Parent, -1)
       
   617         self.Parent.Bind(wx.EVT_TIMER, self.OnToolTipTimer, self.ToolTipTimer)
       
   618     
       
   619     def __del__(self):
       
   620         self.ToolTipTimer.Stop()
       
   621     
   615     
   622     def GetDefinition(self):
   616     def GetDefinition(self):
   623         return [self.Id], []
   617         return [self.Id], []
   624     
   618     
   625     def TestVisible(self, screen):
   619     def TestVisible(self, screen):
   988                     movey = self.StartPos.y + self.CurrentDrag.y - self.Pos.y   
   982                     movey = self.StartPos.y + self.CurrentDrag.y - self.Pos.y   
   989             self.Move(movex, movey)
   983             self.Move(movex, movey)
   990             return movex, movey
   984             return movex, movey
   991         return 0, 0
   985         return 0, 0
   992     
   986     
   993     def OnToolTipTimer(self, event):
       
   994         value = self.GetToolTipValue()
       
   995         if value is not None and self.ToolTipPos is not None:
       
   996             self.ToolTip = CustomToolTip(self.Parent, value)
       
   997             self.ToolTip.MoveToolTip(self.ToolTipPos)
       
   998             self.ToolTip.Show()
       
   999         
       
  1000     def GetToolTipValue(self):
       
  1001         return None
       
  1002     
       
  1003     def CreateToolTip(self, pos):
       
  1004         value = self.GetToolTipValue()
       
  1005         if value is not None:
       
  1006             self.ToolTipPos = pos
       
  1007             self.ToolTipTimer.Start(int(TOOLTIP_WAIT_PERIOD * 1000), oneShot=True)
       
  1008         
       
  1009     def MoveToolTip(self, pos):
       
  1010         if self.ToolTip is not None:
       
  1011             self.ToolTip.MoveToolTip(pos)
       
  1012         elif self.ToolTipPos is not None:
       
  1013             self.ToolTipPos = pos
       
  1014             self.ToolTipTimer.Start(int(TOOLTIP_WAIT_PERIOD * 1000), oneShot=True)
       
  1015     
       
  1016     def ClearToolTip(self):
       
  1017         self.ToolTipTimer.Stop()
       
  1018         self.ToolTipPos = None
       
  1019         if self.ToolTip is not None:
       
  1020             self.ToolTip.Destroy()
       
  1021             self.ToolTip = None
       
  1022     
       
  1023     # Override this method for defining the method to call for adding an highlight to this element
   987     # Override this method for defining the method to call for adding an highlight to this element
  1024     def AddHighlight(self, infos, start, end, highlight_type):
   988     def AddHighlight(self, infos, start, end, highlight_type):
  1025         pass
   989         pass
  1026     
   990     
  1027     # Override this method for defining the method to call for removing an highlight from this element
   991     # Override this method for defining the method to call for removing an highlight from this element
  1398 
  1362 
  1399 """
  1363 """
  1400 Class that implements a connector for any type of block
  1364 Class that implements a connector for any type of block
  1401 """
  1365 """
  1402 
  1366 
  1403 class Connector(DebugDataConsumer):
  1367 class Connector(DebugDataConsumer, ToolTipProducer):
  1404     
  1368     
  1405     # Create a new connector
  1369     # Create a new connector
  1406     def __init__(self, parent, name, type, position, direction, negated = False, edge = "none", onlyone = False):
  1370     def __init__(self, parent, name, type, position, direction, negated = False, edge = "none", onlyone = False):
  1407         DebugDataConsumer.__init__(self)
  1371         DebugDataConsumer.__init__(self)
       
  1372         ToolTipProducer.__init__(self, parent.Parent)
  1408         self.ParentBlock = parent
  1373         self.ParentBlock = parent
  1409         self.Name = name
  1374         self.Name = name
  1410         self.Type = type
  1375         self.Type = type
  1411         self.Pos = position
  1376         self.Pos = position
  1412         self.Direction = direction
  1377         self.Direction = direction
  1524     def SetForced(self, forced):
  1489     def SetForced(self, forced):
  1525         if self.Forced != forced:
  1490         if self.Forced != forced:
  1526             self.Forced = forced
  1491             self.Forced = forced
  1527             if self.Visible:
  1492             if self.Visible:
  1528                 self.Parent.ElementNeedRefresh(self)
  1493                 self.Parent.ElementNeedRefresh(self)
  1529 
  1494     
       
  1495     def GetComputedValue(self):
       
  1496         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
       
  1497             wire_type = self.GetType()
       
  1498             if wire_type == "STRING":
       
  1499                 return "'%s'"%self.Value
       
  1500             elif wire_type == "WSTRING":
       
  1501                 return "\"%s\""%self.Value
       
  1502             else:
       
  1503                 return str(self.Value)
       
  1504         return None
       
  1505     
       
  1506     def GetToolTipValue(self):
       
  1507         return self.GetComputedValue()
       
  1508     
  1530     def SetValue(self, value):
  1509     def SetValue(self, value):
  1531         if self.Value != value:
  1510         if self.Value != value:
  1532             self.Value = value
  1511             self.Value = value
  1533             if value is not None and not isinstance(value, BooleanType):
  1512             computed_value = self.GetComputedValue()
  1534                 connector_type = self.GetType()
  1513             if computed_value is not None:
  1535                 if connector_type == "STRING":
  1514                 self.ComputedValue = computed_value
  1536                     self.ComputedValue = "'%s'"%value
  1515                 self.SetToolTipText(self.ComputedValue)
  1537                 elif connector_type == "WSTRING":
       
  1538                     self.ComputedValue = "\"%s\""%value
       
  1539                 else:
       
  1540                     self.ComputedValue = str(value)
       
  1541                 #if self.ToolTip is not None:
       
  1542                 #    self.ToolTip.SetTip(self.ComputedValue)
       
  1543                 if len(self.ComputedValue) > 4:
  1516                 if len(self.ComputedValue) > 4:
  1544                     self.ComputedValue = self.ComputedValue[:4] + "..."
  1517                     self.ComputedValue = self.ComputedValue[:4] + "..."
  1545             self.ValueSize = None
  1518             self.ValueSize = None
  1546             if self.ParentBlock.Visible:
  1519             if self.ParentBlock.Visible:
  1547                 self.ParentBlock.Parent.ElementNeedRefresh(self)
  1520                 self.ParentBlock.Parent.ElementNeedRefresh(self)
  1943     
  1916     
  1944     def Flush(self):
  1917     def Flush(self):
  1945         self.StartConnected = None
  1918         self.StartConnected = None
  1946         self.EndConnected = None
  1919         self.EndConnected = None
  1947     
  1920     
  1948     def GetToolTipValue(self):
       
  1949         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
       
  1950             wire_type = self.GetEndConnectedType()
       
  1951             if wire_type == "STRING":
       
  1952                 return "'%s'"%self.Value
       
  1953             elif wire_type == "WSTRING":
       
  1954                 return "\"%s\""%self.Value
       
  1955             else:
       
  1956                 return str(self.Value)
       
  1957         return None
       
  1958     
       
  1959     # Returns the RedrawRect
  1921     # Returns the RedrawRect
  1960     def GetRedrawRect(self, movex = 0, movey = 0):
  1922     def GetRedrawRect(self, movex = 0, movey = 0):
  1961         rect = Graphic_Element.GetRedrawRect(self, movex, movey)
  1923         rect = Graphic_Element.GetRedrawRect(self, movex, movey)
  1962         if self.StartConnected:
  1924         if self.StartConnected:
  1963             rect = rect.Union(self.StartConnected.GetRedrawRect(movex, movey))
  1925             rect = rect.Union(self.StartConnected.GetRedrawRect(movex, movey))
  2111             if self.EndConnected:
  2073             if self.EndConnected:
  2112                 self.EndConnected.RefreshForced()
  2074                 self.EndConnected.RefreshForced()
  2113             if self.Visible:
  2075             if self.Visible:
  2114                 self.Parent.ElementNeedRefresh(self)
  2076                 self.Parent.ElementNeedRefresh(self)
  2115 
  2077 
       
  2078     def GetComputedValue(self):
       
  2079         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
       
  2080             wire_type = self.GetEndConnectedType()
       
  2081             if wire_type == "STRING":
       
  2082                 return "'%s'"%self.Value
       
  2083             elif wire_type == "WSTRING":
       
  2084                 return "\"%s\""%self.Value
       
  2085             else:
       
  2086                 return str(self.Value)
       
  2087         return None
       
  2088     
       
  2089     def GetToolTipValue(self):
       
  2090         return self.GetComputedValue()
       
  2091 
  2116     def SetValue(self, value):
  2092     def SetValue(self, value):
  2117         if self.Value != value:
  2093         if self.Value != value:
  2118             self.Value = value
  2094             self.Value = value
  2119             if value is not None and not isinstance(value, BooleanType):
  2095             computed_value = self.GetComputedValue()
  2120                 wire_type = self.GetEndConnectedType()
  2096             if computed_value is not None:
  2121                 if wire_type == "STRING":
  2097                 self.ComputedValue = computed_value
  2122                     self.ComputedValue = "'%s'"%value
  2098                 self.SetToolTipText(self.ComputedValue)
  2123                 elif wire_type == "WSTRING":
       
  2124                     self.ComputedValue = "\"%s\""%value
       
  2125                 else:
       
  2126                     self.ComputedValue = str(value)
       
  2127                 if self.ToolTip is not None:
       
  2128                     self.ToolTip.SetTip(self.ComputedValue)
       
  2129                 if len(self.ComputedValue) > 4:
  2099                 if len(self.ComputedValue) > 4:
  2130                     self.ComputedValue = self.ComputedValue[:4] + "..."
  2100                     self.ComputedValue = self.ComputedValue[:4] + "..."
  2131             self.ValueSize = None
  2101             self.ValueSize = None
  2132             if self.StartConnected:
  2102             if self.StartConnected:
  2133                 self.StartConnected.RefreshValue()
  2103                 self.StartConnected.RefreshValue()