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:
orientation: "vertical"
pos_hint: {"center_x":0.5, "center_y":0.5}
id: settings_menu_wake_up_sound_boxlayout
Label:
text: "Select wake up sound"
font_size: root.height*0.05
color: root.theme.color_font
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
id: settings_menu_theme_background
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.slider import Slider
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.lang import Builder
from kivy.graphics import Color, Line, Rectangle, Ellipse
@ -236,6 +238,7 @@ class MyClockWidget(FloatLayout):
is_arm = is_arm()
def play_sound(self, source):
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(["Rectangle", background.canvas, background.size, background.pos, ""])
for s in ["label_top", "label_0", "label_1", "Ok_button"]:
i = self.ids["settings_menu_wake_up_sound_" + s]
for i in self.wake_up_sound_labels:
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):
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
alarm_settings = App.get_running_app().alarm_settings
self.ids["settings_menu_wake_up_sound_Birds"].active = False
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = False
for c in self.wake_up_sound_checkboxes:
c.active = False
print("sound selected: " + alarm_settings.sound_selected)
if alarm_settings.sound_selected == "Birds":
self.ids["settings_menu_wake_up_sound_Birds"].active = True
elif alarm_settings.sound_selected == "NPO Radio 1":
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = True
n = 0
for i in self.wake_up_sounds:
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_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
self.ids["settings_menu_wake_up_sound_select_button"].text = alarm_settings.sound_selected
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):
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
if self.settings_menu_wake_up_sound_select_button_cb_hack:
@ -762,14 +779,8 @@ class MyClockWidget(FloatLayout):
else:
print("You deselected " + sound)
alarm_settings.sound_source = ""
alarm_settings.sound_selected = ""
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"
alarm_settings.sound_source = self.wake_up_sounds[sound]
alarm_settings.sound_selected = sound
def settings_menu_theme_select_button_cb(self):
self.settings_menu_wake_up_theme_button_cb_hack = True
@ -1158,6 +1169,62 @@ class MyApp(App):
def build(self):
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 initially, just after construction of the widget is complete
Clock.schedule_once(clock_widget.update_display, 0)