mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 01:07:51 -04:00
Added some codes to help dynamic combo UI
This commit is contained in:
parent
938d5fb27c
commit
865beb38f5
@ -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:
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user