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 #------------------------------------------------------------------------------- |