Sfoglia il codice sorgente

improved destroy interface

Joe Shochet 22 anni fa
parent
commit
10c7f2a18e
1 ha cambiato i file con 10 aggiunte e 13 eliminazioni
  1. 10 13
      direct/src/gui/DirectGuiBase.py

+ 10 - 13
direct/src/gui/DirectGuiBase.py

@@ -96,8 +96,6 @@ class DirectGuiBase(PandaObject.PandaObject):
     def __init__(self):
         # Default id of all gui object, subclasses should override this
         self.guiId = 'guiObject'
-        # List of all active hooks
-        self._hookDict = {}
         # List of all post initialization functions
         self.postInitialiseFuncList = []
         # To avoid doing things redundantly during initialisation
@@ -617,10 +615,8 @@ class DirectGuiBase(PandaObject.PandaObject):
 
     def destroy(self):
         # Clean out any hooks
-        for event in self._hookDict.keys():
-            self.ignore(event)
+        self.ignoreAll()
         del(self._optionInfo)
-        del(self._hookDict)
         del(self.__componentInfo)
         del self.postInitialiseFuncList
         
@@ -633,8 +629,6 @@ class DirectGuiBase(PandaObject.PandaObject):
         # Need to tack on gui item specific id
         gEvent = event + self.guiId
         self.accept(gEvent, command, extraArgs = extraArgs)
-        # Keep track of all events you're accepting
-        self._hookDict[gEvent] = command
         
     def unbind(self, event):
         """
@@ -643,8 +637,6 @@ class DirectGuiBase(PandaObject.PandaObject):
         # Need to tack on gui item specific id
         gEvent = event + self.guiId
         self.ignore(gEvent)
-        if self._hookDict.has_key(gEvent):
-            del(self._hookDict[gEvent])
 
 def toggleGuiGridSnap():
     DirectGuiWidget.snapToGrid = 1 - DirectGuiWidget.snapToGrid
@@ -665,7 +657,8 @@ class DirectGuiWidget(DirectGuiBase, NodePath):
         inactiveInitState = NORMAL
     else:
         inactiveInitState = DISABLED
-            
+
+    guiDict = {}
 
     def __init__(self, parent = aspect2d, **kw):
         # Direct gui widgets are node paths
@@ -771,7 +764,8 @@ class DirectGuiWidget(DirectGuiBase, NodePath):
         self.guiItem.setSuppressFlags(suppressFlags)
 
         # Bind destroy hook
-        self.bind(DESTROY, self.destroy)
+        self.guiDict[self.guiId] = self
+        # self.bind(DESTROY, self.destroy)
 
         # Update frame when everything has been initialized
         self.postInitialiseFuncList.append(self.frameInitialiseFunc)
@@ -975,11 +969,14 @@ class DirectGuiWidget(DirectGuiBase, NodePath):
         for i in range(self['numStates']):
             self.frameStyle[i].setWidth(width[0], width[1])
         self.updateFrameStyle()
-            
+
     def destroy(self):
         # Destroy children
         for child in self.getChildrenAsList():
-            messenger.send(DESTROY + child.getName())
+            childGui = self.guiDict.get(child.getName())
+            if childGui: childGui.destroy()
+            # messenger.send(DESTROY + child.getName())
+        del self.guiDict[self.guiId]
         del self.frameStyle
         # Get rid of node path
         self.removeNode()