cvp
Dec 24, 2017 - 16:59
For people like @Grun6 who write their own Form_Dialog, the datetime field type does not really allow to select the year, but only month/day/hour/minute.
With this modification, this code creates one date picker AND one time picker and so the user can really also select the year.
def show_datepicker(self, mode):
ui.end_editing()
self.shield_view = ui.View()
self.shield_view.flex = 'WH'
self.shield_view.frame = (0, 0, self.view.width, self.view.height)
self.dismiss_datepicker_button = ui.Button()
self.dismiss_datepicker_button.flex = 'WH'
self.dismiss_datepicker_button.frame = (0, 0, self.view.width, self.view.height)
self.dismiss_datepicker_button.background_color = (0, 0, 0, 0.5)
self.dismiss_datepicker_button.action = self.dismiss_datepicker
self.dismiss_datepicker_button.alpha = 0.0
self.shield_view.add_subview(self.dismiss_datepicker_button)
self.date_picker = ui.DatePicker()
self.date_picker.date = self.selected_date_value
self.date_picker.background_color = 'white'
if mode == ui.DATE_PICKER_MODE_DATE_AND_TIME:
self.date_picker.mode = ui.DATE_PICKER_MODE_DATE
w = self.shield_view.width/2
else:
self.date_picker.mode = mode
w = self.shield_view.width
self.date_picker.frame = (0, self.shield_view.height - self.date_picker.height, w, self.date_picker.height)
self.date_picker.flex = 'TW'
self.date_picker.transform = ui.Transform.translation(0, self.date_picker.height)
self.shield_view.add_subview(self.date_picker)
if mode == ui.DATE_PICKER_MODE_DATE_AND_TIME:
self.time_picker = ui.DatePicker()
self.time_picker.date = self.selected_date_value
self.time_picker.background_color = 'white'
self.time_picker.mode = ui.DATE_PICKER_MODE_TIME
self.time_picker.frame = (w, self.shield_view.height - self.time_picker.height, w, self.date_picker.height)
self.time_picker.flex = 'TW'
self.time_picker.transform = ui.Transform.translation(0, self.time_picker.height)
self.shield_view.add_subview(self.time_picker)
self.container_view.add_subview(self.shield_view)
def fade_in():
self.dismiss_datepicker_button.alpha = 1.0
self.date_picker.transform = ui.Transform.translation(0, 0)
if hasattr(self,'time_picker'):
self.time_picker.transform = ui.Transform.translation(0, 0)
ui.animate(fade_in, 0.3)
def dismiss_datepicker(self, sender):
value = self.date_picker.date
if hasattr(self,'time_picker'):
value_time = self.time_picker.date
# store time of value_time in value
date_str = datetime.datetime.strftime(value,'%Y:%m:%d %H:%M:%S')
time_str = datetime.datetime.strftime(value_time,'%Y:%m:%d %H:%M:%S')
date_str = date_str[:10] + time_str[10:]
value = datetime.datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
if self.selected_date_type == 'date':
self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
elif self.selected_date_type == 'time':
self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
else:
self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
self.values[self.selected_date_key] = value
def fade_out():
self.dismiss_datepicker_button.alpha = 0.0
self.date_picker.transform = ui.Transform.translation(0, self.date_picker.height)
if hasattr(self,'time_picker'):
self.time_picker.transform = ui.Transform.translation(0, self.time_picker.height)