Ugly workaround for double input processing issue + initial work on themes
This commit is contained in:
parent
c7b874fe15
commit
395c52f9a6
202
clock.py
202
clock.py
|
@ -7,6 +7,7 @@ import traceback
|
||||||
import copy
|
import copy
|
||||||
import os
|
import os
|
||||||
from kivy.config import Config
|
from kivy.config import Config
|
||||||
|
from kivy.properties import ListProperty
|
||||||
import time
|
import time
|
||||||
|
|
||||||
def is_arm():
|
def is_arm():
|
||||||
|
@ -67,6 +68,13 @@ Builder.load_string('''
|
||||||
on_pos: self.update_display()
|
on_pos: self.update_display()
|
||||||
on_size: self.update_display()
|
on_size: self.update_display()
|
||||||
|
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgb: root.color_background
|
||||||
|
Rectangle:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
|
||||||
FloatLayout
|
FloatLayout
|
||||||
id: face
|
id: face
|
||||||
size_hint: None, None
|
size_hint: None, None
|
||||||
|
@ -74,7 +82,7 @@ Builder.load_string('''
|
||||||
size: 0.9*min(root.size), 0.9*min(root.size)
|
size: 0.9*min(root.size), 0.9*min(root.size)
|
||||||
canvas:
|
canvas:
|
||||||
Color:
|
Color:
|
||||||
rgb: 0.1, 0.1, 0.1
|
rgb: root.color_shade
|
||||||
Ellipse:
|
Ellipse:
|
||||||
size: self.size
|
size: self.size
|
||||||
pos: self.pos
|
pos: self.pos
|
||||||
|
@ -116,7 +124,7 @@ Builder.load_string('''
|
||||||
size: 0.8*min(root.size), 0.7*min(root.size)
|
size: 0.8*min(root.size), 0.7*min(root.size)
|
||||||
canvas:
|
canvas:
|
||||||
Color:
|
Color:
|
||||||
rgb: 0.1, 0.1, 0.1
|
rgb: root.color_shade
|
||||||
Rectangle:
|
Rectangle:
|
||||||
size: self.size
|
size: self.size
|
||||||
pos: self.pos
|
pos: self.pos
|
||||||
|
@ -130,6 +138,7 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
|
color: root.color_font
|
||||||
Slider:
|
Slider:
|
||||||
id: volume_slider
|
id: volume_slider
|
||||||
min: 0
|
min: 0
|
||||||
|
@ -144,17 +153,22 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
|
color: root.color_font
|
||||||
Button:
|
Button:
|
||||||
id: settings_menu_wake_up_sound_select_button
|
id: settings_menu_wake_up_sound_select_button
|
||||||
on_press: root.settings_menu_wake_up_sound_select_button_cb()
|
on_press: root.settings_menu_wake_up_sound_select_button_cb()
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text: str(app.alarm_settings.sound_selected)
|
text: str(app.alarm_settings.sound_selected)
|
||||||
|
color: root.color_font
|
||||||
|
background_normal: ''
|
||||||
|
background_color: root.color_button
|
||||||
Label:
|
Label:
|
||||||
text:"Wake up brightness"
|
text:"Wake up brightness"
|
||||||
halign: "left"
|
halign: "left"
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
|
color: root.color_font
|
||||||
Slider:
|
Slider:
|
||||||
id: wake_up_bightness_slider
|
id: wake_up_bightness_slider
|
||||||
min: 0
|
min: 0
|
||||||
|
@ -169,6 +183,7 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
|
color: root.color_font
|
||||||
Slider:
|
Slider:
|
||||||
id: reading_light_brightness_slider
|
id: reading_light_brightness_slider
|
||||||
min: 1
|
min: 1
|
||||||
|
@ -183,6 +198,7 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
|
color: root.color_font
|
||||||
Slider:
|
Slider:
|
||||||
id: display_brightness_slider
|
id: display_brightness_slider
|
||||||
min: 0
|
min: 0
|
||||||
|
@ -198,7 +214,7 @@ Builder.load_string('''
|
||||||
size: 0.8*min(root.size), 0.8*min(root.size)
|
size: 0.8*min(root.size), 0.8*min(root.size)
|
||||||
canvas:
|
canvas:
|
||||||
Color:
|
Color:
|
||||||
rgb: 0.1, 0.1, 0.1
|
rgb: root.color_shade
|
||||||
Rectangle:
|
Rectangle:
|
||||||
size: self.size
|
size: self.size
|
||||||
pos: self.pos
|
pos: self.pos
|
||||||
|
@ -208,6 +224,7 @@ Builder.load_string('''
|
||||||
Label:
|
Label:
|
||||||
text: "Select wake up sound"
|
text: "Select wake up sound"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
|
color: root.color_font
|
||||||
GridLayout:
|
GridLayout:
|
||||||
cols: 2
|
cols: 2
|
||||||
CheckBox:
|
CheckBox:
|
||||||
|
@ -220,6 +237,7 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
|
color: root.color_font
|
||||||
active: True
|
active: True
|
||||||
CheckBox:
|
CheckBox:
|
||||||
group: "settings_menu_wake_up_sound"
|
group: "settings_menu_wake_up_sound"
|
||||||
|
@ -231,11 +249,15 @@ Builder.load_string('''
|
||||||
valign: "middle"
|
valign: "middle"
|
||||||
text_size: self.size
|
text_size: self.size
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
|
color: root.color_font
|
||||||
Button:
|
Button:
|
||||||
id: settings_menu_wake_up_sound_Ok_button
|
id: settings_menu_wake_up_sound_Ok_button
|
||||||
on_press: root.settings_menu_wake_up_sound_Ok_button_cb()
|
on_press: root.settings_menu_wake_up_sound_Ok_button_cb()
|
||||||
text: "Ok"
|
text: "Ok"
|
||||||
font_size: root.height*0.05
|
font_size: root.height*0.05
|
||||||
|
color: root.color_font
|
||||||
|
background_normal: ''
|
||||||
|
background_color: root.color_button
|
||||||
''')
|
''')
|
||||||
|
|
||||||
Position = collections.namedtuple('Position', 'x y')
|
Position = collections.namedtuple('Position', 'x y')
|
||||||
|
@ -288,6 +310,7 @@ class TouchEvent():
|
||||||
def __init__(self, x=None):
|
def __init__(self, x=None):
|
||||||
self.time = time.time()
|
self.time = time.time()
|
||||||
self.touch = copy.copy(x)
|
self.touch = copy.copy(x)
|
||||||
|
self.processed = False
|
||||||
|
|
||||||
class MyClockWidget(FloatLayout):
|
class MyClockWidget(FloatLayout):
|
||||||
grabbed = ""
|
grabbed = ""
|
||||||
|
@ -308,9 +331,12 @@ class MyClockWidget(FloatLayout):
|
||||||
# Ugly workaround for issue with Kivy and Raspberry Pi 3 + touch screen
|
# Ugly workaround for issue with Kivy and Raspberry Pi 3 + touch screen
|
||||||
# For each type of touch event, handling of the event is ignored until the last event is more than touch_delay_time seconds old
|
# For each type of touch event, handling of the event is ignored until the last event is more than touch_delay_time seconds old
|
||||||
touch_delay_time = 0.1
|
touch_delay_time = 0.1
|
||||||
last_touch_down_event = None
|
touch_down_event_prev = None
|
||||||
last_touch_move_event = None
|
touch_move_event_prev = None
|
||||||
last_touch_up_event = None
|
touch_up_event_prev = None
|
||||||
|
touch_down_event_curr = None
|
||||||
|
touch_move_event_curr = None
|
||||||
|
touch_up_event_curr = None
|
||||||
|
|
||||||
# view can be one of the following strings:
|
# view can be one of the following strings:
|
||||||
# - "clock"
|
# - "clock"
|
||||||
|
@ -318,6 +344,12 @@ class MyClockWidget(FloatLayout):
|
||||||
# - "settings_menu"
|
# - "settings_menu"
|
||||||
# - "settings_menu_wake_up_sound"
|
# - "settings_menu_wake_up_sound"
|
||||||
view = "clock"
|
view = "clock"
|
||||||
|
view_active_since = time.time()
|
||||||
|
|
||||||
|
# ugly workaround for issue where input is processed twice (specifically:
|
||||||
|
# pressing Ok in wake up sound view switches to settings view but also
|
||||||
|
# adjusts display brightness slider)
|
||||||
|
time_to_ignore_inputs_after_view_change = 0.1
|
||||||
|
|
||||||
# we need a dirty hack to sensure that radio button is always in sync with selected setting
|
# we need a dirty hack to sensure that radio button is always in sync with selected setting
|
||||||
settings_menu_wake_up_sound_select_button_cb_hack = False
|
settings_menu_wake_up_sound_select_button_cb_hack = False
|
||||||
|
@ -340,6 +372,54 @@ class MyClockWidget(FloatLayout):
|
||||||
else:
|
else:
|
||||||
backlight = None
|
backlight = None
|
||||||
|
|
||||||
|
color_background = ListProperty([0, 0, 0])
|
||||||
|
color_shade = ListProperty([.1, .1, .1])
|
||||||
|
color_clock_hands_hours = ListProperty([.9, .9, .9])
|
||||||
|
color_clock_hands_minutes = ListProperty([.8, .8, .8])
|
||||||
|
color_clock_hands_seconds = ListProperty([.7, .7, .7])
|
||||||
|
color_alarm_hands_hours = ListProperty([.9, .0, .0])
|
||||||
|
color_alarm_hands_minutes = ListProperty([.8, .0, .0])
|
||||||
|
color_alarm_hands_seconds = ListProperty([.7, .0, .0])
|
||||||
|
color_font = ListProperty([1, 1, 1])
|
||||||
|
color_numbers = ListProperty([1, 1, 1])
|
||||||
|
color_button = ListProperty([.2, .2, .2, 1])
|
||||||
|
|
||||||
|
icon_light_off = 'icons/dark/light_off.png'
|
||||||
|
icon_light_reading = 'icons/dark/light_reading.png'
|
||||||
|
icon_light_sunrise = 'icons/dark/light_sunrise.png'
|
||||||
|
icon_light_on = 'icons/dark/light_on.png'
|
||||||
|
icon_media_playing = 'icons/dark/white_media_playing.png'
|
||||||
|
icon_media_stopped = 'icons/dark/media_stopped.png'
|
||||||
|
icon_alarm_on = 'icons/dark/alarm_on.png'
|
||||||
|
icon_alarm_off = 'icons/dark/alarm_off.png'
|
||||||
|
icon_settings_visible = 'icons/dark/settings_visible.png'
|
||||||
|
icon_settings_not_visible = 'icons/dark/settings_not_visible.png'
|
||||||
|
"""
|
||||||
|
|
||||||
|
color_background = ListProperty([1, 1, 1])
|
||||||
|
color_shade = ListProperty([.9, .9, .9])
|
||||||
|
color_clock_hands_hours = ListProperty([.1, .1, .1])
|
||||||
|
color_clock_hands_minutes = ListProperty([.2, .2, .2])
|
||||||
|
color_clock_hands_seconds = ListProperty([.3, .3, .3])
|
||||||
|
color_alarm_hands_hours = ListProperty([.9, .0, .0])
|
||||||
|
color_alarm_hands_minutes = ListProperty([.8, .0, .0])
|
||||||
|
color_alarm_hands_seconds = ListProperty([.7, .0, .0])
|
||||||
|
color_font = ListProperty([0, 0, 0])
|
||||||
|
color_numbers = ListProperty([0, 0, 0])
|
||||||
|
color_button = ListProperty([.8, .8, .8, 1])
|
||||||
|
|
||||||
|
icon_light_off = 'icons/light/light_off.png'
|
||||||
|
icon_light_reading = 'icons/light/light_reading.png'
|
||||||
|
icon_light_sunrise = 'icons/light/light_sunrise.png'
|
||||||
|
icon_light_on = 'icons/light/light_on.png'
|
||||||
|
icon_media_playing = 'icons/light/media_playing.png'
|
||||||
|
icon_media_stopped = 'icons/light/media_stopped.png'
|
||||||
|
icon_alarm_on = 'icons/light/alarm_on.png'
|
||||||
|
icon_alarm_off = 'icons/light/alarm_off.png'
|
||||||
|
icon_settings_visible = 'icons/light/settings_visible.png'
|
||||||
|
icon_settings_not_visible = 'icons/light/settings_not_visible.png'
|
||||||
|
"""
|
||||||
|
|
||||||
def play_sound(self, source):
|
def play_sound(self, source):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
|
@ -354,6 +434,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.player.play()
|
self.player.play()
|
||||||
alarm_settings.alarm_playing = True
|
alarm_settings.alarm_playing = True
|
||||||
|
|
||||||
|
|
||||||
def stop_sound(self):
|
def stop_sound(self):
|
||||||
self.player.stop()
|
self.player.stop()
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
@ -399,6 +480,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.face_numbers.append(Label(
|
self.face_numbers.append(Label(
|
||||||
text=str(i + offset),
|
text=str(i + offset),
|
||||||
font_size=float(Config.get('graphics', 'height'))*0.05,
|
font_size=float(Config.get('graphics', 'height'))*0.05,
|
||||||
|
color=self.color_numbers,
|
||||||
pos_hint={
|
pos_hint={
|
||||||
# pos_hint is a fraction in range (0, 1)
|
# pos_hint is a fraction in range (0, 1)
|
||||||
"center_x": 0.5 + 0.45*math.sin(2 * math.pi * i/12),
|
"center_x": 0.5 + 0.45*math.sin(2 * math.pi * i/12),
|
||||||
|
@ -440,16 +522,16 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
def update_light_button(self):
|
def update_light_button(self):
|
||||||
if (self.light_state == "off"):
|
if (self.light_state == "off"):
|
||||||
source = 'light_off.png'
|
source = self.icon_light_off
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
elif (self.light_state == "reading"):
|
elif (self.light_state == "reading"):
|
||||||
source = 'light_reading.png'
|
source = self.icon_light_reading
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
elif (self.light_state == "sunrise"):
|
elif (self.light_state == "sunrise"):
|
||||||
source = 'light_sunrise.png'
|
source = self.light_sunrise
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
elif (self.light_state == "on"):
|
elif (self.light_state == "on"):
|
||||||
source = 'light_on.png'
|
source = self.light_on
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
|
|
||||||
light_button = self.ids["light_button"]
|
light_button = self.ids["light_button"]
|
||||||
|
@ -462,10 +544,10 @@ class MyClockWidget(FloatLayout):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
if alarm_settings.alarm_playing:
|
if alarm_settings.alarm_playing:
|
||||||
source = 'media_playing.png'
|
source = self.icon_media_playing
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
else:
|
else:
|
||||||
source = 'media_stopped.png'
|
source = self.icon_media_stopped
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
|
|
||||||
play_button = self.ids["play_button"]
|
play_button = self.ids["play_button"]
|
||||||
|
@ -478,10 +560,10 @@ class MyClockWidget(FloatLayout):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
if (self.view == "set_alarm") or alarm_settings.alarm_activated:
|
if (self.view == "set_alarm") or alarm_settings.alarm_activated:
|
||||||
source = 'alarm_on.png'
|
source = self.icon_alarm_on
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
else:
|
else:
|
||||||
source = 'alarm_off.png'
|
source = self.icon_alarm_off
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
|
|
||||||
set_alarm_button = self.ids["set_alarm_button"]
|
set_alarm_button = self.ids["set_alarm_button"]
|
||||||
|
@ -495,10 +577,10 @@ class MyClockWidget(FloatLayout):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
if (self.view.startswith("settings_menu")):
|
if (self.view.startswith("settings_menu")):
|
||||||
source = 'settings_visible.png'
|
source = self.icon_settings_visible
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
else:
|
else:
|
||||||
source = 'settings_not_visible.png'
|
source = self.icon_settings_not_visible
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
|
|
||||||
settings_button = self.ids["settings_button"]
|
settings_button = self.ids["settings_button"]
|
||||||
|
@ -647,11 +729,9 @@ class MyClockWidget(FloatLayout):
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
if self.grabbed != "" or self.set_alarm_timeout_counter < 1 * update_rate or \
|
if self.grabbed != "" or self.set_alarm_timeout_counter < 1 * update_rate or \
|
||||||
self.set_alarm_timeout_counter % update_rate <= update_rate / 2 or alarm_settings.alarm_modified == False:
|
self.set_alarm_timeout_counter % update_rate <= update_rate / 2 or alarm_settings.alarm_modified == False:
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, 0.9, 0.0, 0.0])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.color_alarm_hands_hours[0], self.color_alarm_hands_hours[1], self.color_alarm_hands_hours[2]])
|
||||||
# Line(points=[hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], width=3, cap="round")
|
|
||||||
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], 3, "round"])
|
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], 3, "round"])
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, 0.8, 0.0, 0.0])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.color_alarm_hands_minutes[0], self.color_alarm_hands_minutes[1], self.color_alarm_hands_minutes[2]])
|
||||||
#Line(points=[hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], width=2, cap="round")
|
|
||||||
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], 2, "round"])
|
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], 2, "round"])
|
||||||
|
|
||||||
if self.grabbed == "":
|
if self.grabbed == "":
|
||||||
|
@ -660,19 +740,17 @@ class MyClockWidget(FloatLayout):
|
||||||
if self.set_alarm_timeout_counter >= 4.5 * update_rate:
|
if self.set_alarm_timeout_counter >= 4.5 * update_rate:
|
||||||
self.view = "clock"
|
self.view = "clock"
|
||||||
self.set_alarm_timeout_counter = 0
|
self.set_alarm_timeout_counter = 0
|
||||||
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
if alarm_settings.alarm_modified:
|
if alarm_settings.alarm_modified:
|
||||||
alarm_settings.alarm_activated = True
|
alarm_settings.alarm_activated = True
|
||||||
alarm_settings.alarm_modified = False
|
alarm_settings.alarm_modified = False
|
||||||
else:
|
else:
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, 0.9, 0.9, 0.9])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.color_clock_hands_hours[0], self.color_clock_hands_hours[1], self.color_clock_hands_hours[2]])
|
||||||
# Line(points=[hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], width=3, cap="round")
|
|
||||||
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], 3, "round"])
|
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, hours_hand.x, hours_hand.y], 3, "round"])
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, 0.8, 0.8, 0.8])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.color_clock_hands_minutes[0], self.color_clock_hands_minutes[1], self.color_clock_hands_minutes[2]])
|
||||||
# Line(points=[hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], width=2, cap="round")
|
|
||||||
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], 2, "round"])
|
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, minutes_hand.x, minutes_hand.y], 2, "round"])
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, 0.7, 0.7, 0.7])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.color_clock_hands_seconds[0], self.color_clock_hands_seconds[1], self.color_clock_hands_seconds[2]])
|
||||||
# Line(points=[hands.center_x, hands.center_y, seconds_hand.x, seconds_hand.y], width=1, cap="round")
|
|
||||||
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, seconds_hand.x, seconds_hand.y], 1, "round"])
|
self.draw_list_curr_frame.append(["Line", hands.canvas, [hands.center_x, hands.center_y, seconds_hand.x, seconds_hand.y], 1, "round"])
|
||||||
|
|
||||||
def update_settings(self):
|
def update_settings(self):
|
||||||
|
@ -704,17 +782,26 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
def process_touch_events(self):
|
def process_touch_events(self):
|
||||||
t = time.time()
|
t = time.time()
|
||||||
if (self.last_touch_down_event is not None) and (t - self.last_touch_down_event.time > self.touch_delay_time):
|
if (self.touch_down_event_curr is not None) and (self.touch_down_event_curr.processed == False) and \
|
||||||
self.touch_down_function(self.last_touch_down_event.touch)
|
(t - self.touch_down_event_curr.time > self.touch_delay_time):
|
||||||
self.last_touch_down_event = None
|
self.touch_down_function(self.touch_down_event_curr.touch)
|
||||||
|
self.touch_down_event_curr.processed = True
|
||||||
|
self.touch_down_event_prev = copy.copy(self.touch_down_event_curr)
|
||||||
|
self.touch_down_event_curr = None
|
||||||
|
|
||||||
if (self.last_touch_move_event is not None) and (t - self.last_touch_move_event.time > self.touch_delay_time):
|
if (self.touch_move_event_curr is not None) and (self.touch_move_event_curr.processed == False) and \
|
||||||
self.touch_move_function(self.last_touch_move_event.touch)
|
(t - self.touch_move_event_curr.time > self.touch_delay_time):
|
||||||
self.last_touch_move_event = None
|
self.touch_move_function(self.touch_move_event_curr.touch)
|
||||||
|
self.touch_move_event_curr.processed = True
|
||||||
|
self.touch_move_event_prev = copy.copy(self.touch_move_event_curr)
|
||||||
|
self.touch_move_event_curr = None
|
||||||
|
|
||||||
if (self.last_touch_up_event is not None) and (t - self.last_touch_up_event.time > self.touch_delay_time):
|
if (self.touch_up_event_curr is not None) and (self.touch_up_event_curr.processed == False) and \
|
||||||
self.touch_up_function(self.last_touch_up_event.touch)
|
(t - self.touch_up_event_curr.time > self.touch_delay_time):
|
||||||
self.last_touch_up_event = None
|
self.touch_up_function(self.touch_up_event_curr.touch)
|
||||||
|
self.touch_up_event_curr.processed = True
|
||||||
|
self.touch_up_event_prev = copy.copy(self.touch_up_event_curr)
|
||||||
|
self.touch_up_event_curr = None
|
||||||
|
|
||||||
def update_display(self, *args):
|
def update_display(self, *args):
|
||||||
self.process_touch_events()
|
self.process_touch_events()
|
||||||
|
@ -752,12 +839,14 @@ class MyClockWidget(FloatLayout):
|
||||||
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = True
|
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = True
|
||||||
|
|
||||||
self.view = "settings_menu_wake_up_sound"
|
self.view = "settings_menu_wake_up_sound"
|
||||||
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
def settings_menu_wake_up_sound_Ok_button_cb(self):
|
def settings_menu_wake_up_sound_Ok_button_cb(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
self.ids["settings_menu_wake_up_sound_select_button"].text = alarm_settings.sound_selected
|
self.ids["settings_menu_wake_up_sound_select_button"].text = alarm_settings.sound_selected
|
||||||
self.view = "settings_menu"
|
self.view = "settings_menu"
|
||||||
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
def settings_menu_wake_up_sound_cb(self, instance, value, sound):
|
def settings_menu_wake_up_sound_cb(self, instance, value, sound):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
@ -857,17 +946,21 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
self.view = "clock"
|
self.view = "clock"
|
||||||
|
self.view_active_since = time.time()
|
||||||
alarm_settings.alarm_activated = False
|
alarm_settings.alarm_activated = False
|
||||||
else:
|
else:
|
||||||
self.view = "set_alarm"
|
self.view = "set_alarm"
|
||||||
|
self.view_active_since = time.time()
|
||||||
alarm_settings.alarm_activated = True
|
alarm_settings.alarm_activated = True
|
||||||
|
|
||||||
def on_settings_button_pressed(self):
|
def on_settings_button_pressed(self):
|
||||||
print("settings button pressed from view " + self.view)
|
print("settings button pressed from view " + self.view)
|
||||||
if self.view != "settings_menu":
|
if self.view != "settings_menu":
|
||||||
self.view = "settings_menu"
|
self.view = "settings_menu"
|
||||||
|
self.view_active_since = time.time()
|
||||||
else:
|
else:
|
||||||
self.view = "clock"
|
self.view = "clock"
|
||||||
|
self.view_active_since = time.time()
|
||||||
print("view updated to " + self.view)
|
print("view updated to " + self.view)
|
||||||
|
|
||||||
def touch_up_function(self, touch):
|
def touch_up_function(self, touch):
|
||||||
|
@ -1037,29 +1130,64 @@ class MyClockWidget(FloatLayout):
|
||||||
self.grabbed = ""
|
self.grabbed = ""
|
||||||
elif self.view == "settings_menu":
|
elif self.view == "settings_menu":
|
||||||
pass
|
pass
|
||||||
|
elif self.view == "settings_menu_wake_up_sound":
|
||||||
|
pass
|
||||||
elif self.view == "clock":
|
elif self.view == "clock":
|
||||||
self.stop_sound()
|
self.stop_sound()
|
||||||
|
|
||||||
super(MyClockWidget, self).on_touch_down(touch)
|
super(MyClockWidget, self).on_touch_down(touch)
|
||||||
|
|
||||||
def on_touch_down(self, touch, after=False):
|
def on_touch_down(self, touch, after=False):
|
||||||
|
t = time.time()
|
||||||
|
|
||||||
|
if t - self.view_active_since <= self.time_to_ignore_inputs_after_view_change:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.touch_down_event_prev is None:
|
||||||
|
print("touch down at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event: None")
|
||||||
|
else:
|
||||||
|
print("touch down at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event at " + str(self.touch_down_event_prev.time) + " on " + str(self.touch_down_event_prev.touch.spos))
|
||||||
|
|
||||||
if after:
|
if after:
|
||||||
self.last_touch_down_event = TouchEvent(touch)
|
self.touch_down_event_curr = TouchEvent(touch)
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
Clock.schedule_once(lambda dt: self.on_touch_down(touch, True))
|
Clock.schedule_once(lambda dt: self.on_touch_down(touch, True))
|
||||||
return super(MyClockWidget, self).on_touch_down(touch)
|
return super(MyClockWidget, self).on_touch_down(touch)
|
||||||
|
|
||||||
def on_touch_move(self, touch, after=False):
|
def on_touch_move(self, touch, after=False):
|
||||||
|
t = time.time()
|
||||||
|
|
||||||
|
if t - self.view_active_since <= self.time_to_ignore_inputs_after_view_change:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.touch_move_event_prev is None:
|
||||||
|
print("touch move at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event: None")
|
||||||
|
else:
|
||||||
|
print("touch move at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event at " + str(self.touch_move_event_prev.time) + " on " + str(self.touch_move_event_prev.touch.spos))
|
||||||
|
|
||||||
if after:
|
if after:
|
||||||
# Do not delay processing of move events
|
# Do not delay processing of move events
|
||||||
self.touch_move_function(touch)
|
self.touch_move_function(touch)
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
Clock.schedule_once(lambda dt: self.on_touch_move(touch, True))
|
Clock.schedule_once(lambda dt: self.on_touch_move(touch, True))
|
||||||
return super(MyClockWidget, self).on_touch_move(touch)
|
return super(MyClockWidget, self).on_touch_move(touch)
|
||||||
|
|
||||||
def on_touch_up(self, touch, after=False):
|
def on_touch_up(self, touch, after=False):
|
||||||
|
t = time.time()
|
||||||
|
|
||||||
|
if t - self.view_active_since <= self.time_to_ignore_inputs_after_view_change:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.touch_up_event_prev is None:
|
||||||
|
print("touch up at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event: None")
|
||||||
|
else:
|
||||||
|
print("touch up at " + str(t) + " on " + str(touch.spos) + ", after: " + str(after) + ", prev event at " + str(self.touch_up_event_prev.time) + " on " + str(self.touch_up_event_prev.touch.spos))
|
||||||
|
|
||||||
if after:
|
if after:
|
||||||
self.last_touch_up_event = TouchEvent(touch)
|
self.touch_up_event_curr = TouchEvent(touch)
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
Clock.schedule_once(lambda dt: self.on_touch_up(touch, True))
|
Clock.schedule_once(lambda dt: self.on_touch_up(touch, True))
|
||||||
return super(MyClockWidget, self).on_touch_up(touch)
|
return super(MyClockWidget, self).on_touch_up(touch)
|
||||||
|
|
Loading…
Reference in a new issue