graphics/GraphicCommons.py
changeset 253 d9391572655f
parent 249 d8425712acef
child 265 23aad5ae0dc1
equal deleted inserted replaced
252:166ee9d2e233 253:d9391572655f
   974     
   974     
   975     def ReceivingCurrent(self):
   975     def ReceivingCurrent(self):
   976         current = False
   976         current = False
   977         for wire, handle in self.Wires:
   977         for wire, handle in self.Wires:
   978             value = wire.GetValue()
   978             value = wire.GetValue()
   979             if isinstance(value, BooleanType):
   979             if current != "undefined" and isinstance(value, BooleanType):
   980                 current |= wire.GetValue()
   980                 current |= wire.GetValue()
       
   981             elif value == "undefined":
       
   982                 current = "undefined"
   981         return current
   983         return current
   982     
   984     
   983     def SpreadCurrent(self, spreading):
   985     def SpreadCurrent(self, spreading):
   984         for wire, handle in self.Wires:
   986         for wire, handle in self.Wires:
   985             wire.SetValue(spreading)
   987             wire.SetValue(spreading)
  1193         else:
  1195         else:
  1194             if not self.Valid:
  1196             if not self.Valid:
  1195                 dc.SetPen(wx.RED_PEN)
  1197                 dc.SetPen(wx.RED_PEN)
  1196             elif isinstance(self.Value, BooleanType) and self.Value:
  1198             elif isinstance(self.Value, BooleanType) and self.Value:
  1197                 dc.SetPen(wx.GREEN_PEN)
  1199                 dc.SetPen(wx.GREEN_PEN)
       
  1200             elif self.Value == "undefined":
       
  1201                 dc.SetPen(wx.Pen(wx.NamedColour("orange")))
  1198             else:
  1202             else:
  1199                 dc.SetPen(self.Pen)
  1203                 dc.SetPen(self.Pen)
  1200             dc.SetBrush(wx.WHITE_BRUSH)
  1204             dc.SetBrush(wx.WHITE_BRUSH)
  1201         parent_pos = self.ParentBlock.GetPosition()
  1205         parent_pos = self.ParentBlock.GetPosition()
  1202         
  1206         
  1269             self.Segments = []
  1273             self.Segments = []
  1270         self.SelectedSegment = None
  1274         self.SelectedSegment = None
  1271         self.Valid = True
  1275         self.Valid = True
  1272         self.Value = None
  1276         self.Value = None
  1273         self.ValueSize = None
  1277         self.ValueSize = None
       
  1278         self.ComputedValue = None
  1274         self.OverStart = False
  1279         self.OverStart = False
  1275         self.OverEnd = False
  1280         self.OverEnd = False
  1276         self.ComputingType = False
  1281         self.ComputingType = False
  1277         parent_font = parent.GetFont()
  1282         self.Font = parent.GetMiniFont()
  1278         self.Font = wx.Font(parent_font.GetPointSize() * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = parent_font.GetFaceName())
       
  1279         
  1283         
  1280     def Flush(self):
  1284     def Flush(self):
  1281         self.StartConnected = None
  1285         self.StartConnected = None
  1282         self.EndConnected = None
  1286         self.EndConnected = None
  1283     
  1287     
  1374         elif self.EndConnected:
  1378         elif self.EndConnected:
  1375             return True
  1379             return True
  1376         return False
  1380         return False
  1377     
  1381     
  1378     def SetValue(self, value):
  1382     def SetValue(self, value):
  1379         if value is not None and not isinstance(value, BooleanType):
       
  1380             if isinstance(value, StringType):
       
  1381                 value = "\"%s\""%value
       
  1382             else:
       
  1383                 value = str(value)
       
  1384             if len(value) > 4:
       
  1385                 value = value[:4] + "_"
       
  1386         if self.Value != value:
  1383         if self.Value != value:
  1387             self.Value = value
  1384             self.Value = value
  1388             if isinstance(self.Value, StringType):
  1385             if value is not None and not isinstance(value, BooleanType):
       
  1386                 if isinstance(value, StringType):
       
  1387                     self.ComputedValue = "\"%s\""%value
       
  1388                 else:
       
  1389                     self.ComputedValue = str(value)
       
  1390                 if len(self.ComputedValue) > 4:
       
  1391                     self.ComputedValue = self.ComputedValue[:4] + "..."            
       
  1392             if isinstance(self.ComputedValue, StringType):
  1389                 dc = wx.ClientDC(self.Parent)
  1393                 dc = wx.ClientDC(self.Parent)
  1390                 dc.SetFont(self.Font)
  1394                 dc.SetFont(self.Font)
  1391                 self.ValueSize = dc.GetTextExtent(self.Value)
  1395                 self.ValueSize = dc.GetTextExtent(self.ComputedValue)
  1392             else:
  1396             else:
  1393                 self.ValueSize = None
  1397                 self.ValueSize = None
  1394             if self.StartConnected:
  1398             if self.StartConnected:
  1395                 self.StartConnected.RefreshValue()
  1399                 self.StartConnected.RefreshValue()
  1396             if self.EndConnected:
  1400             if self.EndConnected:
  2181         Graphic_Element.Draw(self, dc)
  2185         Graphic_Element.Draw(self, dc)
  2182         if not self.Valid:
  2186         if not self.Valid:
  2183             dc.SetPen(wx.RED_PEN)
  2187             dc.SetPen(wx.RED_PEN)
  2184         elif isinstance(self.Value, BooleanType) and self.Value:
  2188         elif isinstance(self.Value, BooleanType) and self.Value:
  2185             dc.SetPen(wx.GREEN_PEN)
  2189             dc.SetPen(wx.GREEN_PEN)
       
  2190         elif self.Value == "undefined":
       
  2191             dc.SetPen(wx.Pen(wx.NamedColour("orange")))
  2186         else:
  2192         else:
  2187             dc.SetPen(wx.BLACK_PEN)
  2193             dc.SetPen(wx.BLACK_PEN)
  2188         dc.SetBrush(wx.BLACK_BRUSH)
  2194         dc.SetBrush(wx.BLACK_BRUSH)
  2189         # Draw the start and end points if they are not connected or the mouse is over them
  2195         # Draw the start and end points if they are not connected or the mouse is over them
  2190         if len(self.Points) > 0 and (not self.StartConnected or self.OverStart):
  2196         if len(self.Points) > 0 and (not self.StartConnected or self.OverStart):
  2199             dc.SetPen(wx.RED_PEN)
  2205             dc.SetPen(wx.RED_PEN)
  2200             dc.DrawLine(self.Points[self.SelectedSegment].x, self.Points[self.SelectedSegment].y,
  2206             dc.DrawLine(self.Points[self.SelectedSegment].x, self.Points[self.SelectedSegment].y,
  2201                         self.Points[self.SelectedSegment + 1].x, self.Points[self.SelectedSegment + 1].y)
  2207                         self.Points[self.SelectedSegment + 1].x, self.Points[self.SelectedSegment + 1].y)
  2202             if self.SelectedSegment == len(self.Segments) - 1:
  2208             if self.SelectedSegment == len(self.Segments) - 1:
  2203                 dc.DrawPoint(self.Points[-1].x, self.Points[-1].y)
  2209                 dc.DrawPoint(self.Points[-1].x, self.Points[-1].y)
  2204         if self.Value is not None and not isinstance(self.Value, BooleanType):
  2210         if self.Value is not None and not isinstance(self.Value, BooleanType) and self.Value != "undefined":
  2205             dc.SetFont(self.Font)
  2211             dc.SetFont(self.Font)
  2206             dc.SetTextForeground(wx.NamedColour("purple"))
  2212             dc.SetTextForeground(wx.NamedColour("purple"))
  2207             width, height = self.ValueSize
  2213             width, height = self.ValueSize
  2208             if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  2214             if self.BoundingBox[2] > width * 4 or self.BoundingBox[3] > height * 4:
  2209                 x = self.Points[0].x + width * self.StartPoint[1][0] / 2
  2215                 x = self.Points[0].x + width * (self.StartPoint[1][0] - 1) / 2
  2210                 y = self.Points[0].y + height * (self.StartPoint[1][1] - 1) / 2
  2216                 y = self.Points[0].y + height * (self.StartPoint[1][1] - 1) / 2
  2211                 dc.DrawText(self.Value, x, y)
  2217                 dc.DrawText(self.ComputedValue, x, y)
  2212                 x = self.Points[-1].x + width * self.EndPoint[1][0] / 2
  2218                 x = self.Points[-1].x + width * (self.EndPoint[1][0] - 1) / 2
  2213                 y = self.Points[-1].y + height * (self.EndPoint[1][1] - 1) / 2
  2219                 y = self.Points[-1].y + height * (self.EndPoint[1][1] - 1) / 2
  2214                 dc.DrawText(self.Value, x, y)
  2220                 dc.DrawText(self.ComputedValue, x, y)
  2215             else:
  2221             else:
  2216                 middle = len(self.Segments) / 2 + len(self.Segments) % 2 - 1
  2222                 middle = len(self.Segments) / 2 + len(self.Segments) % 2 - 1
  2217                 x = (self.Points[middle].x + self.Points[middle + 1].x - width) / 2
  2223                 x = (self.Points[middle].x + self.Points[middle + 1].x - width) / 2
  2218                 y = (self.Points[middle].y + self.Points[middle + 1].y - height) / 2
  2224                 y = (self.Points[middle].y + self.Points[middle + 1].y - height) / 2
  2219                 dc.DrawText(self.Value, x, y)
  2225                 dc.DrawText(self.ComputedValue, x, y)
  2220             dc.SetFont(self.Parent.GetFont())
  2226             dc.SetFont(self.Parent.GetFont())
  2221             dc.SetTextForeground(wx.BLACK)
  2227             dc.SetTextForeground(wx.BLACK)
  2222 
  2228 
  2223 
  2229 
  2224 #-------------------------------------------------------------------------------
  2230 #-------------------------------------------------------------------------------