graphics/GraphicCommons.py
changeset 2450 5024c19ca8f0
parent 2437 105c20fdeb19
child 2457 9deec258ab1a
equal deleted inserted replaced
2449:b0560adec4b7 2450:5024c19ca8f0
    24 
    24 
    25 
    25 
    26 from __future__ import absolute_import
    26 from __future__ import absolute_import
    27 from __future__ import division
    27 from __future__ import division
    28 from math import *
    28 from math import *
    29 from types import *
    29 from six import string_types
    30 from six.moves import xrange
    30 from six.moves import xrange
    31 
    31 
    32 import wx
    32 import wx
    33 from graphics.ToolTipProducer import ToolTipProducer
    33 from graphics.ToolTipProducer import ToolTipProducer
    34 from graphics.DebugDataConsumer import DebugDataConsumer
    34 from graphics.DebugDataConsumer import DebugDataConsumer
  1079             height = CONNECTOR_SIZE
  1079             height = CONNECTOR_SIZE
  1080             if self.Edge == "rising" and self.Direction[1] == 1:
  1080             if self.Edge == "rising" and self.Direction[1] == 1:
  1081                 y -= 5
  1081                 y -= 5
  1082                 height += 5
  1082                 height += 5
  1083         rect = wx.Rect(x - abs(movex), y - abs(movey), width + 2 * abs(movex), height + 2 * abs(movey))
  1083         rect = wx.Rect(x - abs(movex), y - abs(movey), width + 2 * abs(movex), height + 2 * abs(movey))
  1084         if self.ValueSize is None and isinstance(self.ComputedValue, (StringType, UnicodeType)):
  1084         if self.ValueSize is None and isinstance(self.ComputedValue, string_types):
  1085             self.ValueSize = self.ParentBlock.Parent.GetMiniTextExtent(self.ComputedValue)
  1085             self.ValueSize = self.ParentBlock.Parent.GetMiniTextExtent(self.ComputedValue)
  1086         if self.ValueSize is not None:
  1086         if self.ValueSize is not None:
  1087             width, height = self.ValueSize
  1087             width, height = self.ValueSize
  1088             rect = rect.Union(
  1088             rect = rect.Union(
  1089                 wx.Rect(
  1089                 wx.Rect(
  1161             self.Forced = forced
  1161             self.Forced = forced
  1162             if self.Visible:
  1162             if self.Visible:
  1163                 self.Parent.ElementNeedRefresh(self)
  1163                 self.Parent.ElementNeedRefresh(self)
  1164 
  1164 
  1165     def GetComputedValue(self):
  1165     def GetComputedValue(self):
  1166         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
  1166         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, bool):
  1167             return self.Value
  1167             return self.Value
  1168         return None
  1168         return None
  1169 
  1169 
  1170     def GetToolTipValue(self):
  1170     def GetToolTipValue(self):
  1171         return self.GetComputedValue()
  1171         return self.GetComputedValue()
  1198 
  1198 
  1199     def ReceivingCurrent(self):
  1199     def ReceivingCurrent(self):
  1200         current = False
  1200         current = False
  1201         for wire, _handle in self.Wires:
  1201         for wire, _handle in self.Wires:
  1202             value = wire.GetValue()
  1202             value = wire.GetValue()
  1203             if current != "undefined" and isinstance(value, BooleanType):
  1203             if current != "undefined" and isinstance(value, bool):
  1204                 current |= wire.GetValue()
  1204                 current |= wire.GetValue()
  1205             elif value == "undefined":
  1205             elif value == "undefined":
  1206                 current = "undefined"
  1206                 current = "undefined"
  1207         return current
  1207         return current
  1208 
  1208 
  1470         #    dc.SetPen(MiterPen(self.Highlights[-1][1]))
  1470         #    dc.SetPen(MiterPen(self.Highlights[-1][1]))
  1471         #    dc.SetBrush(wx.Brush(self.Highlights[-1][0]))
  1471         #    dc.SetBrush(wx.Brush(self.Highlights[-1][0]))
  1472         else:
  1472         else:
  1473             if not self.Valid:
  1473             if not self.Valid:
  1474                 dc.SetPen(MiterPen(wx.RED))
  1474                 dc.SetPen(MiterPen(wx.RED))
  1475             elif isinstance(self.Value, BooleanType) and self.Value:
  1475             elif isinstance(self.Value, bool) and self.Value:
  1476                 if self.Forced:
  1476                 if self.Forced:
  1477                     dc.SetPen(MiterPen(wx.CYAN))
  1477                     dc.SetPen(MiterPen(wx.CYAN))
  1478                 else:
  1478                 else:
  1479                     dc.SetPen(MiterPen(wx.GREEN))
  1479                     dc.SetPen(MiterPen(wx.GREEN))
  1480             elif self.Value == "undefined":
  1480             elif self.Value == "undefined":
  1534         # Draw the text
  1534         # Draw the text
  1535         dc.DrawText(self.Name, xtext, ytext)
  1535         dc.DrawText(self.Name, xtext, ytext)
  1536         if not getattr(dc, "printing", False):
  1536         if not getattr(dc, "printing", False):
  1537             DrawHighlightedText(dc, self.Name, self.Highlights, xtext, ytext)
  1537             DrawHighlightedText(dc, self.Name, self.Highlights, xtext, ytext)
  1538 
  1538 
  1539         if self.Value is not None and not isinstance(self.Value, BooleanType) and self.Value != "undefined":
  1539         if self.Value is not None and not isinstance(self.Value, bool) and self.Value != "undefined":
  1540             dc.SetFont(self.ParentBlock.Parent.GetMiniFont())
  1540             dc.SetFont(self.ParentBlock.Parent.GetMiniFont())
  1541             dc.SetTextForeground(wx.NamedColour("purple"))
  1541             dc.SetTextForeground(wx.NamedColour("purple"))
  1542             if self.ValueSize is None and isinstance(self.ComputedValue, (StringType, UnicodeType)):
  1542             if self.ValueSize is None and isinstance(self.ComputedValue, string_types):
  1543                 self.ValueSize = self.ParentBlock.Parent.GetMiniTextExtent(self.ComputedValue)
  1543                 self.ValueSize = self.ParentBlock.Parent.GetMiniTextExtent(self.ComputedValue)
  1544             if self.ValueSize is not None:
  1544             if self.ValueSize is not None:
  1545                 width, height = self.ValueSize
  1545                 width, height = self.ValueSize
  1546                 dc.DrawText(self.ComputedValue,
  1546                 dc.DrawText(self.ComputedValue,
  1547                             parent_pos[0] + self.Pos.x + CONNECTOR_SIZE * self.Direction[0] +
  1547                             parent_pos[0] + self.Pos.x + CONNECTOR_SIZE * self.Direction[0] +
  1605         rect = Graphic_Element.GetRedrawRect(self, movex, movey)
  1605         rect = Graphic_Element.GetRedrawRect(self, movex, movey)
  1606         if self.StartConnected:
  1606         if self.StartConnected:
  1607             rect = rect.Union(self.StartConnected.GetRedrawRect(movex, movey))
  1607             rect = rect.Union(self.StartConnected.GetRedrawRect(movex, movey))
  1608         if self.EndConnected:
  1608         if self.EndConnected:
  1609             rect = rect.Union(self.EndConnected.GetRedrawRect(movex, movey))
  1609             rect = rect.Union(self.EndConnected.GetRedrawRect(movex, movey))
  1610         if self.ValueSize is None and isinstance(self.ComputedValue, (StringType, UnicodeType)):
  1610         if self.ValueSize is None and isinstance(self.ComputedValue, string_types):
  1611             self.ValueSize = self.Parent.GetMiniTextExtent(self.ComputedValue)
  1611             self.ValueSize = self.Parent.GetMiniTextExtent(self.ComputedValue)
  1612         if self.ValueSize is not None:
  1612         if self.ValueSize is not None:
  1613             width, height = self.ValueSize
  1613             width, height = self.ValueSize
  1614             if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  1614             if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  1615                 x = self.Points[0].x + width * self.StartPoint[1][0] // 2
  1615                 x = self.Points[0].x + width * self.StartPoint[1][0] // 2
  1754                 self.EndConnected.RefreshForced()
  1754                 self.EndConnected.RefreshForced()
  1755             if self.Visible:
  1755             if self.Visible:
  1756                 self.Parent.ElementNeedRefresh(self)
  1756                 self.Parent.ElementNeedRefresh(self)
  1757 
  1757 
  1758     def GetComputedValue(self):
  1758     def GetComputedValue(self):
  1759         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, BooleanType):
  1759         if self.Value is not None and self.Value != "undefined" and not isinstance(self.Value, bool):
  1760             return self.Value
  1760             return self.Value
  1761         return None
  1761         return None
  1762 
  1762 
  1763     def GetToolTipValue(self):
  1763     def GetToolTipValue(self):
  1764         return self.GetComputedValue()
  1764         return self.GetComputedValue()
  1786                 self.StartConnected.RefreshValue()
  1786                 self.StartConnected.RefreshValue()
  1787             if self.EndConnected:
  1787             if self.EndConnected:
  1788                 self.EndConnected.RefreshValue()
  1788                 self.EndConnected.RefreshValue()
  1789             if self.Visible:
  1789             if self.Visible:
  1790                 self.Parent.ElementNeedRefresh(self)
  1790                 self.Parent.ElementNeedRefresh(self)
  1791             if isinstance(value, BooleanType) and self.StartConnected is not None:
  1791             if isinstance(value, bool) and self.StartConnected is not None:
  1792                 block = self.StartConnected.GetParentBlock()
  1792                 block = self.StartConnected.GetParentBlock()
  1793                 block.SpreadCurrent()
  1793                 block.SpreadCurrent()
  1794 
  1794 
  1795     # Unconnect the start and end points
  1795     # Unconnect the start and end points
  1796     def Clean(self):
  1796     def Clean(self):
  2679     def Draw(self, dc):
  2679     def Draw(self, dc):
  2680         Graphic_Element.Draw(self, dc)
  2680         Graphic_Element.Draw(self, dc)
  2681         if not self.Valid:
  2681         if not self.Valid:
  2682             dc.SetPen(MiterPen(wx.RED))
  2682             dc.SetPen(MiterPen(wx.RED))
  2683             dc.SetBrush(wx.RED_BRUSH)
  2683             dc.SetBrush(wx.RED_BRUSH)
  2684         elif isinstance(self.Value, BooleanType) and self.Value:
  2684         elif isinstance(self.Value, bool) and self.Value:
  2685             if self.Forced:
  2685             if self.Forced:
  2686                 dc.SetPen(MiterPen(wx.CYAN))
  2686                 dc.SetPen(MiterPen(wx.CYAN))
  2687                 dc.SetBrush(wx.CYAN_BRUSH)
  2687                 dc.SetBrush(wx.CYAN_BRUSH)
  2688             else:
  2688             else:
  2689                 dc.SetPen(MiterPen(wx.GREEN))
  2689                 dc.SetPen(MiterPen(wx.GREEN))
  2717                 end = 0
  2717                 end = 0
  2718             else:
  2718             else:
  2719                 end = 1
  2719                 end = 1
  2720             dc.DrawLine(self.Points[self.SelectedSegment].x - 1, self.Points[self.SelectedSegment].y,
  2720             dc.DrawLine(self.Points[self.SelectedSegment].x - 1, self.Points[self.SelectedSegment].y,
  2721                         self.Points[self.SelectedSegment + 1].x + end, self.Points[self.SelectedSegment + 1].y)
  2721                         self.Points[self.SelectedSegment + 1].x + end, self.Points[self.SelectedSegment + 1].y)
  2722         if self.Value is not None and not isinstance(self.Value, BooleanType) and self.Value != "undefined":
  2722         if self.Value is not None and not isinstance(self.Value, bool) and self.Value != "undefined":
  2723             dc.SetFont(self.Parent.GetMiniFont())
  2723             dc.SetFont(self.Parent.GetMiniFont())
  2724             dc.SetTextForeground(wx.NamedColour("purple"))
  2724             dc.SetTextForeground(wx.NamedColour("purple"))
  2725             if self.ValueSize is None and isinstance(self.ComputedValue, (StringType, UnicodeType)):
  2725             if self.ValueSize is None and isinstance(self.ComputedValue, string_types):
  2726                 self.ValueSize = self.Parent.GetMiniTextExtent(self.ComputedValue)
  2726                 self.ValueSize = self.Parent.GetMiniTextExtent(self.ComputedValue)
  2727             if self.ValueSize is not None:
  2727             if self.ValueSize is not None:
  2728                 width, height = self.ValueSize
  2728                 width, height = self.ValueSize
  2729                 if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  2729                 if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  2730                     x = self.Points[0].x + width * (self.StartPoint[1][0] - 1) // 2
  2730                     x = self.Points[0].x + width * (self.StartPoint[1][0] - 1) // 2