From 865beb38f58d197f0e1afb6f8ad2106d6f62d4c0 Mon Sep 17 00:00:00 2001 From: Gyedo Jeon Date: Fri, 16 Apr 2010 07:29:22 +0000 Subject: [PATCH] Added some codes to help dynamic combo UI --- direct/src/leveleditor/ObjectMgrBase.py | 24 ++++++++++++++++------ direct/src/leveleditor/ObjectPropertyUI.py | 8 ++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/direct/src/leveleditor/ObjectMgrBase.py b/direct/src/leveleditor/ObjectMgrBase.py index ea1a2df7b1..4f047bc4e9 100755 --- a/direct/src/leveleditor/ObjectMgrBase.py +++ b/direct/src/leveleditor/ObjectMgrBase.py @@ -11,6 +11,11 @@ from ActionMgr import * import ObjectGlobals as OG 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: """ ObjectMgr will create, manage, update objects in the scene """ @@ -119,9 +124,14 @@ class ObjectMgrBase: if model is None: model = objDef.model try: - newobj = loader.loadModel(model) + newobjModel = loader.loadModel(model) 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: newobj = hidden.attachNewNode(objDef.name) else: @@ -371,9 +381,10 @@ class ObjectMgrBase: objRGBA = obj[OG.OBJ_RGBA] # load new model - newobj = loader.loadModel(model, okMissing=True) - if newobj is None: + newobjModel = loader.loadModel(model, okMissing=True) + if newobjModel is None: return + newobj = PythonNodePath(newobjModel) newobj.setTag('OBJRoot','1') # reparent children @@ -494,7 +505,7 @@ class ObjectMgrBase: 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 call update function if defined. @@ -556,7 +567,8 @@ class ObjectMgrBase: func = None undoFunc = None action = ActionUpdateObjectProp(self.editor, fSelectObject, obj, propName, val, oldVal, func, undoFunc) - self.editor.actionMgr.push(action) + if fUndo: + self.editor.actionMgr.push(action) action() if self.editor: diff --git a/direct/src/leveleditor/ObjectPropertyUI.py b/direct/src/leveleditor/ObjectPropertyUI.py index b2e8d51251..a3e5d1f7d0 100755 --- a/direct/src/leveleditor/ObjectPropertyUI.py +++ b/direct/src/leveleditor/ObjectPropertyUI.py @@ -427,13 +427,13 @@ class ObjectPropertyUI(ScrolledPanel): dynamicRangeKey = obj[OG.OBJ_PROP].get(propDynamicKey) 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 propRange = propDef[OG.PROP_RANGE].get(dynamicRangeKey) 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 if value is None: @@ -447,8 +447,8 @@ class ObjectPropertyUI(ScrolledPanel): if value not in propRange: 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) sizer.Add(propUI)