Added some codes to help dynamic combo UI

This commit is contained in:
Gyedo Jeon 2010-04-16 07:29:22 +00:00
parent 938d5fb27c
commit 865beb38f5
2 changed files with 22 additions and 10 deletions

View File

@ -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) newobjModel = loader.loadModel(model, okMissing=True)
if newobj is None: 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:

View File

@ -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)