Added PROP_UI_TIME property type

This commit is contained in:
Gyedo Jeon 2010-06-05 00:38:43 +00:00
parent 35bbcb1500
commit 0298cb57ff
3 changed files with 83 additions and 0 deletions

View File

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

View File

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

View File

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