DragOffsetX = 0.0
DragOffsetY = 0.0
-
def OGLInitialize():
global WhiteBackgroundPen, WhiteBackgroundBrush, TransparentPen
global BlackForegroundPen, NormalFont
def GetPreviousHandler(self):
return self._previousHandler
-
+
+ def OnDelete(self):
+ if self!=self.GetShape():
+ del self
+
def OnDraw(self, dc):
if self._previousHandler:
self._previousHandler.OnDraw(dc)
self._canvas = canvas
self._xpos = 0.0
self._ypos = 0.0
- self._pen = wx.Pen(wx.BLACK, 1, wx.SOLID)
+ self._pen = BlackForegroundPen
self._brush = wx.WHITE_BRUSH
- self._font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)
+ self._font = NormalFont
self._textColour = wx.BLACK
self._textColourName = wx.BLACK
self._visible = False
# the region eventually (the duplication is for compatibility)
region = ShapeRegion()
region.SetName("0")
- region.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL))
+ region.SetFont(NormalFont)
region.SetFormatMode(FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT)
region.SetColour("BLACK")
self._regions.append(region)
def GetClassName(self):
return str(self.__class__).split(".")[-1][:-2]
-
- def __del__(self):
+
+ def Delete(self):
+ """
+ Fully disconnect this shape from parents, children, the
+ canvas, etc.
+ """
if self._parent:
- i = self._parent.GetChildren().index(self)
- self._parent.GetChildren(i).remove(self)
+ self._parent.GetChildren().remove(self)
+
+ for child in self.GetChildren():
+ child.Delete()
self.ClearText()
self.ClearRegions()
self.ClearAttachments()
+ self._handlerShape = None
+
if self._canvas:
- self._canvas.RemoveShape(self)
+ self.RemoveFromCanvas(self._canvas)
- self.GetEventHandler().OnDelete()
+ if self.GetEventHandler():
+ self.GetEventHandler().OnDelete()
+ self._eventHandler = None
+
+ def __del__(self):
+ ShapeEvtHandler.__del__(self)
def Draggable(self):
"""TRUE if the shape may be dragged by the user."""
else:
self._shadowMode = mode
+ def GetShadowMode(self):
+ """Return the current shadow mode setting"""
+ return self._shadowMode
+
def SetCanvas(self, theCanvas):
"""Identical to Shape.Attach."""
self._canvas = theCanvas
"""Remove the shape from the canvas."""
if self.Selected():
self.Select(False)
+
+ self._canvas = None
theCanvas.RemoveShape(self)
for object in self._children:
object.RemoveFromCanvas(theCanvas)
"""Get the colour for the specified text region."""
if regionId >= len(self._regions):
return ""
- return self._regions[regionId].GetTextColour()
+ return self._regions[regionId].GetColour()
def SetRegionName(self, name, regionId = 0):
"""Set the name for this region.
if self._pen:
dc.SetPen(self._pen)
- region = self._regions[0]
- if region.GetFont():
- dc.SetFont(region.GetFont())
+ for region in self._regions:
+ if region.GetFont():
+ dc.SetFont(region.GetFont())
- dc.SetTextForeground(region.GetActualColourObject())
- dc.SetBackgroundMode(wx.TRANSPARENT)
- if not self._formatted:
- CentreText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode())
- self._formatted = True
+ dc.SetTextForeground(region.GetActualColourObject())
+ dc.SetBackgroundMode(wx.TRANSPARENT)
+ if not self._formatted:
+ CentreText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode())
+ self._formatted = True
- if not self.GetDisableLabel():
- DrawFormattedText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode())
+ if not self.GetDisableLabel():
+ DrawFormattedText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode())
def DrawContents(self, dc):
"""Flash the shape."""
if self.GetCanvas():
dc = wx.ClientDC(self.GetCanvas())
- self.GetCanvas.PrepareDC(dc)
+ self.GetCanvas().PrepareDC(dc)
dc.SetLogicalFunction(OGLRBLF)
self.Draw(dc)
Does not redraw the shape.
"""
- for control in self._controlPoints:
+ for control in self._controlPoints[:]:
if dc:
control.GetEventHandler().OnErase(dc)
- self._canvas.RemoveShape(control)
- del control
+ control.Delete()
+ self._controlPoints.remove(control)
self._controlPoints = []
-
+
# Children of divisions are contained objects,
# so stop here
if not isinstance(self, DivisionShape):
return True
return False
- # Clears points from a list of wxRealPoints, and clears list
- # Useless in python? /pi
- def ClearPointList(self, list):
- list = []
-
# Assuming the attachment lies along a vertical or horizontal line,
# calculate the position on that point.
def CalcSimpleAttachment(self, pt1, pt2, nth, noArcs, line):
dc.SetLogicalFunction(OGLRBLF)
bound_x, bound_y = self.GetBoundingBoxMin()
- self.GetEventHandler().OnEndSize(bound_x, bound_y)
+ self.GetEventHandler().OnBeginSize(bound_x, bound_y)
# Choose the 'opposite corner' of the object as the stationary
# point in case this is non-centring resizing.
elif pt._type == CONTROL_POINT_VERTICAL:
newX1 = pt._controlPointDragStartX
newX2 = newX1 + pt._controlPointDragStartWidth
- elif pt._type == CONTROL_POINT_DIAGONAL and (keys & KEYS or self.GetMaintainAspectRatio()):
+ elif pt._type == CONTROL_POINT_DIAGONAL and (keys & KEY_SHIFT or self.GetMaintainAspectRatio()):
newH = (newX2 - newX1) * (float(pt._controlPointDragStartHeight) / pt._controlPointDragStartWidth)
if pt.GetY() > pt._controlPointDragStartY:
newY2 = newY1 + newH
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):