graphics/GraphicCommons.py
changeset 478 dc403c47af54
parent 469 17411b970353
child 480 5389728644a5
--- a/graphics/GraphicCommons.py	Tue Dec 08 16:29:16 2009 +0100
+++ b/graphics/GraphicCommons.py	Tue Dec 08 17:10:30 2009 +0100
@@ -192,7 +192,7 @@
     def Inhibit(self, inhibit):
         self.Inhibited = inhibit
         if not inhibit and self.LastValue is not None:
-            self.Forced = self.LastForced
+            self.SetForced(self.LastForced)
             self.SetValue(self.LastValue)
             self.LastValue = None
         
@@ -201,12 +201,15 @@
             self.LastValue = value
             self.LastForced = forced
         else:
-            self.Forced = forced
+            self.SetForced(forced)
             self.SetValue(value)
 
     def SetValue(self, value):
         self.Value = value
-        
+    
+    def SetForced(self, forced):
+        self.Forced = forced
+    
     def IsForced(self):
         return self.Forced
 
@@ -1185,6 +1188,7 @@
         self.OneConnected = onlyone
         self.Valid = True
         self.Value = None
+        self.Forced = False
         self.Pen = wx.BLACK_PEN
         self.Errors = {}
         self.RefreshNameSize()
@@ -1270,6 +1274,11 @@
         self.Name = name
         self.RefreshNameSize()
 
+    def RefreshForced(self):
+        self.Forced = False
+        for wire, handle in self.Wires:
+            self.Forced |= wire.IsForced()
+
     def RefreshValue(self):
         self.Value = self.ReceivingCurrent()
     
@@ -1503,9 +1512,14 @@
             if not self.Valid:
                 dc.SetPen(wx.RED_PEN)
             elif isinstance(self.Value, BooleanType) and self.Value:
-                dc.SetPen(wx.GREEN_PEN)
+                if self.Forced:
+                    dc.SetPen(wx.CYAN_PEN)
+                else:
+                    dc.SetPen(wx.GREEN_PEN)
             elif self.Value == "undefined":
                 dc.SetPen(wx.Pen(wx.NamedColour("orange")))
+            elif self.Forced:
+                dc.SetPen(wx.Pen(wx.BLUE))
             else:
                 dc.SetPen(self.Pen)
             dc.SetBrush(wx.WHITE_BRUSH)
@@ -1758,6 +1772,16 @@
             return True
         return False
     
+    def SetForced(self, forced):
+        if self.Forced != forced:
+            self.Forced = forced
+            if self.StartConnected:
+                self.StartConnected.RefreshForced()
+            if self.EndConnected:
+                self.EndConnected.RefreshForced()
+            if self.Visible:
+                self.Parent.UpdateRefreshRect(self.GetRedrawRect())
+
     def SetValue(self, value):
         if self.Value != value:
             self.Value = value
@@ -1812,11 +1836,11 @@
         # The segment selected is the first
         elif segment == 0:
             if self.StartConnected:
-                self.StartConnected.SetPen(wx.BLUE_PEN)
+                self.StartConnected.SetPen(wx.Pen(wx.BLUE))
             if self.EndConnected:
                 # There is only one segment
                 if len(self.Segments) == 1:
-                    self.EndConnected.SetPen(wx.BLUE_PEN)
+                    self.EndConnected.SetPen(wx.Pen(wx.BLUE))
                 else:
                     self.EndConnected.SetPen(wx.BLACK_PEN)
         # The segment selected is the last
@@ -1824,7 +1848,7 @@
             if self.StartConnected:
                 self.StartConnected.SetPen(wx.BLACK_PEN)
             if self.EndConnected:
-                self.EndConnected.SetPen(wx.BLUE_PEN)
+                self.EndConnected.SetPen(wx.Pen(wx.BLUE))
         self.SelectedSegment = segment
         self.Refresh()
     
@@ -2630,11 +2654,18 @@
             dc.SetPen(wx.RED_PEN)
             dc.SetBrush(wx.RED_BRUSH)
         elif isinstance(self.Value, BooleanType) and self.Value:
-            dc.SetPen(wx.GREEN_PEN)
-            dc.SetBrush(wx.GREEN_BRUSH)
+            if self.Forced:
+                dc.SetPen(wx.CYAN_PEN)
+                dc.SetBrush(wx.CYAN_BRUSH)
+            else:
+                dc.SetPen(wx.GREEN_PEN)
+                dc.SetBrush(wx.GREEN_BRUSH)
         elif self.Value == "undefined":
             dc.SetPen(wx.Pen(wx.NamedColour("orange")))
             dc.SetBrush(wx.Brush(wx.NamedColour("orange")))
+        elif self.Forced:
+            dc.SetPen(wx.Pen(wx.BLUE))
+            dc.SetBrush(wx.BLUE_BRUSH)
         else:
             dc.SetPen(wx.BLACK_PEN)
             dc.SetBrush(wx.BLACK_BRUSH)