diff -r 015a34da60eb -r b67a5de5a24a graphics/LD_Objects.py --- a/graphics/LD_Objects.py Fri Jan 04 17:47:58 2008 +0100 +++ b/graphics/LD_Objects.py Fri Jan 04 17:49:17 2008 +0100 @@ -67,6 +67,18 @@ powerrail.Connectors.append(None) return powerrail + # Returns the RedrawRect + def GetRedrawRect(self, movex = 0, movey = 0): + rect = Graphic_Element.GetRedrawRect(self, movex, movey) + for connector in self.Connectors: + if connector is not None: + rect = rect.Union(connector.GetRedrawRect(movex, movey)) + if movex != 0 or movey != 0: + for connector in self.Connectors: + if connector is not None and connector.IsConnected(): + rect = rect.Union(connector.GetConnectedRedrawRect(movex, movey)) + return rect + # Forbids to change the power rail size def SetSize(self, width, height): if self.Parent.GetDrawingMode() == FREEDRAWING_MODE: @@ -98,19 +110,19 @@ # Refresh the power rail bounding box def RefreshBoundingBox(self): dc = wx.ClientDC(self.Parent) - self.BoundingBox = wx.Rect(self.Pos.x, self.Pos.y, self.Size[0], self.Size[1] + 1) + self.BoundingBox = wx.Rect(self.Pos.x, self.Pos.y, self.Size[0] + 1, self.Size[1] + 1) # Refresh the power rail size def RefreshSize(self): - self.Size = wx.Size(2, LD_LINE_SIZE * len(self.Connectors)) + self.Size = wx.Size(LD_POWERRAIL_WIDTH, LD_LINE_SIZE * len(self.Connectors)) self.RefreshBoundingBox() # Returns the block minimum size def GetMinSize(self): if self.Parent.GetDrawingMode() == FREEDRAWING_MODE: - return 2, self.Extensions[0] + self.Extensions[1] - else: - return 2, LD_LINE_SIZE * len(self.Connectors) + return LD_POWERRAIL_WIDTH, self.Extensions[0] + self.Extensions[1] + else: + return LD_POWERRAIL_WIDTH, LD_LINE_SIZE * len(self.Connectors) # Add a connector or a blank to this power rail at the last place def AddConnector(self, connector = True): @@ -313,6 +325,7 @@ # Draws power rail def Draw(self, dc): + Graphic_Element.Draw(self, dc) dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) # Draw a rectangle with the power rail size @@ -321,7 +334,6 @@ for connector in self.Connectors: if connector: connector.Draw(dc) - Graphic_Element.Draw(self, dc) #------------------------------------------------------------------------------- @@ -362,6 +374,18 @@ contact.Output = self.Output.Clone(contact) return contact + # Returns the RedrawRect + def GetRedrawRect(self, movex = 0, movey = 0): + rect = Graphic_Element.GetRedrawRect(self, movex, movey) + rect = rect.Union(self.Input.GetRedrawRect(movex, movey)) + rect = rect.Union(self.Output.GetRedrawRect(movex, movey)) + if movex != 0 or movey != 0: + if self.Input.IsConnected(): + rect = rect.Union(self.Input.GetConnectedRedrawRect(movex, movey)) + if self.Output.IsConnected(): + rect = rect.Union(self.Output.GetConnectedRedrawRect(movex, movey)) + return rect + # Forbids to change the contact size def SetSize(self, width, height): if self.Parent.GetDrawingMode() == FREEDRAWING_MODE: @@ -503,15 +527,17 @@ # Draws the highlightment of this element if it is highlighted def DrawHighlightment(self, dc): - if self.Highlighted: - dc.SetPen(wx.Pen(HIGHLIGHTCOLOR)) - dc.SetBrush(wx.Brush(HIGHLIGHTCOLOR)) - # Draw two rectangles for representing the contact - dc.DrawRectangle(self.Pos.x - 2, self.Pos.y - 2, 6, self.Size[1] + 5) - dc.DrawRectangle(self.Pos.x + self.Size[0] - 3, self.Pos.y - 2, 6, self.Size[1] + 5) + dc.SetPen(wx.Pen(HIGHLIGHTCOLOR)) + dc.SetBrush(wx.Brush(HIGHLIGHTCOLOR)) + dc.SetLogicalFunction(wx.AND) + # Draw two rectangles for representing the contact + dc.DrawRectangle(self.Pos.x - 2, self.Pos.y - 2, 6, self.Size[1] + 5) + dc.DrawRectangle(self.Pos.x + self.Size[0] - 3, self.Pos.y - 2, 6, self.Size[1] + 5) + dc.SetLogicalFunction(wx.COPY) # Draws contact def Draw(self, dc): + Graphic_Element.Draw(self, dc) dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) # Draw two rectangles for representing the contact @@ -534,7 +560,6 @@ # Draw input and output connectors self.Input.Draw(dc) self.Output.Draw(dc) - Graphic_Element.Draw(self, dc) #------------------------------------------------------------------------------- @@ -575,6 +600,18 @@ coil.Output = self.Output.Clone(coil) return coil + # Returns the RedrawRect + def GetRedrawRect(self, movex = 0, movey = 0): + rect = Graphic_Element.GetRedrawRect(self, movex, movey) + rect = rect.Union(self.Input.GetRedrawRect(movex, movey)) + rect = rect.Union(self.Output.GetRedrawRect(movex, movey)) + if movex != 0 or movey != 0: + if self.Input.IsConnected(): + rect = rect.Union(self.Input.GetConnectedRedrawRect(movex, movey)) + if self.Output.IsConnected(): + rect = rect.Union(self.Output.GetConnectedRedrawRect(movex, movey)) + return rect + # Forbids to change the contact size def SetSize(self, width, height): if self.Parent.GetDrawingMode() == FREEDRAWING_MODE: @@ -716,15 +753,17 @@ # Draws the highlightment of this element if it is highlighted def DrawHighlightment(self, dc): - if self.Highlighted: - dc.SetPen(wx.Pen(HIGHLIGHTCOLOR, 6, wx.SOLID)) - dc.SetBrush(wx.TRANSPARENT_BRUSH) - # Draw a two circle arcs for representing the coil - dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, 135, 225) - dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, -45, 45) + dc.SetPen(wx.Pen(HIGHLIGHTCOLOR, 6, wx.SOLID)) + dc.SetBrush(wx.TRANSPARENT_BRUSH) + dc.SetLogicalFunction(wx.AND) + # Draw a two circle arcs for representing the coil + dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, 135, 225) + dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, -45, 45) + dc.SetLogicalFunction(wx.COPY) # Draws coil def Draw(self, dc): + Graphic_Element.Draw(self, dc) dc.SetPen(wx.Pen(wx.BLACK, 2, wx.SOLID)) dc.SetBrush(wx.TRANSPARENT_BRUSH) # Draw a two circle arcs for representing the coil @@ -749,5 +788,4 @@ # Draw input and output connectors self.Input.Draw(dc) self.Output.Draw(dc) - Graphic_Element.Draw(self, dc)