Move AlarmSettings into ClockSettings + read settings from JSON file (WIP)
This commit is contained in:
parent
e6f76bbd90
commit
c2d5c0d7d1
275
clock.py
275
clock.py
|
@ -105,20 +105,6 @@ class Theme():
|
||||||
self.icon_settings_visible = "themes/" + x + "/settings_visible.png"
|
self.icon_settings_visible = "themes/" + x + "/settings_visible.png"
|
||||||
self.icon_settings_not_visible = "themes/" + x + "/settings_not_visible.png"
|
self.icon_settings_not_visible = "themes/" + x + "/settings_not_visible.png"
|
||||||
|
|
||||||
class AlarmSettings():
|
|
||||||
alarm_time = datetime.datetime(2022, 12, 10, 7, 30, 0, 0)
|
|
||||||
alarm_activated = False
|
|
||||||
alarm_playing = False
|
|
||||||
|
|
||||||
alarm_modified = False
|
|
||||||
|
|
||||||
seconds_to_sunrise = 30 * 60 # 30 minutes
|
|
||||||
|
|
||||||
wake_up_volume = 15
|
|
||||||
wake_up_brightness = 20
|
|
||||||
reading_light_brightness = 1
|
|
||||||
display_brightness = 10
|
|
||||||
|
|
||||||
class Touch():
|
class Touch():
|
||||||
def __init__(self, x=None):
|
def __init__(self, x=None):
|
||||||
if x is None:
|
if x is None:
|
||||||
|
@ -151,9 +137,40 @@ class TouchEvent():
|
||||||
self.touch = copy.copy(x)
|
self.touch = copy.copy(x)
|
||||||
self.processed = False
|
self.processed = False
|
||||||
|
|
||||||
|
class ClockSettings():
|
||||||
|
def __init__(self):
|
||||||
|
f = open("settings.json")
|
||||||
|
j = json.load(f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
self.theme_selected = j["theme"]
|
||||||
|
self.wake_up_volume = j["volume"]
|
||||||
|
|
||||||
|
self.alarm_time = datetime.datetime(2022, 12, 10, 7, 30, 0, 0)
|
||||||
|
self.alarm_activated = False
|
||||||
|
self.alarm_playing = False
|
||||||
|
|
||||||
|
self.alarm_modified = False
|
||||||
|
|
||||||
|
self.seconds_to_sunrise = 30 * 60 # 30 minutes
|
||||||
|
|
||||||
|
self.wake_up_volume = 15
|
||||||
|
self.wake_up_brightness = 20
|
||||||
|
self.reading_light_brightness = 1
|
||||||
|
self.display_brightness = 10
|
||||||
|
|
||||||
|
|
||||||
|
def read(self):
|
||||||
|
ClockSettings()
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
return
|
||||||
|
|
||||||
class MyClockWidget(FloatLayout):
|
class MyClockWidget(FloatLayout):
|
||||||
theme_selected = "Dark"
|
settings = ClockSettings()
|
||||||
theme = ObjectProperty(Theme(theme_selected))
|
|
||||||
|
#theme_selected = "Dark"
|
||||||
|
theme = ObjectProperty(Theme(settings.theme_selected))
|
||||||
|
|
||||||
for x in ('', 'PCM'):
|
for x in ('', 'PCM'):
|
||||||
try:
|
try:
|
||||||
|
@ -230,10 +247,10 @@ class MyClockWidget(FloatLayout):
|
||||||
is_arm = is_arm()
|
is_arm = is_arm()
|
||||||
|
|
||||||
def apply_theme(self):
|
def apply_theme(self):
|
||||||
if self.theme_selected == "Automatic":
|
if self.settings.theme_selected == "Automatic":
|
||||||
self.theme = Theme("Light")
|
self.theme = Theme("Light")
|
||||||
else:
|
else:
|
||||||
self.theme = Theme(self.theme_selected)
|
self.theme = Theme(self.settings.theme_selected)
|
||||||
|
|
||||||
self.ids["settings_menu_wake_up_sound_label_top"].color = self.theme.color_font
|
self.ids["settings_menu_wake_up_sound_label_top"].color = self.theme.color_font
|
||||||
self.settings_menu_wake_up_sound_Ok_button.color = self.theme.color_font
|
self.settings_menu_wake_up_sound_Ok_button.color = self.theme.color_font
|
||||||
|
@ -255,8 +272,7 @@ class MyClockWidget(FloatLayout):
|
||||||
cols=2,
|
cols=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.theme_selected = next(iter(self.themes))
|
self.ids["settings_menu_theme_select_button"].text = self.settings.theme_selected
|
||||||
self.ids["settings_menu_theme_select_button"].text = self.theme_selected
|
|
||||||
|
|
||||||
self.theme_checkboxes = []
|
self.theme_checkboxes = []
|
||||||
self.theme_labels = []
|
self.theme_labels = []
|
||||||
|
@ -306,8 +322,6 @@ class MyClockWidget(FloatLayout):
|
||||||
self.apply_theme()
|
self.apply_theme()
|
||||||
|
|
||||||
def add_wake_up_sounds(self):
|
def add_wake_up_sounds(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
x = self.ids["settings_menu_wake_up_sound_boxlayout"]
|
x = self.ids["settings_menu_wake_up_sound_boxlayout"]
|
||||||
gl = GridLayout(
|
gl = GridLayout(
|
||||||
cols=2,
|
cols=2,
|
||||||
|
@ -315,9 +329,9 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
self.wake_up_sounds = WakeUpSounds
|
self.wake_up_sounds = WakeUpSounds
|
||||||
|
|
||||||
alarm_settings.sound_selected = next(iter(self.wake_up_sounds))
|
self.settings.sound_selected = next(iter(self.wake_up_sounds))
|
||||||
alarm_settings.sound_source = self.wake_up_sounds[alarm_settings.sound_selected]
|
self.settings.sound_source = self.wake_up_sounds[self.settings.sound_selected]
|
||||||
self.ids["settings_menu_wake_up_sound_select_button"].text = alarm_settings.sound_selected
|
self.ids["settings_menu_wake_up_sound_select_button"].text = self.settings.sound_selected
|
||||||
|
|
||||||
self.wake_up_sound_checkboxes = []
|
self.wake_up_sound_checkboxes = []
|
||||||
self.wake_up_sound_labels = []
|
self.wake_up_sound_labels = []
|
||||||
|
@ -370,25 +384,22 @@ class MyClockWidget(FloatLayout):
|
||||||
self.volume_curr = x
|
self.volume_curr = x
|
||||||
|
|
||||||
def play_sound(self, source):
|
def play_sound(self, source):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if (self.player.get_state() == vlc.State.NothingSpecial) or \
|
if (self.player.get_state() == vlc.State.NothingSpecial) or \
|
||||||
(self.player.get_state() == vlc.State.Paused) or \
|
(self.player.get_state() == vlc.State.Paused) or \
|
||||||
(self.player.get_state() == vlc.State.Stopped) or \
|
(self.player.get_state() == vlc.State.Stopped) or \
|
||||||
(self.player.get_state() == vlc.State.Ended) or \
|
(self.player.get_state() == vlc.State.Ended) or \
|
||||||
(self.player.get_state() == vlc.State.Error):
|
(self.player.get_state() == vlc.State.Error):
|
||||||
print("beep beep! " + source)
|
print("beep beep! " + source)
|
||||||
self.volume_target = alarm_settings.wake_up_volume / 20.0
|
self.volume_target = self.settings.wake_up_volume / 20.0
|
||||||
media = self.vlc.media_new(source)
|
media = self.vlc.media_new(source)
|
||||||
self.player.set_media(media)
|
self.player.set_media(media)
|
||||||
self.player.play()
|
self.player.play()
|
||||||
alarm_settings.alarm_playing = True
|
self.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
|
self.settings.alarm_playing = False
|
||||||
alarm_settings.alarm_playing = False
|
|
||||||
|
|
||||||
def set_backlight(self, x):
|
def set_backlight(self, x):
|
||||||
offset = 3
|
offset = 3
|
||||||
|
@ -415,10 +426,8 @@ class MyClockWidget(FloatLayout):
|
||||||
Add number labels when added in widget hierarchy
|
Add number labels when added in widget hierarchy
|
||||||
"""
|
"""
|
||||||
|
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
t = alarm_settings.alarm_time
|
t = self.settings.alarm_time
|
||||||
else:
|
else:
|
||||||
t = datetime.datetime.now()
|
t = datetime.datetime.now()
|
||||||
|
|
||||||
|
@ -448,8 +457,6 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["Rectangle", background.canvas, background.size, background.pos, None])
|
self.draw_list_curr_frame.append(["Rectangle", background.canvas, background.size, background.pos, None])
|
||||||
|
|
||||||
def update_face(self):
|
def update_face(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
face_plate = self.ids["face_plate"]
|
face_plate = self.ids["face_plate"]
|
||||||
self.draw_list_curr_frame.append(["canvas.clear()", face_plate])
|
self.draw_list_curr_frame.append(["canvas.clear()", face_plate])
|
||||||
with face_plate.canvas:
|
with face_plate.canvas:
|
||||||
|
@ -457,7 +464,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["Ellipse", face_plate.canvas, face_plate.size, face_plate.pos])
|
self.draw_list_curr_frame.append(["Ellipse", face_plate.canvas, face_plate.size, face_plate.pos])
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
t = alarm_settings.alarm_time
|
t = self.settings.alarm_time
|
||||||
else:
|
else:
|
||||||
t = datetime.datetime.now()
|
t = datetime.datetime.now()
|
||||||
|
|
||||||
|
@ -506,9 +513,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["Rectangle", light_button.canvas, light_button.size, light_button.pos, source])
|
self.draw_list_curr_frame.append(["Rectangle", light_button.canvas, light_button.size, light_button.pos, source])
|
||||||
|
|
||||||
def update_play_button(self):
|
def update_play_button(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if self.settings.alarm_playing:
|
||||||
|
|
||||||
if alarm_settings.alarm_playing:
|
|
||||||
source = self.theme.icon_media_playing
|
source = self.theme.icon_media_playing
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
else:
|
else:
|
||||||
|
@ -522,9 +527,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["Rectangle", play_button.canvas, play_button.size, play_button.pos, source])
|
self.draw_list_curr_frame.append(["Rectangle", play_button.canvas, play_button.size, play_button.pos, source])
|
||||||
|
|
||||||
def update_set_alarm_button(self):
|
def update_set_alarm_button(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if (self.view == "set_alarm") or self.settings.alarm_activated:
|
||||||
|
|
||||||
if (self.view == "set_alarm") or alarm_settings.alarm_activated:
|
|
||||||
source = self.theme.icon_alarm_on
|
source = self.theme.icon_alarm_on
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
else:
|
else:
|
||||||
|
@ -538,8 +541,6 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["Rectangle", set_alarm_button.canvas, set_alarm_button.size, set_alarm_button.pos, source])
|
self.draw_list_curr_frame.append(["Rectangle", set_alarm_button.canvas, set_alarm_button.size, set_alarm_button.pos, source])
|
||||||
|
|
||||||
def update_settings_button(self):
|
def update_settings_button(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if (self.view.startswith("settings_menu")):
|
if (self.view.startswith("settings_menu")):
|
||||||
source = self.theme.icon_settings_visible
|
source = self.theme.icon_settings_visible
|
||||||
rgb = [1.0, 1.0, 1.0]
|
rgb = [1.0, 1.0, 1.0]
|
||||||
|
@ -569,14 +570,12 @@ class MyClockWidget(FloatLayout):
|
||||||
return led_color
|
return led_color
|
||||||
|
|
||||||
def update_backlight(self):
|
def update_backlight(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
# make sure brightness of display is never lower than intensity of leds
|
# make sure brightness of display is never lower than intensity of leds
|
||||||
brightness_min = 20 * self.intensity_curr
|
brightness_min = 20 * self.intensity_curr
|
||||||
if alarm_settings.display_brightness < brightness_min:
|
if self.settings.display_brightness < brightness_min:
|
||||||
self.set_backlight(brightness_min)
|
self.set_backlight(brightness_min)
|
||||||
else:
|
else:
|
||||||
self.set_backlight(alarm_settings.display_brightness)
|
self.set_backlight(self.settings.display_brightness)
|
||||||
|
|
||||||
def set_leds(self):
|
def set_leds(self):
|
||||||
if self.intensity_prev != self.intensity_curr:
|
if self.intensity_prev != self.intensity_curr:
|
||||||
|
@ -596,17 +595,15 @@ class MyClockWidget(FloatLayout):
|
||||||
# print(self.light_state + ", t: " + str(self.seconds_to_next_alarm) + ", i: " + str(self.intensity_curr) + ", rgbw: " + str(rgbw))
|
# print(self.light_state + ", t: " + str(self.seconds_to_next_alarm) + ", i: " + str(self.intensity_curr) + ", rgbw: " + str(rgbw))
|
||||||
|
|
||||||
def sunrise(self):
|
def sunrise(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
# Do not simulate sunrise when adjusting alarm time
|
# Do not simulate sunrise when adjusting alarm time
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.seconds_to_next_alarm < 0.1:
|
if self.seconds_to_next_alarm < 0.1:
|
||||||
intensity_target = (alarm_settings.wake_up_brightness / 20.0)
|
intensity_target = (self.settings.wake_up_brightness / 20.0)
|
||||||
new_state = "on"
|
new_state = "on"
|
||||||
else:
|
else:
|
||||||
intensity_target = (1.0 - self.seconds_to_next_alarm / alarm_settings.seconds_to_sunrise) * (alarm_settings.wake_up_brightness / 20.0)
|
intensity_target = (1.0 - self.seconds_to_next_alarm / self.settings.seconds_to_sunrise) * (self.settings.wake_up_brightness / 20.0)
|
||||||
new_state = "sunrise"
|
new_state = "sunrise"
|
||||||
|
|
||||||
# only adjust intensity_target if new intensity_target is higher than current intesity, to avoid dimming light when reading mode is on
|
# only adjust intensity_target if new intensity_target is higher than current intesity, to avoid dimming light when reading mode is on
|
||||||
|
@ -615,17 +612,15 @@ class MyClockWidget(FloatLayout):
|
||||||
self.light_state = new_state
|
self.light_state = new_state
|
||||||
|
|
||||||
def process_led_state(self):
|
def process_led_state(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if (self.settings.alarm_activated) and (self.seconds_to_next_alarm < self.settings.seconds_to_sunrise):
|
||||||
|
|
||||||
if (alarm_settings.alarm_activated) and (self.seconds_to_next_alarm < alarm_settings.seconds_to_sunrise):
|
|
||||||
self.sunrise()
|
self.sunrise()
|
||||||
else:
|
else:
|
||||||
if (self.light_state == "off"):
|
if (self.light_state == "off"):
|
||||||
self.intensity_target = 0
|
self.intensity_target = 0
|
||||||
elif (self.light_state == "reading"):
|
elif (self.light_state == "reading"):
|
||||||
self.intensity_target = alarm_settings.reading_light_brightness / 20.0
|
self.intensity_target = self.settings.reading_light_brightness / 20.0
|
||||||
elif (self.light_state == "on"):
|
elif (self.light_state == "on"):
|
||||||
self.intensity_target = alarm_settings.wake_up_brightness / 20.0
|
self.intensity_target = self.settings.wake_up_brightness / 20.0
|
||||||
|
|
||||||
weight = 0.05
|
weight = 0.05
|
||||||
intensity_next = weight * self.intensity_target + (1 - weight) * self.intensity_curr
|
intensity_next = weight * self.intensity_target + (1 - weight) * self.intensity_curr
|
||||||
|
@ -638,9 +633,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.intensity_curr = self.intensity_curr + step
|
self.intensity_curr = self.intensity_curr + step
|
||||||
|
|
||||||
def process_volume_state(self):
|
def process_volume_state(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if (self.settings.alarm_playing) and (self.player.get_state() == vlc.State.Playing):
|
||||||
|
|
||||||
if (alarm_settings.alarm_playing) and (self.player.get_state() == vlc.State.Playing):
|
|
||||||
step = 0.005
|
step = 0.005
|
||||||
|
|
||||||
if (self.volume_curr <= self.volume_target):
|
if (self.volume_curr <= self.volume_target):
|
||||||
|
@ -659,28 +652,24 @@ class MyClockWidget(FloatLayout):
|
||||||
self.stop_sound()
|
self.stop_sound()
|
||||||
|
|
||||||
def check_play_sound(self):
|
def check_play_sound(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if self.settings.alarm_activated == False:
|
||||||
|
|
||||||
if alarm_settings.alarm_activated == False:
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if (self.seconds_to_next_alarm < 0.1) or (alarm_settings.alarm_playing == True):
|
if (self.seconds_to_next_alarm < 0.1) or (self.settings.alarm_playing == True):
|
||||||
if alarm_settings.sound_source != "":
|
if self.settings.sound_source != "":
|
||||||
self.play_sound(alarm_settings.sound_source)
|
self.play_sound(self.settings.sound_source)
|
||||||
|
|
||||||
def calc_seconds_to_next_alarm(self):
|
def calc_seconds_to_next_alarm(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
if self.settings.alarm_activated == False:
|
||||||
|
|
||||||
if alarm_settings.alarm_activated == False:
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Make sure alarm_time is in the future but not more than 24 h from now
|
# Make sure alarm_time is in the future but not more than 24 h from now
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
d = alarm_settings.alarm_time - now
|
d = self.settings.alarm_time - now
|
||||||
alarm_settings.alarm_time -= datetime.timedelta(days=d.days)
|
self.settings.alarm_time -= datetime.timedelta(days=d.days)
|
||||||
|
|
||||||
# Calculate number of seconds until next alarm
|
# Calculate number of seconds until next alarm
|
||||||
d = alarm_settings.alarm_time - now
|
d = self.settings.alarm_time - now
|
||||||
self.seconds_to_next_alarm = d.days * 24 * 3600 + d.seconds + d.microseconds / 1000000.0
|
self.seconds_to_next_alarm = d.days * 24 * 3600 + d.seconds + d.microseconds / 1000000.0
|
||||||
|
|
||||||
def check_alarm(self):
|
def check_alarm(self):
|
||||||
|
@ -695,10 +684,9 @@ class MyClockWidget(FloatLayout):
|
||||||
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face_plate"], False])
|
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face_plate"], False])
|
||||||
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face"], False])
|
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face"], False])
|
||||||
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["hands"], False])
|
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["hands"], False])
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
t = alarm_settings.alarm_time
|
t = self.settings.alarm_time
|
||||||
else:
|
else:
|
||||||
t = datetime.datetime.now()
|
t = datetime.datetime.now()
|
||||||
|
|
||||||
|
@ -712,7 +700,7 @@ class MyClockWidget(FloatLayout):
|
||||||
with hands.canvas:
|
with hands.canvas:
|
||||||
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 self.settings.alarm_modified == False:
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, self.theme.color_alarm_hands_hours[0], self.theme.color_alarm_hands_hours[1], self.theme.color_alarm_hands_hours[2]])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.theme.color_alarm_hands_hours[0], self.theme.color_alarm_hands_hours[1], self.theme.color_alarm_hands_hours[2]])
|
||||||
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, self.theme.color_alarm_hands_minutes[0], self.theme.color_alarm_hands_minutes[1], self.theme.color_alarm_hands_minutes[2]])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.theme.color_alarm_hands_minutes[0], self.theme.color_alarm_hands_minutes[1], self.theme.color_alarm_hands_minutes[2]])
|
||||||
|
@ -726,9 +714,9 @@ class MyClockWidget(FloatLayout):
|
||||||
self.set_alarm_timeout_counter = 0
|
self.set_alarm_timeout_counter = 0
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
if alarm_settings.alarm_modified:
|
if self.settings.alarm_modified:
|
||||||
alarm_settings.alarm_activated = True
|
self.settings.alarm_activated = True
|
||||||
alarm_settings.alarm_modified = False
|
self.settings.alarm_modified = False
|
||||||
else:
|
else:
|
||||||
self.draw_list_curr_frame.append(["Color", hands.canvas, self.theme.color_clock_hands_hours[0], self.theme.color_clock_hands_hours[1], self.theme.color_clock_hands_hours[2]])
|
self.draw_list_curr_frame.append(["Color", hands.canvas, self.theme.color_clock_hands_hours[0], self.theme.color_clock_hands_hours[1], self.theme.color_clock_hands_hours[2]])
|
||||||
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"])
|
||||||
|
@ -883,16 +871,15 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
def settings_menu_wake_up_sound_select_button_cb(self):
|
def settings_menu_wake_up_sound_select_button_cb(self):
|
||||||
self.settings_menu_wake_up_sound_select_button_cb_hack = True
|
self.settings_menu_wake_up_sound_select_button_cb_hack = True
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
for c in self.wake_up_sound_checkboxes:
|
for c in self.wake_up_sound_checkboxes:
|
||||||
c.active = False
|
c.active = False
|
||||||
|
|
||||||
print("sound selected: " + alarm_settings.sound_selected)
|
print("sound selected: " + self.settings.sound_selected)
|
||||||
|
|
||||||
n = 0
|
n = 0
|
||||||
for i in self.wake_up_sounds:
|
for i in self.wake_up_sounds:
|
||||||
if i == alarm_settings.sound_selected:
|
if i == self.settings.sound_selected:
|
||||||
self.wake_up_sound_checkboxes[n].active = True
|
self.wake_up_sound_checkboxes[n].active = True
|
||||||
n = n + 1
|
n = n + 1
|
||||||
|
|
||||||
|
@ -900,9 +887,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
def settings_menu_wake_up_sound_Ok_button_cb(self, event):
|
def settings_menu_wake_up_sound_Ok_button_cb(self, event):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
self.ids["settings_menu_wake_up_sound_select_button"].text = self.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()
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
|
@ -919,11 +904,9 @@ class MyClockWidget(FloatLayout):
|
||||||
break
|
break
|
||||||
k = k + 1
|
k = k + 1
|
||||||
|
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if self.settings_menu_wake_up_sound_select_button_cb_hack:
|
if self.settings_menu_wake_up_sound_select_button_cb_hack:
|
||||||
self.settings_menu_wake_up_sound_select_button_cb_hack = False
|
self.settings_menu_wake_up_sound_select_button_cb_hack = False
|
||||||
if not (alarm_settings.sound_selected == "" and sound != ""):
|
if not (self.settings.sound_selected == "" and sound != ""):
|
||||||
return
|
return
|
||||||
|
|
||||||
if value == True:
|
if value == True:
|
||||||
|
@ -931,8 +914,8 @@ class MyClockWidget(FloatLayout):
|
||||||
else:
|
else:
|
||||||
print("You deselected " + sound)
|
print("You deselected " + sound)
|
||||||
|
|
||||||
alarm_settings.sound_source = self.wake_up_sounds[sound]
|
self.settings.sound_source = self.wake_up_sounds[sound]
|
||||||
alarm_settings.sound_selected = sound
|
self.settings.sound_selected = sound
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -943,12 +926,12 @@ class MyClockWidget(FloatLayout):
|
||||||
for c in self.theme_checkboxes:
|
for c in self.theme_checkboxes:
|
||||||
c.active = False
|
c.active = False
|
||||||
|
|
||||||
print("theme selected: " + self.theme_selected)
|
print("theme selected: " + self.settings.theme_selected)
|
||||||
|
|
||||||
n = 0
|
n = 0
|
||||||
print("self.themes: " + str(self.themes))
|
print("self.themes: " + str(self.themes))
|
||||||
for i in self.themes:
|
for i in self.themes:
|
||||||
if i == self.theme_selected:
|
if i == self.settings.theme_selected:
|
||||||
self.theme_checkboxes[n].active = True
|
self.theme_checkboxes[n].active = True
|
||||||
n = n + 1
|
n = n + 1
|
||||||
|
|
||||||
|
@ -956,7 +939,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
def settings_menu_theme_Ok_button_cb(self, event):
|
def settings_menu_theme_Ok_button_cb(self, event):
|
||||||
self.ids["settings_menu_theme_select_button"].text = self.theme_selected
|
self.ids["settings_menu_theme_select_button"].text = self.settings.theme_selected
|
||||||
self.view = "settings_menu"
|
self.view = "settings_menu"
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
|
|
||||||
|
@ -975,7 +958,7 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
if self.settings_menu_theme_select_button_cb_hack:
|
if self.settings_menu_theme_select_button_cb_hack:
|
||||||
self.settings_menu_theme_select_button_cb_hack = False
|
self.settings_menu_theme_select_button_cb_hack = False
|
||||||
if not (self.theme_selected == "" and theme != ""):
|
if not (self.settings.theme_selected == "" and theme != ""):
|
||||||
return
|
return
|
||||||
|
|
||||||
if value == True:
|
if value == True:
|
||||||
|
@ -983,64 +966,52 @@ class MyClockWidget(FloatLayout):
|
||||||
else:
|
else:
|
||||||
print("You deselected " + theme)
|
print("You deselected " + theme)
|
||||||
|
|
||||||
self.theme_selected = theme
|
self.settings.theme_selected = theme
|
||||||
|
|
||||||
self.apply_theme()
|
self.apply_theme()
|
||||||
|
|
||||||
def volume_slider_value(self, *args):
|
def volume_slider_value(self, *args):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
self.settings.wake_up_volume = int(args[1])
|
||||||
|
|
||||||
alarm_settings.wake_up_volume = int(args[1])
|
|
||||||
|
|
||||||
print("Volume changed to " + str(alarm_settings.wake_up_volume))
|
|
||||||
|
|
||||||
old_vol = self.mixer.getvolume()
|
old_vol = self.mixer.getvolume()
|
||||||
|
|
||||||
if (alarm_settings.alarm_playing) and (self.player.get_state() == vlc.State.Playing):
|
if (self.settings.alarm_playing) and (self.player.get_state() == vlc.State.Playing):
|
||||||
# immediately set volume when audio is playing
|
# immediately set volume when audio is playing
|
||||||
self.volume_target = alarm_settings.wake_up_volume / 20.0
|
self.volume_target = self.settings.wake_up_volume / 20.0
|
||||||
self.set_volume(self.volume_target)
|
self.set_volume(self.volume_target)
|
||||||
|
|
||||||
new_vol = self.mixer.getvolume()
|
new_vol = self.mixer.getvolume()
|
||||||
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
|
||||||
|
|
||||||
|
|
||||||
def wake_up_brightness_slider_value(self, *args):
|
def wake_up_brightness_slider_value(self, *args):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
self.settings.wake_up_brightness = int(args[1])
|
||||||
|
print("Wake up brightness changed to " + str(self.settings.wake_up_brightness))
|
||||||
alarm_settings.wake_up_brightness = int(args[1])
|
|
||||||
print("Wake up brightness changed to " + str(alarm_settings.wake_up_brightness))
|
|
||||||
|
|
||||||
def reading_light_brightness_slider_value(self, *args):
|
def reading_light_brightness_slider_value(self, *args):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
self.settings.reading_light_brightness = int(args[1])
|
||||||
|
|
||||||
alarm_settings.reading_light_brightness = int(args[1])
|
|
||||||
if (self.light_state == "reading"):
|
if (self.light_state == "reading"):
|
||||||
self.intensity_target = alarm_settings.reading_light_brightness / 20.0
|
self.intensity_target = self.settings.reading_light_brightness / 20.0
|
||||||
print("Reading light brightness changed to " + str(alarm_settings.reading_light_brightness))
|
print("Reading light brightness changed to " + str(self.settings.reading_light_brightness))
|
||||||
|
|
||||||
def display_brightness_slider_value(self, *args):
|
def display_brightness_slider_value(self, *args):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
self.settings.display_brightness = int(args[1])
|
||||||
|
|
||||||
alarm_settings.display_brightness = int(args[1])
|
|
||||||
|
|
||||||
def on_light_button_pressed(self):
|
def on_light_button_pressed(self):
|
||||||
print("light button pressed from view " + self.view)
|
print("light button pressed from view " + self.view)
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
if self.light_state == "off":
|
if self.light_state == "off":
|
||||||
self.light_state = "reading"
|
self.light_state = "reading"
|
||||||
self.intensity_target = alarm_settings.reading_light_brightness / 20.0
|
self.intensity_target = self.settings.reading_light_brightness / 20.0
|
||||||
elif self.light_state == "reading":
|
elif self.light_state == "reading":
|
||||||
self.light_state = "off"
|
self.light_state = "off"
|
||||||
self.intensity_target = 0
|
self.intensity_target = 0
|
||||||
if alarm_settings.alarm_playing:
|
if self.settings.alarm_playing:
|
||||||
self.volume_target = 0
|
self.volume_target = 0
|
||||||
elif self.light_state == "sunrise":
|
elif self.light_state == "sunrise":
|
||||||
# allow enabling reading mode when sunrise has not yet reached that level
|
# allow enabling reading mode when sunrise has not yet reached that level
|
||||||
if self.intensity_target < alarm_settings.reading_light_brightness / 20.0:
|
if self.intensity_target < self.settings.reading_light_brightness / 20.0:
|
||||||
self.light_state = "reading"
|
self.light_state = "reading"
|
||||||
self.intensity_target = alarm_settings.reading_light_brightness / 20.0
|
self.intensity_target = self.settings.reading_light_brightness / 20.0
|
||||||
else:
|
else:
|
||||||
self.light_state = "off"
|
self.light_state = "off"
|
||||||
|
|
||||||
|
@ -1050,27 +1021,26 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
def on_play_button_pressed(self):
|
def on_play_button_pressed(self):
|
||||||
print("play button pressed from view " + self.view)
|
print("play button pressed from view " + self.view)
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
if alarm_settings.alarm_playing:
|
if self.settings.alarm_playing:
|
||||||
self.volume_target = 0
|
self.volume_target = 0
|
||||||
else:
|
else:
|
||||||
self.play_sound(alarm_settings.sound_source)
|
self.play_sound(self.settings.sound_source)
|
||||||
|
|
||||||
def on_alarm_button_pressed(self):
|
def on_alarm_button_pressed(self):
|
||||||
print("alarm button pressed from view " + self.view)
|
print("alarm button pressed from view " + self.view)
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
alarm_settings.alarm_modified = False
|
self.settings.alarm_modified = False
|
||||||
self.set_alarm_timeout_counter = 0
|
self.set_alarm_timeout_counter = 0
|
||||||
|
|
||||||
if self.view == "set_alarm":
|
if self.view == "set_alarm":
|
||||||
self.view = "clock"
|
self.view = "clock"
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
alarm_settings.alarm_activated = False
|
self.settings.alarm_activated = False
|
||||||
else:
|
else:
|
||||||
self.view = "set_alarm"
|
self.view = "set_alarm"
|
||||||
self.view_active_since = time.time()
|
self.view_active_since = time.time()
|
||||||
alarm_settings.alarm_activated = True
|
self.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)
|
||||||
|
@ -1085,7 +1055,6 @@ class MyClockWidget(FloatLayout):
|
||||||
def touch_up_function(self, touch):
|
def touch_up_function(self, touch):
|
||||||
self.grabbed = ""
|
self.grabbed = ""
|
||||||
self.light_button_move_init = []
|
self.light_button_move_init = []
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
|
|
||||||
if (self.view == "set_alarm") and (self.grabbed == "hour" or self.grabbed == "minute"):
|
if (self.view == "set_alarm") and (self.grabbed == "hour" or self.grabbed == "minute"):
|
||||||
|
@ -1097,8 +1066,6 @@ class MyClockWidget(FloatLayout):
|
||||||
if self.grabbed == "":
|
if self.grabbed == "":
|
||||||
return
|
return
|
||||||
|
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
|
||||||
|
|
||||||
self.alarm_set_timeout = 0
|
self.alarm_set_timeout = 0
|
||||||
|
|
||||||
touch_curr = Touch(touch)
|
touch_curr = Touch(touch)
|
||||||
|
@ -1122,7 +1089,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.touch_prev = copy.deepcopy(touch_curr)
|
self.touch_prev = copy.deepcopy(touch_curr)
|
||||||
|
|
||||||
if self.grabbed == "minute":
|
if self.grabbed == "minute":
|
||||||
alarm_settings.alarm_modified = True
|
self.settings.alarm_modified = True
|
||||||
self.set_alarm_timeout_counter = 0
|
self.set_alarm_timeout_counter = 0
|
||||||
minute = round(-touch_curr.angle * 30 + 15)
|
minute = round(-touch_curr.angle * 30 + 15)
|
||||||
|
|
||||||
|
@ -1132,9 +1099,9 @@ class MyClockWidget(FloatLayout):
|
||||||
minute -= 60
|
minute -= 60
|
||||||
|
|
||||||
# Sometimes the hand is 30 minutes ahead / behind the place where the user touches the screen --> correct for this behavior
|
# Sometimes the hand is 30 minutes ahead / behind the place where the user touches the screen --> correct for this behavior
|
||||||
if (((minute - alarm_settings.alarm_time.minute) >= 15) and ((minute - alarm_settings.alarm_time.minute) <= 45)):
|
if (((minute - self.settings.alarm_time.minute) >= 15) and ((minute - self.settings.alarm_time.minute) <= 45)):
|
||||||
minute = minute - 30
|
minute = minute - 30
|
||||||
elif (((minute - alarm_settings.alarm_time.minute) <= -15) and ((minute - alarm_settings.alarm_time.minute) >= -45)):
|
elif (((minute - self.settings.alarm_time.minute) <= -15) and ((minute - self.settings.alarm_time.minute) >= -45)):
|
||||||
minute = minute + 30
|
minute = minute + 30
|
||||||
|
|
||||||
while minute < 0:
|
while minute < 0:
|
||||||
|
@ -1143,10 +1110,10 @@ class MyClockWidget(FloatLayout):
|
||||||
minute -= 60
|
minute -= 60
|
||||||
|
|
||||||
# hour correction
|
# hour correction
|
||||||
hour = alarm_settings.alarm_time.hour
|
hour = self.settings.alarm_time.hour
|
||||||
if alarm_settings.alarm_time.minute >= 55 and minute <= 5:
|
if self.settings.alarm_time.minute >= 55 and minute <= 5:
|
||||||
hour += 1
|
hour += 1
|
||||||
elif alarm_settings.alarm_time.minute <= 5 and minute >= 55:
|
elif self.settings.alarm_time.minute <= 5 and minute >= 55:
|
||||||
hour -= 1
|
hour -= 1
|
||||||
|
|
||||||
while hour < 0:
|
while hour < 0:
|
||||||
|
@ -1154,11 +1121,11 @@ class MyClockWidget(FloatLayout):
|
||||||
while hour >= 24:
|
while hour >= 24:
|
||||||
hour -= 24
|
hour -= 24
|
||||||
|
|
||||||
alarm_settings.alarm_time = datetime.datetime(alarm_settings.alarm_time.year, \
|
self.settings.alarm_time = datetime.datetime(self.settings.alarm_time.year, \
|
||||||
alarm_settings.alarm_time.month, alarm_settings.alarm_time.day, \
|
self.settings.alarm_time.month, self.settings.alarm_time.day, \
|
||||||
hour, minute, alarm_settings.alarm_time.second, 0)
|
hour, minute, self.settings.alarm_time.second, 0)
|
||||||
elif self.grabbed == "hour":
|
elif self.grabbed == "hour":
|
||||||
alarm_settings.alarm_modified = True
|
self.settings.alarm_modified = True
|
||||||
self.set_alarm_timeout_counter = 0
|
self.set_alarm_timeout_counter = 0
|
||||||
hour = round(-touch_curr.angle * 6 + 3)
|
hour = round(-touch_curr.angle * 6 + 3)
|
||||||
|
|
||||||
|
@ -1168,9 +1135,9 @@ class MyClockWidget(FloatLayout):
|
||||||
hour -= 12
|
hour -= 12
|
||||||
|
|
||||||
# Sometimes the hand is 6 hours ahead / behind the place where the user touches the screen --> correct for this behavior
|
# Sometimes the hand is 6 hours ahead / behind the place where the user touches the screen --> correct for this behavior
|
||||||
if (((hour - alarm_settings.alarm_time.hour) >= 3) and ((hour - alarm_settings.alarm_time.hour) <= 9)):
|
if (((hour - self.settings.alarm_time.hour) >= 3) and ((hour - self.settings.alarm_time.hour) <= 9)):
|
||||||
hour = hour - 6
|
hour = hour - 6
|
||||||
if (((hour - alarm_settings.alarm_time.hour) <= -3) and ((hour - alarm_settings.alarm_time.hour) >= -9)):
|
if (((hour - self.settings.alarm_time.hour) <= -3) and ((hour - self.settings.alarm_time.hour) >= -9)):
|
||||||
hour = hour + 6
|
hour = hour + 6
|
||||||
|
|
||||||
while hour < 0:
|
while hour < 0:
|
||||||
|
@ -1178,24 +1145,24 @@ class MyClockWidget(FloatLayout):
|
||||||
while hour >= 12:
|
while hour >= 12:
|
||||||
hour -= 12
|
hour -= 12
|
||||||
|
|
||||||
if alarm_settings.alarm_time.hour >= 12:
|
if self.settings.alarm_time.hour >= 12:
|
||||||
hour += 12
|
hour += 12
|
||||||
|
|
||||||
|
|
||||||
# AM / PM correction
|
# AM / PM correction
|
||||||
if alarm_settings.alarm_time.hour == 11 and hour == 0:
|
if self.settings.alarm_time.hour == 11 and hour == 0:
|
||||||
hour = 12
|
hour = 12
|
||||||
elif alarm_settings.alarm_time.hour == 23 and hour == 12:
|
elif self.settings.alarm_time.hour == 23 and hour == 12:
|
||||||
hour = 0
|
hour = 0
|
||||||
elif alarm_settings.alarm_time.hour == 0 and hour == 11:
|
elif self.settings.alarm_time.hour == 0 and hour == 11:
|
||||||
hour = 23
|
hour = 23
|
||||||
elif alarm_settings.alarm_time.hour == 12 and hour == 23:
|
elif self.settings.alarm_time.hour == 12 and hour == 23:
|
||||||
hour = 11
|
hour = 11
|
||||||
|
|
||||||
minute = alarm_settings.alarm_time.minute
|
minute = self.settings.alarm_time.minute
|
||||||
alarm_settings.alarm_time = datetime.datetime(alarm_settings.alarm_time.year, \
|
self.settings.alarm_time = datetime.datetime(self.settings.alarm_time.year, \
|
||||||
alarm_settings.alarm_time.month, alarm_settings.alarm_time.day, \
|
self.settings.alarm_time.month, self.settings.alarm_time.day, \
|
||||||
hour, alarm_settings.alarm_time.minute, alarm_settings.alarm_time.second, 0)
|
hour, self.settings.alarm_time.minute, self.settings.alarm_time.second, 0)
|
||||||
|
|
||||||
elif self.grabbed == "light_button":
|
elif self.grabbed == "light_button":
|
||||||
if len(self.light_button_move_init) == 0:
|
if len(self.light_button_move_init) == 0:
|
||||||
|
@ -1219,8 +1186,7 @@ class MyClockWidget(FloatLayout):
|
||||||
super(MyClockWidget, self).on_touch_move(touch)
|
super(MyClockWidget, self).on_touch_move(touch)
|
||||||
|
|
||||||
def touch_down_function(self, touch):
|
def touch_down_function(self, touch):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
t = self.settings.alarm_time
|
||||||
t = alarm_settings.alarm_time
|
|
||||||
hands = self.ids["hands"]
|
hands = self.ids["hands"]
|
||||||
minutes_hand = self.position_on_clock(t.minute/60+t.second/3600, length=0.40*hands.size[0])
|
minutes_hand = self.position_on_clock(t.minute/60+t.second/3600, length=0.40*hands.size[0])
|
||||||
hours_hand = self.position_on_clock(t.hour/12 + t.minute/720, length=0.35*hands.size[0])
|
hours_hand = self.position_on_clock(t.hour/12 + t.minute/720, length=0.35*hands.size[0])
|
||||||
|
@ -1321,7 +1287,6 @@ class MyClockWidget(FloatLayout):
|
||||||
return super(MyClockWidget, self).on_touch_up(touch)
|
return super(MyClockWidget, self).on_touch_up(touch)
|
||||||
|
|
||||||
class MyApp(App):
|
class MyApp(App):
|
||||||
alarm_settings = AlarmSettings()
|
|
||||||
update_rate = 60.0
|
update_rate = 60.0
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
|
@ -1341,7 +1306,7 @@ class MyApp(App):
|
||||||
|
|
||||||
# Volume is in 0-1.0 range
|
# Volume is in 0-1.0 range
|
||||||
old_vol = clock_widget.mixer.getvolume()
|
old_vol = clock_widget.mixer.getvolume()
|
||||||
clock_widget.volume_target = self.alarm_settings.wake_up_volume / 20.0
|
clock_widget.volume_target = clock_widget.settings.wake_up_volume / 20.0
|
||||||
new_vol = clock_widget.mixer.getvolume()
|
new_vol = clock_widget.mixer.getvolume()
|
||||||
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue