Browse Source

Added some codes to help dynamic combo UI

Gyedo Jeon 15 years ago
parent
commit
865beb38f5

+ 18 - 6
direct/src/leveleditor/ObjectMgrBase.py

@@ -11,6 +11,11 @@ from ActionMgr import *
 import ObjectGlobals as OG
 import ObjectGlobals as OG
 from ObjectPaletteBase import ObjectGen
 from ObjectPaletteBase import ObjectGen
 
 
+# python wrapper around a panda.NodePath object
+class PythonNodePath(NodePath):
+    def __init__(self,node):
+        NodePath.NodePath.__init__(self,node)
+
 class ObjectMgrBase:
 class ObjectMgrBase:
     """ ObjectMgr will create, manage, update objects in the scene """
     """ ObjectMgr will create, manage, update objects in the scene """
     
     
@@ -119,9 +124,14 @@ class ObjectMgrBase:
                     if model is None:
                     if model is None:
                         model = objDef.model
                         model = objDef.model
                     try:
                     try:
-                        newobj = loader.loadModel(model)
+                        newobjModel = loader.loadModel(model)
                     except:
                     except:
-                        newobj = loader.loadModel(Filename.fromOsSpecific(model).getFullpath(), okMissing=True)
+                        newobjModel = loader.loadModel(Filename.fromOsSpecific(model).getFullpath(), okMissing=True)
+                    if newobjModel:
+                        newobj = PythonNodePath(newobjModel)
+                    else:
+                        newobj = None
+                        
                 else:
                 else:
                     newobj = hidden.attachNewNode(objDef.name)
                     newobj = hidden.attachNewNode(objDef.name)
             else:
             else:
@@ -371,9 +381,10 @@ class ObjectMgrBase:
             objRGBA = obj[OG.OBJ_RGBA]
             objRGBA = obj[OG.OBJ_RGBA]
             
             
             # load new model
             # load new model
-            newobj = loader.loadModel(model, okMissing=True)
-            if newobj is None:
+            newobjModel = loader.loadModel(model, okMissing=True)
+            if newobjModel is None:
                 return
                 return
+            newobj = PythonNodePath(newobjModel)
             newobj.setTag('OBJRoot','1')
             newobj.setTag('OBJRoot','1')
 
 
             # reparent children
             # reparent children
@@ -494,7 +505,7 @@ class ObjectMgrBase:
                                    fSelectObject=(propType != OG.PROP_UI_SLIDE)
                                    fSelectObject=(propType != OG.PROP_UI_SLIDE)
                                    )
                                    )
 
 
-    def updateObjectPropValue(self, obj, propName, val, fSelectObject=False):
+    def updateObjectPropValue(self, obj, propName, val, fSelectObject=False, fUndo=True):
         """
         """
         Update object property value and
         Update object property value and
         call update function if defined.         
         call update function if defined.         
@@ -556,7 +567,8 @@ class ObjectMgrBase:
             func = None
             func = None
             undoFunc = None
             undoFunc = None
         action = ActionUpdateObjectProp(self.editor, fSelectObject, obj, propName, val, oldVal, func, undoFunc)
         action = ActionUpdateObjectProp(self.editor, fSelectObject, obj, propName, val, oldVal, func, undoFunc)
-        self.editor.actionMgr.push(action)
+        if fUndo:
+            self.editor.actionMgr.push(action)
         action()
         action()
 
 
         if self.editor:
         if self.editor:

+ 4 - 4
direct/src/leveleditor/ObjectPropertyUI.py

@@ -427,13 +427,13 @@ class ObjectPropertyUI(ScrolledPanel):
                     dynamicRangeKey = obj[OG.OBJ_PROP].get(propDynamicKey)
                     dynamicRangeKey = obj[OG.OBJ_PROP].get(propDynamicKey)
 
 
                 if dynamicRangeKey is None:
                 if dynamicRangeKey is None:
-                    obj[OG.OBJ_PROP][key] = propDef[OG.PROP_DEFAULT]
+                    self.editor.objectMgr.updateObjectPropValue(obj, key, propDef[OG.PROP_DEFAULT], fUndo=False)
                     continue
                     continue
 
 
                 propRange = propDef[OG.PROP_RANGE].get(dynamicRangeKey)
                 propRange = propDef[OG.PROP_RANGE].get(dynamicRangeKey)
 
 
                 if propRange is None:
                 if propRange is None:
-                    obj[OG.OBJ_PROP][key] = propDef[OG.PROP_DEFAULT]
+                    self.editor.objectMgr.updateObjectPropValue(obj, key, propDef[OG.PROP_DEFAULT], fUndo=False)
                     continue
                     continue
 
 
                 if value is None:
                 if value is None:
@@ -447,8 +447,8 @@ class ObjectPropertyUI(ScrolledPanel):
 
 
                 if value not in propRange:
                 if value not in propRange:
                     value = propRange[0]
                     value = propRange[0]
-                    obj[OG.OBJ_PROP][key] = value
-
+                    self.editor.objectMgr.updateObjectPropValue(obj, key, value, fUndo=False)
+                    
                 propUI = ObjectPropUICombo(self.propsPane, key, value, propRange)
                 propUI = ObjectPropUICombo(self.propsPane, key, value, propRange)
                 sizer.Add(propUI)
                 sizer.Add(propUI)