graphics/GraphicCommons.py
changeset 253 d9391572655f
parent 249 d8425712acef
child 265 23aad5ae0dc1
--- a/graphics/GraphicCommons.py	Sun Sep 07 15:27:53 2008 +0200
+++ b/graphics/GraphicCommons.py	Sun Sep 07 15:29:12 2008 +0200
@@ -976,8 +976,10 @@
         current = False
         for wire, handle in self.Wires:
             value = wire.GetValue()
-            if isinstance(value, BooleanType):
+            if current != "undefined" and isinstance(value, BooleanType):
                 current |= wire.GetValue()
+            elif value == "undefined":
+                current = "undefined"
         return current
     
     def SpreadCurrent(self, spreading):
@@ -1195,6 +1197,8 @@
                 dc.SetPen(wx.RED_PEN)
             elif isinstance(self.Value, BooleanType) and self.Value:
                 dc.SetPen(wx.GREEN_PEN)
+            elif self.Value == "undefined":
+                dc.SetPen(wx.Pen(wx.NamedColour("orange")))
             else:
                 dc.SetPen(self.Pen)
             dc.SetBrush(wx.WHITE_BRUSH)
@@ -1271,11 +1275,11 @@
         self.Valid = True
         self.Value = None
         self.ValueSize = None
+        self.ComputedValue = None
         self.OverStart = False
         self.OverEnd = False
         self.ComputingType = False
-        parent_font = parent.GetFont()
-        self.Font = wx.Font(parent_font.GetPointSize() * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = parent_font.GetFaceName())
+        self.Font = parent.GetMiniFont()
         
     def Flush(self):
         self.StartConnected = None
@@ -1376,19 +1380,19 @@
         return False
     
     def SetValue(self, value):
-        if value is not None and not isinstance(value, BooleanType):
-            if isinstance(value, StringType):
-                value = "\"%s\""%value
-            else:
-                value = str(value)
-            if len(value) > 4:
-                value = value[:4] + "_"
         if self.Value != value:
             self.Value = value
-            if isinstance(self.Value, StringType):
+            if value is not None and not isinstance(value, BooleanType):
+                if isinstance(value, StringType):
+                    self.ComputedValue = "\"%s\""%value
+                else:
+                    self.ComputedValue = str(value)
+                if len(self.ComputedValue) > 4:
+                    self.ComputedValue = self.ComputedValue[:4] + "..."            
+            if isinstance(self.ComputedValue, StringType):
                 dc = wx.ClientDC(self.Parent)
                 dc.SetFont(self.Font)
-                self.ValueSize = dc.GetTextExtent(self.Value)
+                self.ValueSize = dc.GetTextExtent(self.ComputedValue)
             else:
                 self.ValueSize = None
             if self.StartConnected:
@@ -2183,6 +2187,8 @@
             dc.SetPen(wx.RED_PEN)
         elif isinstance(self.Value, BooleanType) and self.Value:
             dc.SetPen(wx.GREEN_PEN)
+        elif self.Value == "undefined":
+            dc.SetPen(wx.Pen(wx.NamedColour("orange")))
         else:
             dc.SetPen(wx.BLACK_PEN)
         dc.SetBrush(wx.BLACK_BRUSH)
@@ -2201,22 +2207,22 @@
                         self.Points[self.SelectedSegment + 1].x, self.Points[self.SelectedSegment + 1].y)
             if self.SelectedSegment == len(self.Segments) - 1:
                 dc.DrawPoint(self.Points[-1].x, self.Points[-1].y)
-        if self.Value is not None and not isinstance(self.Value, BooleanType):
+        if self.Value is not None and not isinstance(self.Value, BooleanType) and self.Value != "undefined":
             dc.SetFont(self.Font)
             dc.SetTextForeground(wx.NamedColour("purple"))
             width, height = self.ValueSize
             if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
-                x = self.Points[0].x + width * self.StartPoint[1][0] / 2
+                x = self.Points[0].x + width * (self.StartPoint[1][0] - 1) / 2
                 y = self.Points[0].y + height * (self.StartPoint[1][1] - 1) / 2
-                dc.DrawText(self.Value, x, y)
-                x = self.Points[-1].x + width * self.EndPoint[1][0] / 2
+                dc.DrawText(self.ComputedValue, x, y)
+                x = self.Points[-1].x + width * (self.EndPoint[1][0] - 1) / 2
                 y = self.Points[-1].y + height * (self.EndPoint[1][1] - 1) / 2
-                dc.DrawText(self.Value, x, y)
+                dc.DrawText(self.ComputedValue, x, y)
             else:
                 middle = len(self.Segments) / 2 + len(self.Segments) % 2 - 1
                 x = (self.Points[middle].x + self.Points[middle + 1].x - width) / 2
                 y = (self.Points[middle].y + self.Points[middle + 1].y - height) / 2
-                dc.DrawText(self.Value, x, y)
+                dc.DrawText(self.ComputedValue, x, y)
             dc.SetFont(self.Parent.GetFont())
             dc.SetTextForeground(wx.BLACK)