Better cleanup of circular references.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn 2006-02-03 06:51:34 +00:00
parent 84d08d87eb
commit ab552aa4d7
5 changed files with 24 additions and 4 deletions

View File

@ -288,9 +288,16 @@ class Shape(ShapeEvtHandler):
return str(self.__class__).split(".")[-1][:-2]
def Delete(self):
"""
Fully disconnect this shape from parents, children, the
canvas, etc.
"""
if self._parent:
self._parent.GetChildren().remove(self)
for child in self.GetChildren():
child.Delete()
self.ClearText()
self.ClearRegions()
self.ClearAttachments()
@ -3040,7 +3047,7 @@ class ShapeRegion(object):
return None
if self._penColour=="Invisible":
return None
self._actualPenObject = wx.ThePenList.FindOrCreatePen(self._penColour, 1, self._penStyle)
self._actualPenObject = wx.Pen(self._penColour, 1, self._penStyle)
return self._actualPenObject
def SetText(self, s):

View File

@ -559,6 +559,18 @@ class CompositeShape(RectangleShape):
self.RemoveChildFromConstraints(child)
child.SetParent(None)
def Delete(self):
"""
Fully disconnect this shape from parents, children, the
canvas, etc.
"""
for child in self.GetChildren():
self.RemoveChild(child)
child.Delete()
RectangleShape.Delete(self)
self._constraints = []
self._divisions = []
def DeleteConstraintsInvolvingChild(self, child):
"""This function deletes constraints which mention the given child.

View File

@ -78,6 +78,7 @@ class Diagram(object):
for shape in self._shapeList[:]:
if not shape.GetParent():
self.RemoveShape(shape)
shape.Delete()
def ShowAll(self, show):
"""Call Show for each shape in the diagram."""

View File

@ -90,7 +90,7 @@ class OpSetGDI(DrawOp):
if self._gdiIndex in self._image._outlineColours:
# Need to construct a brush to match the outline pen's colour
if self._image._outlinePen:
br = wx.TheBrushList.FindOrCreateBrush(self._image._outlinePen, wx.SOLID)
br = wx.Brush(self._image._outlinePen, wx.SOLID)
if br:
dc.SetBrush(br)
elif self._gdiIndex in self._image._fillColours:

View File

@ -131,7 +131,7 @@ class LabelShape(RectangleShape):
RectangleShape.__init__(self, w, h)
self._lineShape = parent
self._shapeRegion = region
self.SetPen(wx.ThePenList.FindOrCreatePen(wx.Colour(0, 0, 0), 1, wx.DOT))
self.SetPen(wx.Pen(wx.Colour(0, 0, 0), 1, wx.DOT))
def OnDraw(self, dc):
if self._lineShape and not self._lineShape.GetDrawHandles():
@ -1027,7 +1027,7 @@ class LineShape(Shape):
# Problem with pen - if not a solid pen, does strange things
# to the arrowhead. So make (get) a new pen that's solid.
if self._pen and self._pen.GetStyle() != wx.SOLID:
solid_pen = wx.ThePenList.FindOrCreatePen(self._pen.GetColour(), 1, wx.SOLID)
solid_pen = wx.Pen(self._pen.GetColour(), 1, wx.SOLID)
if solid_pen:
dc.SetPen(solid_pen)