Use dictionary for selection of wake up sounds

This commit is contained in:
Admar Schoonen 2023-04-16 17:00:21 +02:00
parent 6ebae5ddb3
commit 8e27056e05
2 changed files with 89 additions and 56 deletions

View File

@ -204,46 +204,12 @@
BoxLayout: BoxLayout:
orientation: "vertical" orientation: "vertical"
pos_hint: {"center_x":0.5, "center_y":0.5} pos_hint: {"center_x":0.5, "center_y":0.5}
id: settings_menu_wake_up_sound_boxlayout
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.theme.color_font color: root.theme.color_font
id: settings_menu_wake_up_sound_label_top id: settings_menu_wake_up_sound_label_top
GridLayout:
cols: 2
CheckBox:
group: "settings_menu_wake_up_sound"
on_active: root.settings_menu_wake_up_sound_cb(self, self.active, "Birds")
id: settings_menu_wake_up_sound_Birds
Label:
text: "Birds"
halign: "left"
valign: "middle"
text_size: self.size
font_size: root.height*0.05
color: root.theme.color_font
active: True
id: settings_menu_wake_up_sound_label_0
CheckBox:
group: "settings_menu_wake_up_sound"
on_active: root.settings_menu_wake_up_sound_cb(self, self.active, "NPO Radio 1")
id: settings_menu_wake_up_sound_NpoRadio1
Label:
text: "NPO Radio 1"
halign: "left"
valign: "middle"
text_size: self.size
font_size: root.height*0.05
color: root.theme.color_font
id: settings_menu_wake_up_sound_label_1
Button:
id: settings_menu_wake_up_sound_Ok_button
on_press: root.settings_menu_wake_up_sound_Ok_button_cb()
text: "Ok"
font_size: root.height*0.05
color: root.theme.color_font
background_normal: ''
background_color: root.theme.color_button
FloatLayout FloatLayout
id: settings_menu_theme_background id: settings_menu_theme_background
size_hint: None, None size_hint: None, None

109
clock.py
View File

