PyBitmessage/src/kivymd/time_picker.py

85 lines
3.3 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from kivy.lang import Builder
from kivy.uix.modalview import ModalView
from kivy.uix.floatlayout import FloatLayout
from kivymd.theming import ThemableBehavior
from kivymd.elevationbehavior import ElevationBehavior
from kivy.properties import ObjectProperty, ListProperty
Builder.load_string("""
#:import MDFlatButton kivymd.button.MDFlatButton
#:import CircularTimePicker kivymd.vendor.circularTimePicker.CircularTimePicker
#:import dp kivy.metrics.dp
<MDTimePicker>:
size_hint: (None, None)
size: [dp(270), dp(335)+dp(95)]
#if root.theme_cls.device_orientation == 'portrait' else [dp(520), dp(325)]
pos_hint: {'center_x': .5, 'center_y': .5}
canvas:
Color:
rgba: self.theme_cls.bg_light
Rectangle:
size: [dp(270), dp(335)]
#if root.theme_cls.device_orientation == 'portrait' else [dp(250), root.height]
pos: [root.pos[0], root.pos[1] + root.height - dp(335) - dp(95)]
#if root.theme_cls.device_orientation == 'portrait' else [root.pos[0]+dp(270), root.pos[1]]
Color:
rgba: self.theme_cls.primary_color
Rectangle:
size: [dp(270), dp(95)]
#if root.theme_cls.device_orientation == 'portrait' else [dp(270), root.height]
pos: [root.pos[0], root.pos[1] + root.height - dp(95)]
#if root.theme_cls.device_orientation == 'portrait' else [root.pos[0], root.pos[1]]
Color:
rgba: self.theme_cls.bg_dark
Ellipse:
size: [dp(220), dp(220)]
#if root.theme_cls.device_orientation == 'portrait' else [dp(195), dp(195)]
pos: root.pos[0]+dp(270)/2-dp(220)/2, root.pos[1] + root.height - (dp(335)/2+dp(95)) - dp(220)/2 + dp(35)
#Color:
#rgba: (1, 0, 0, 1)
#Line:
#width: 4
#points: dp(270)/2, root.height, dp(270)/2, 0
CircularTimePicker:
id: time_picker
pos: (dp(270)/2)-(self.width/2), root.height-self.height
size_hint: [.8, .8]
#if root.theme_cls.device_orientation == 'portrait' else [0.35, 0.9]
pos_hint: {'center_x': 0.5, 'center_y': 0.585}
#if root.theme_cls.device_orientation == 'portrait' else {'center_x': 0.75, 'center_y': 0.7}
MDFlatButton:
pos: root.pos[0]+root.size[0]-dp(72)*2, root.pos[1] + dp(10)
text: "Cancel"
on_release: root.close_cancel()
MDFlatButton:
pos: root.pos[0]+root.size[0]-dp(72), root.pos[1] + dp(10)
text: "OK"
on_release: root.close_ok()
""")
class MDTimePicker(ThemableBehavior, FloatLayout, ModalView, ElevationBehavior):
# background_color = ListProperty((0, 0, 0, 0))
time = ObjectProperty()
def __init__(self, **kwargs):
super(MDTimePicker, self).__init__(**kwargs)
self.current_time = self.ids.time_picker.time
def set_time(self, time):
try:
self.ids.time_picker.set_time(time)
except AttributeError:
raise TypeError("MDTimePicker._set_time must receive a datetime object, not a \"" +
type(time).__name__ + "\"")
def close_cancel(self):
self.dismiss()
def close_ok(self):
self.current_time = self.ids.time_picker.time
self.time = self.current_time
self.dismiss()