diff --git a/direct/src/fsm/StateData.py b/direct/src/fsm/StateData.py index e919c9b6de..a9097d1a47 100644 --- a/direct/src/fsm/StateData.py +++ b/direct/src/fsm/StateData.py @@ -14,11 +14,9 @@ class StateData(DirectObject): self.isLoaded = 0 self.isEntered = 0 return None - - def __del__(self): - """__del__(self) - Only define this if you construct any classes in your __init__() - so you can del them explicitly + + def cleanup(self): + """cleanup(self) """ self.unload() return None diff --git a/direct/src/gui/Button.py b/direct/src/gui/Button.py index 317a28163a..d10a8feee9 100644 --- a/direct/src/gui/Button.py +++ b/direct/src/gui/Button.py @@ -1,4 +1,5 @@ from ShowBaseGlobal import * +from DirectObject import * import GuiManager import GuiLabel import GuiButton @@ -7,7 +8,7 @@ import Vec3 guiMgr = GuiManager.GuiManager.getPtr(base.win, base.mak.node()) font = (loader.loadModelOnce("phase_3/models/fonts/ttf-comic")).node() -class Button: +class Button(DirectObject): def __init__(self, name, label=None): self.name = name @@ -31,14 +32,15 @@ class Button: self.l3, self.l3, self.l1) self.setScale(0.1) self.managed = 0 + return None - - def __del__(self): + def cleanup(self): if (self.managed): self.button.unmanage() - del(self.l1) - del(self.l2) - del(self.button) + self.l1 = None + self.l2 = None + self.button = None + return None def __str__(self): return "Button: %s" % self.name diff --git a/direct/src/gui/ForceAcknowledge.py b/direct/src/gui/ForceAcknowledge.py index 897af832c5..3526a9187a 100644 --- a/direct/src/gui/ForceAcknowledge.py +++ b/direct/src/gui/ForceAcknowledge.py @@ -29,7 +29,6 @@ class ForceAcknowledge(StateData.StateData): self.okButton.manage() self.accept("ForceAcknowledge-rollover", self.__handleRollover) self.accept("ForceAcknowledge-ok", self.__handleOk) - return None def exit(self): @@ -79,7 +78,10 @@ class ForceAcknowledge(StateData.StateData): # GUI self.text.removeNode() - del(self.okButton) + self.text.cleanup() + self.text = None + self.okButton.cleanup() + self.okButton = None self.isLoaded = 0 return None diff --git a/direct/src/gui/Frame.py b/direct/src/gui/Frame.py index 8c78c6da85..d778145206 100644 --- a/direct/src/gui/Frame.py +++ b/direct/src/gui/Frame.py @@ -1,4 +1,5 @@ from ShowBaseGlobal import * +from DirectObject import * import GuiManager import GuiFrame import Vec3 @@ -6,7 +7,7 @@ import Vec3 guiMgr = GuiManager.GuiManager.getPtr(base.win, base.mak.node()) font = (loader.loadModelOnce("phase_3/models/fonts/ttf-comic")).node() -class Frame: +class Frame(DirectObject): # special methods def __init__(self, name): @@ -15,11 +16,15 @@ class Frame: self.offset = 0 self.frame = GuiFrame.GuiFrame(name) self.items = [] + return None - def __del__(self): + def cleanup(self): + """cleanup(self) + """ if (self.managed): self.frame.unmanage() - del(self.frame) + self.frame = None + return None def __str__(self): return "Frame: %s = %s" % (self.name, self.items) diff --git a/direct/src/gui/OnscreenText.py b/direct/src/gui/OnscreenText.py index 39020d3fa0..6f9405dde6 100644 --- a/direct/src/gui/OnscreenText.py +++ b/direct/src/gui/OnscreenText.py @@ -36,12 +36,16 @@ class OnscreenText(PandaObject, NodePath): # assume 4:3 aspect ratio self.setScale( 0.069, 1.0, 0.069) + self.isClean = 0 + return None - def __del__(self): - """__del__(self) + def cleanup(self): + """cleanup(self) """ - del(self.textNode) - NodePath.__del__(self) + self.textNode = None + if self.isClean == 0: + self.isClean = 1 + NodePath.__del__(self) return None def setText(self, string): diff --git a/direct/src/gui/PickList.py b/direct/src/gui/PickList.py index 612cedf4ff..e7dce833bb 100644 --- a/direct/src/gui/PickList.py +++ b/direct/src/gui/PickList.py @@ -32,9 +32,10 @@ class PickList(PandaObject.PandaObject): # display the menu self.__displayChoices(choiceList) + return None - def __del__(self): - """__del__(self) + def cleanup(self): + """cleanup(self) """ # remove keyboard events self.ignore("up-up") @@ -49,7 +50,7 @@ class PickList(PandaObject.PandaObject): # reset the display self.frame.unmanage() - del(self.frame) + self.frame = None return None # accessing diff --git a/direct/src/gui/ScrollingLabel.py b/direct/src/gui/ScrollingLabel.py index 20e07fb036..1d2a14e1db 100644 --- a/direct/src/gui/ScrollingLabel.py +++ b/direct/src/gui/ScrollingLabel.py @@ -78,24 +78,25 @@ class ScrollingLabel(PandaObject.PandaObject): # refresh the frame self.frame.recompute() + return None - def __del__(self): - """__del__(self) + def cleanup(self): + """cleanup(self) """ - # remove gui items - del(self.frame) - del(self.items) - # ignore events self.ignore(self.name + "-left") self.ignore(self.name + "-right") self.setKeyFocus(0) - del(self.label) - del(self.title) - del(self.itemSign) - del(self.leftButton) - del(self.rightButton) + # remove gui items + self.frame = None + self.items = None + + self.label = None + self.title = None + self.itemSign = None + self.leftButton = None + self.rightButton = None return None # accessing diff --git a/direct/src/gui/Sign.py b/direct/src/gui/Sign.py index efea106e19..47e2f46486 100644 --- a/direct/src/gui/Sign.py +++ b/direct/src/gui/Sign.py @@ -1,10 +1,11 @@ from ShowBaseGlobal import * +from DirectObject import * import GuiSign import GuiManager guiMgr = GuiManager.GuiManager.getPtr(base.win, base.mak.node()) -class Sign: +class Sign(DirectObject): def __init__(self, name, label): self.name = name @@ -12,11 +13,15 @@ class Sign: self.sign = GuiSign.GuiSign(name, label) self.setScale(0.1) self.managed = 0 + return None - def __del__(self): + def cleanup(self): + """cleanup(self) + """ if (self.managed): self.unmanage() - del(self.sign) + self.sign = None + return None def __str__(self): return "sign: %s contains label: %s" % (self.name, self.label.name) diff --git a/direct/src/showbase/DirectObject.py b/direct/src/showbase/DirectObject.py index af1dcacb82..5303086a40 100644 --- a/direct/src/showbase/DirectObject.py +++ b/direct/src/showbase/DirectObject.py @@ -6,6 +6,14 @@ class DirectObject: """ This is the class that all Direct/SAL classes should inherit from """ + def __del__(self): + """__del__(self) + """ + try: + self.cleanup() + except: + directNotify.notify.warning('No cleanup() method defined!') + # Event Handling # object.accept('mouse', object.handleMouse)