@ -55,6 +55,8 @@ from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label from kivy.uix.label import Label
from kivy.uix.slider import Slider from kivy.uix.slider import Slider
from kivy.uix.button import Button from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.checkbox import CheckBox
from kivy.clock import Clock from kivy.clock import Clock
from kivy.lang import Builder from kivy.lang import Builder
from kivy.graphics import Color, Line, Rectangle, Ellipse from kivy.graphics import Color, Line, Rectangle, Ellipse
@ -236,6 +238,7 @@ class MyClockWidget(FloatLayout):
is_arm = is_arm() is_arm = is_arm()
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
@ -612,11 +615,10 @@ class MyClockWidget(FloatLayout):
self.draw_list_curr_frame.append(["Color", background.canvas, rgb[0], rgb[1], rgb[2]]) self.draw_list_curr_frame.append(["Color", background.canvas, rgb[0], rgb[1], rgb[2]])
self.draw_list_curr_frame.append(["Rectangle", background.canvas, background.size, background.pos, ""]) self.draw_list_curr_frame.append(["Rectangle", background.canvas, background.size, background.pos, ""])
for s in ["label_top", "label_0", "label_1", "Ok_button"]: for i in self.wake_up_sound_labels:
i = self.ids["settings_menu_wake_up_sound_" + s]
i.color = self.theme.color_font i.color = self.theme.color_font
i = self.ids["settings_menu_wake_up_sound_Ok_button"]
i.background_color = self.theme.color_button self.settings_menu_wake_up_sound_Ok_button.background_color = self.theme.color_button
def update_settings_menu_theme(self): def update_settings_menu_theme(self):
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["settings_menu_theme_background"], False]) self.draw_list_curr_frame.append(["self.hide_widget", self.ids["settings_menu_theme_background"], False])
@ -731,25 +733,40 @@ class MyClockWidget(FloatLayout):
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 alarm_settings = App.get_running_app().alarm_settings
self.ids["settings_menu_wake_up_sound_Birds"].active = False for c in self.wake_up_sound_checkboxes:
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = False c.active = False
print("sound selected: " + alarm_settings.sound_selected) print("sound selected: " + alarm_settings.sound_selected)
if alarm_settings.sound_selected == "Birds":
self.ids["settings_menu_wake_up_sound_Birds"].active = True n = 0
elif alarm_settings.sound_selected == "NPO Radio 1": for i in self.wake_up_sounds:
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = True if i == alarm_settings.sound_selected:
self.wake_up_sound_checkboxes[n].active = True
n = n + 1
self.view = "settings_menu_wake_up_sound" self.view = "settings_menu_wake_up_sound"
self.view_active_since = time.time() 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, event):
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() 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):
n = 0
for c in self.wake_up_sound_checkboxes:
if c == instance:
break
n = n + 1
k = 0
for sound in self.wake_up_sounds:
if k == n:
break
k = k + 1
alarm_settings = App.get_running_app().alarm_settings 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:
@ -762,14 +779,8 @@ class MyClockWidget(FloatLayout):
else: else:
print("You deselected " + sound) print("You deselected " + sound)
alarm_settings.sound_source = "" alarm_settings.sound_source = self.wake_up_sounds[sound]
alarm_settings.sound_selected = "" alarm_settings.sound_selected = sound
if self.ids["settings_menu_wake_up_sound_Birds"].active:
alarm_settings.sound_selected = sound
alarm_settings.sound_source = "Woodpecker Chirps - QuickSounds.com.mp3"
elif self.ids["settings_menu_wake_up_sound_NpoRadio1"].active:
alarm_settings.sound_selected = sound
alarm_settings.sound_source = "https://icecast.omroep.nl/radio1-bb-mp3"
def settings_menu_theme_select_button_cb(self): def settings_menu_theme_select_button_cb(self):
self.settings_menu_wake_up_theme_button_cb_hack = True self.settings_menu_wake_up_theme_button_cb_hack = True
@ -1158,6 +1169,62 @@ class MyApp(App):
def build(self): def build(self):
clock_widget = MyClockWidget() clock_widget = MyClockWidget()
x = clock_widget.ids["settings_menu_wake_up_sound_boxlayout"]
gl = GridLayout(
cols=2,
)
clock_widget.wake_up_sounds = {
"Birds": "Woodpecker Chirps - QuickSounds.com.mp3",
"NPO Radio 1": "https://icecast.omroep.nl/radio1-bb-mp3"
}
clock_widget.wake_up_sound_checkboxes = []
clock_widget.wake_up_sound_labels = []
i = 0
for w in clock_widget.wake_up_sounds:
c = CheckBox(
group = "settings_menu_wake_up_sound",
)
c.bind(active=clock_widget.settings_menu_wake_up_sound_cb)
gl.add_widget(c)
clock_widget.wake_up_sound_checkboxes.append(c)
if i == 0:
a = True
else:
a = False
l = Label(
text = w,
halign = "left",
valign = "middle",
size = [c.size[0] * 2.88, c.size[1]],
text_size = Window.size,
font_size = Window.height*0.05,
color = clock_widget.theme.color_font,
active = a
)
l.text_size = l.size
gl.add_widget(l)
clock_widget.wake_up_sound_labels.append(l)
i = i + 1
x.add_widget(gl)
b = Button(
text = "Ok",
font_size = clock_widget.height*0.3,
color = clock_widget.theme.color_font,
background_normal = '',
background_color = clock_widget.theme.color_button
)
b.bind(on_press = clock_widget.settings_menu_wake_up_sound_Ok_button_cb)
x.add_widget(b)
clock_widget.settings_menu_wake_up_sound_Ok_button = b
update_rate = App.get_running_app().update_rate update_rate = App.get_running_app().update_rate
# update initially, just after construction of the widget is complete # update initially, just after construction of the widget is complete
Clock.schedule_once(clock_widget.update_display, 0) Clock.schedule_once(clock_widget.update_display, 0)