Browse Source

Added PROP_UI_TIME property type

Gyedo Jeon 15 years ago
parent
commit
0298cb57ff

+ 1 - 0
direct/src/leveleditor/ObjectGlobals.py

@@ -20,6 +20,7 @@ PROP_UI_SLIDE = '_PropUISlider'
 PROP_UI_SPIN = '_PropUISpinner'
 PROP_UI_BLIND = '_PropUIBlind'
 PROP_UI_COMBO_DYNAMIC = '_PropUIComboBoxDynamic'
+PROP_UI_TIME = '_PropUITime'
 
 # index for property definition
 PROP_TYPE = 0

+ 3 - 0
direct/src/leveleditor/ObjectMgrBase.py

@@ -529,6 +529,9 @@ class ObjectMgrBase:
         elif propType == OG.PROP_UI_COMBO_DYNAMIC:
             val = event.GetString()
 
+        elif propType == OG.PROP_UI_TIME:
+            val = event.ClientObject.GetParent().GetParent().getValue()
+
         else:
             # unsupported property type
             return

+ 79 - 0
direct/src/leveleditor/ObjectPropertyUI.py

@@ -3,6 +3,7 @@ UI for object property control
 """
 import wx
 import os
+import math
 
 from wx.lib.scrolledpanel import ScrolledPanel
 from wx.lib.agw.cubecolourdialog import *
@@ -158,6 +159,76 @@ class ObjectPropUICombo(ObjectPropUI):
     def setItems(self, valueList):
         self.ui.SetItems(valueList)
 
+class ObjectPropUITime(wx.Panel):
+    def __init__(self, parent, label, value):
+        wx.Panel.__init__(self, parent)
+        self.parent = parent
+        self.labelPane = wx.Panel(self)
+        self.label = wx.StaticText(self.labelPane, label=label)
+        self.labelSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.labelSizer.Add(self.label)
+        self.labelPane.SetSizer(self.labelSizer)
+        self.uiPane = wx.Panel(self)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.labelPane)
+        sizer.Add(self.uiPane, 1, wx.EXPAND, 0)
+        self.SetSizer(sizer)
+
+        hSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.uiAmPm = wx.Choice(self.uiPane, -1, choices=['AM', 'PM'])
+        self.uiHour = wx.Choice(self.uiPane, -1, choices=map(lambda x : str(x), range(1, 13)))
+        self.uiMin = wx.Choice(self.uiPane, -1, choices=map(lambda x : str(x), range(0, 60, 15)))
+
+        hSizer.Add(self.uiAmPm)
+        hSizer.Add(self.uiHour)
+        hSizer.Add(self.uiMin)
+        self.uiPane.SetSizer(hSizer)
+
+        self.setValue(value)
+        self.eventType = wx.EVT_CHOICE
+        self.Layout()
+
+    def setValue(self, value):
+        hourVal = int(math.floor(value))
+        minVal = [0, 15, 30, 45][int((value - hourVal) * 4)]
+
+        if hourVal > 11:
+            ampmStr = 'PM'
+            hourVal = hourVal - 12
+        else:
+            ampmStr = 'AM'
+
+        if hourVal == 0:
+            hourVal = 12
+
+        self.uiAmPm.SetStringSelection(ampmStr)
+        self.uiHour.SetStringSelection(str(hourVal))
+        self.uiMin.SetStringSelection(str(minVal))
+
+    def getValue(self):
+        ampmStr = self.uiAmPm.GetStringSelection()
+        hourVal = int(self.uiHour.GetStringSelection())
+        if hourVal == 12:
+            hourVal = 0
+        if ampmStr == 'PM':
+            hourVal += 12
+
+        minVal = float(self.uiMin.GetStringSelection())
+        value = float(hourVal) + minVal / 60.0
+        return value
+
+    def bindFunc(self, inFunc, outFunc, valFunc = None):
+        self.uiAmPm.Bind(wx.EVT_ENTER_WINDOW, inFunc)
+        self.uiAmPm.Bind(wx.EVT_LEAVE_WINDOW, outFunc)
+        self.uiHour.Bind(wx.EVT_ENTER_WINDOW, inFunc)
+        self.uiHour.Bind(wx.EVT_LEAVE_WINDOW, outFunc)
+        self.uiMin.Bind(wx.EVT_ENTER_WINDOW, inFunc)
+        self.uiMin.Bind(wx.EVT_LEAVE_WINDOW, outFunc)
+        if valFunc:
+            self.uiAmPm.Bind(self.eventType, valFunc)
+            self.uiHour.Bind(self.eventType, valFunc)
+            self.uiMin.Bind(self.eventType, valFunc)            
+
 class ColorPicker(CubeColourDialog):
     def __init__(self, parent, colourData=None, style=CCD_SHOW_ALPHA, alpha = 255, updateCB=None, exitCB=None):
         self.updateCB=updateCB
@@ -488,6 +559,14 @@ class ObjectPropertyUI(ScrolledPanel):
                 propUI = ObjectPropUICombo(self.propsPane, key, value, propRange)
                 sizer.Add(propUI)
 
+            elif propType == OG.PROP_UI_TIME:
+
+                if value is None:
+                    continue
+
+                propUI = ObjectPropUITime(self.propsPane, key, value)
+                sizer.Add(propUI)
+                
             else:
                 # unspported property type
                 continue