Пример #1
0
    def mouse_event(self, event):
        Screen.mouse_event(self, event)
        if event.type == pygame.MOUSEBUTTONUP:
            if self.widgets["button_back"].rect_hit(event.pos):
                return {"screen_id": "settingsscreen"}

            for checkbox_id, checkbox in self.checkboxes.items():
                checkbox.on_mouse_release(event.pos)
                if checkbox.rect_hit(event.pos):
                    # checkbox is hit, save the new setting
                    Settings.set(checkbox_id, checkbox.selected)
Пример #2
0
    def _update_kana(self):
        # update the selected status of the rows and columns
        for row, checkbox in self.row_checkboxes.items():
            y = self.kana.row_table[row]["y"]
            checkbox.selected = all([
                self.checkboxes[kana].selected for kana in self.kana.characters
                if self.kana.table[kana]["y"] == y
            ])
        for col, checkbox in self.col_checkboxes.items():
            x = self.kana.col_table[col]["x"]
            checkbox.selected = all([
                self.checkboxes[kana].selected for kana in self.kana.characters
                if self.kana.table[kana]["x"] == x
            ])

        # serialize the currently selected kana to settings
        selected_kana = [
            kana  # note: selected means don't learn
            for kana in self.kana.table.keys()
            if not self.checkboxes[kana].selected
        ]
        Settings.set(f"{self.kana_name}_kana", selected_kana)
Пример #3
0
    def mouse_event(self, event):
        Screen.mouse_event(self, event)
        if event.type == pygame.MOUSEBUTTONUP:
            if self.widgets["button_menu"].rect_hit(event.pos):
                return {"screen_id": "menuscreen"}

            for kana_widget_id, kana_widget in self.kana_widgets.items():
                checkbox = kana_widget["checkbox"]
                # check whether the kana checkboxes are hit
                checkbox.on_mouse_release(event.pos)
                if checkbox.rect_hit(event.pos):
                    # checkbox is hit, save the new setting
                    Settings.set(kana_widget["setting"], checkbox.selected)
                # check whether the buttons are hit
                if kana_widget["button"].rect_hit(event.pos):
                    return {"screen_id": f"optionsfor{kana_widget_id}"}

            for checkbox_widget_id, checkbox_widget in self.checkboxes.items():
                checkbox = checkbox_widget["checkbox"]
                checkbox.on_mouse_release(event.pos)
                if checkbox.rect_hit(event.pos):
                    # checkbox is hit, save the new setting
                    Settings.set(checkbox_widget["setting"], checkbox.selected)

            # theme switcher related buttons
            if self.theme_left.rect_hit(event.pos):
                self.update_theme_index(-1)

            if self.theme_right.rect_hit(event.pos):
                self.update_theme_index(1)

            if self.theme_apply.rect_hit(event.pos):
                # get the theme from the index and save the new theme
                theme = list(Settings.get("themes").keys())[self.theme_index]
                Settings.set("theme", theme)
                # update the text on the current theme widget
                self.widgets["theme_text"].set_text(
                    f"Current theme: '{theme}'"
                )
                # reapply the (new) theme to the GUI
                Collections.reapply_theme()
Пример #4
0
    def __init__(self, render_surface, surface_size):
        Screen.__init__(self, render_surface, surface_size)

        self.checkboxes = {
            "randomize_kana": {
                "checkbox": Checkbox(
                    self.render_surface,
                    (600, 450, 720, 100),
                    "Randomize Kana",
                ).set_themed(),
                "setting": "randomize_kana",
            },
        }

        self.kana_widgets = {
            "hiragana": {
                "checkbox": Checkbox(
                    self.render_surface,
                    (200, 600, 700, 100),
                    "Learn Hiragana",
                ).set_themed(),
                "button": Button(
                    self.render_surface,
                    (1000, 600, 700, 100),
                    "Select which kana",
                ).set_themed(),
                "setting": "learn_hiragana",
            },
            "katakana": {
                "checkbox": Checkbox(
                    self.render_surface,
                    (200, 750, 700, 100),
                    "Learn Katakana",
                ).set_themed(),
                "button": Button(
                    self.render_surface,
                    (1000, 750, 700, 100),
                    "Select which kana",
                ).set_themed(),
                "setting": "learn_katakana",
            },
            "kanji": {
                "checkbox": Checkbox(
                    self.render_surface,
                    (200, 900, 700, 100),
                    "Learn Kanji",
                ).set_themed(),
                "button": Button(
                    self.render_surface,
                    (1000, 900, 700, 100),
                    "Kanji options",
                ).set_themed(),
                "setting": "learn_kanji",
            },
        }

        # set the 'selected' property of the checkboxes and kana_widgets
        for checkbox_widget_id, checkbox_widget in self.checkboxes.items():
            checkbox = checkbox_widget["checkbox"]
            checkbox.selected = Settings.get(checkbox_widget["setting"])
        for kana_widget_id, kana_widget in self.kana_widgets.items():
            checkbox = kana_widget["checkbox"]
            checkbox.selected = Settings.get(kana_widget["setting"])

        theme = Settings.get("theme")
        themes = Settings.get("themes")
        self.widgets = {
            "heading_settings": Heading(
                self.render_surface, (0, 0, 1920, 100), "Settings"
            ).set_themed(),
            "button_menu": Button(
                self.render_surface, (10, 10, 230, 80), "Menu"
            ).set_themed(),
            "theme_text": Text(
                self.render_surface,
                (500, 150, 920, 100),
                f"Current theme: '{theme}'",
            ).set_themed(),
        }

        # get the theme index of the current theme
        if theme in themes:
            self.theme_index = list(themes.keys()).index(theme)
        else:
            # somehow the theme in the settings file isn't available, reset
            print(f"theme {theme} is invalid! resetting to default")
            self.theme_index = 0
            Settings.set("theme", next(iter(themes)))
            Collections.reapply_theme()

        # theme related widgets
        theme_name = list(themes.keys())[self.theme_index]
        apply_theme_text = f"Apply theme: {theme_name}"
        self.theme_left = Button(
            self.render_surface, (300, 275, 100, 100), "<"
        ).set_themed()
        self.theme_apply = Button(
            self.render_surface, (500, 275, 920, 100), apply_theme_text
        ).set_themed()
        self.theme_right = Button(
            self.render_surface, (1520, 275, 100, 100), ">"
        ).set_themed()
Пример #5
0
 def set_screen_size(self, screen_size):
     self.screen_size = screen_size
     Settings.set("width", self.screen_size[0])
     Settings.set("height", self.screen_size[1])
     for screen_id, screen in self.screens.items():
         screen.set_screen_size(self.screen_size)