Forráskód Böngészése

Added updateModelFunction to ObjectBase model list could be updated dynamically

Gyedo Jeon 15 éve
szülő
commit
6284b965fb

+ 2 - 1
direct/src/leveleditor/ObjectPaletteBase.py

@@ -9,7 +9,7 @@ class ObjectGen:
 class ObjectBase(ObjectGen):
 class ObjectBase(ObjectGen):
     """ Base class for obj definitions """
     """ Base class for obj definitions """
     def __init__(self, name='', createFunction = None, model = None, models= [], anims = [], animNames = [], animDict = {}, properties={},
     def __init__(self, name='', createFunction = None, model = None, models= [], anims = [], animNames = [], animDict = {}, properties={},
-                 movable = True, actor = False, named=False, orderedProperties=[], propertiesMask={}):
+                 movable = True, actor = False, named=False, updateModelFunction = None, orderedProperties=[], propertiesMask={}):
         ObjectGen.__init__(self, name)
         ObjectGen.__init__(self, name)
         self.createFunction = createFunction
         self.createFunction = createFunction
         self.model = model
         self.model = model
@@ -21,6 +21,7 @@ class ObjectBase(ObjectGen):
         self.movable = movable
         self.movable = movable
         self.actor = actor
         self.actor = actor
         self.named = named
         self.named = named
+        self.updateModelFunction = updateModelFunction
         # to maintain order of properties in UI
         # to maintain order of properties in UI
         self.orderedProperties = orderedProperties[:]
         self.orderedProperties = orderedProperties[:]
         # to show/hide properties per editor mode
         # to show/hide properties per editor mode

+ 21 - 3
direct/src/leveleditor/ObjectPropertyUI.py

@@ -134,9 +134,16 @@ class ObjectPropUIRadio(ObjectPropUI):
 
 
 
 
 class ObjectPropUICombo(ObjectPropUI):
 class ObjectPropUICombo(ObjectPropUI):
-    def __init__(self, parent, label, value, valueList):
+    def __init__(self, parent, label, value, valueList, obj=None, callBack=None):
         ObjectPropUI.__init__(self, parent, label)
         ObjectPropUI.__init__(self, parent, label)
         self.ui = wx.Choice(self.uiPane, -1, choices=valueList)
         self.ui = wx.Choice(self.uiPane, -1, choices=valueList)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        if callBack is not None:
+            button = wx.Button(self.uiPane, -1, 'Update')
+            button.Bind(wx.EVT_BUTTON, lambda p0=None, p1=obj, p2=self: callBack(p0, p1, p2))
+            sizer.Add(button)
+        sizer.Add(self.ui, 1, wx.EXPAND, 0)
+        self.uiPane.SetSizer(sizer)
         self.setValue(value)
         self.setValue(value)
         self.eventType = wx.EVT_CHOICE
         self.eventType = wx.EVT_CHOICE
         self.Layout()
         self.Layout()
@@ -147,6 +154,9 @@ class ObjectPropUICombo(ObjectPropUI):
     def getValue(self):
     def getValue(self):
         return self.ui.GetStringSelection()
         return self.ui.GetStringSelection()
 
 
+    def setItems(self, valueList):
+        self.ui.SetItems(valueList)
+
 class ColorPicker(CubeColourDialog):
 class ColorPicker(CubeColourDialog):
     def __init__(self, parent, colourData=None, style=CCD_SHOW_ALPHA, alpha = 255, updateCB=None, exitCB=None):
     def __init__(self, parent, colourData=None, style=CCD_SHOW_ALPHA, alpha = 255, updateCB=None, exitCB=None):
         self.updateCB=updateCB
         self.updateCB=updateCB
@@ -315,8 +325,16 @@ class ObjectPropertyUI(ScrolledPanel):
 
 
         objDef = obj[OG.OBJ_DEF]
         objDef = obj[OG.OBJ_DEF]
 
 
-        if objDef.model is not None and len(objDef.models) > 0:
-            propUI = ObjectPropUICombo(self.lookPane, 'model', obj[OG.OBJ_MODEL], objDef.models)
+        if objDef.updateModelFunction is not None or (objDef.model is not None and len(objDef.models) > 0):
+            defaultModel = obj[OG.OBJ_MODEL]
+            if defaultModel is None:
+                defaultModel = ''
+
+            if len(objDef.models) == 0:
+                modelList = ''
+            else:
+                modelList = objDef.models
+            propUI = ObjectPropUICombo(self.lookPane, 'model', defaultModel, modelList, obj, callBack=objDef.updateModelFunction)
             sizer.Add(propUI)            
             sizer.Add(propUI)            
 
 
             propUI.bindFunc(self.editor.objectMgr.onEnterObjectPropUI,
             propUI.bindFunc(self.editor.objectMgr.onEnterObjectPropUI,