From 0298cb57ff1b379df3096f13a81a4b53263a5b2b Mon Sep 17 00:00:00 2001 From: Gyedo Jeon Date: Sat, 5 Jun 2010 00:38:43 +0000 Subject: [PATCH] Added PROP_UI_TIME property type --- direct/src/leveleditor/ObjectGlobals.py | 1 + direct/src/leveleditor/ObjectMgrBase.py | 3 + direct/src/leveleditor/ObjectPropertyUI.py | 79 ++++++++++++++++++++++ 3 files changed, 83 insertions(+) diff --git a/direct/src/leveleditor/ObjectGlobals.py b/direct/src/leveleditor/ObjectGlobals.py index 83bfb597a7..c02f6a91ba 100755 --- a/direct/src/leveleditor/ObjectGlobals.py +++ b/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 diff --git a/direct/src/leveleditor/ObjectMgrBase.py b/direct/src/leveleditor/ObjectMgrBase.py index b348a43967..7629082d1d 100755 --- a/direct/src/leveleditor/ObjectMgrBase.py +++ b/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 diff --git a/direct/src/leveleditor/ObjectPropertyUI.py b/direct/src/leveleditor/ObjectPropertyUI.py index c596241efc..5fd6228f8f 100755 --- a/direct/src/leveleditor/ObjectPropertyUI.py +++ b/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