diff --git a/clock.kv b/clock.kv index c736041..a2fc115 100644 --- a/clock.kv +++ b/clock.kv @@ -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 diff --git a/clock.py b/clock.py index 8ecfbec..d970902 100644 --- a/clock.py +++ b/clock.py @@ -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)