diff --git a/ks_includes/config.py b/ks_includes/config.py index f450af8a..b7e7fd56 100644 --- a/ks_includes/config.py +++ b/ks_includes/config.py @@ -220,7 +220,7 @@ class KlipperScreenConfig: self.configurable_options = [ {"language": { - "section": "main", "name": _("Language"), "type": "dropdown", "value": "system_lang", + "section": "main", "name": _("Language"), "type": None, "value": "system_lang", "callback": screen.change_language, "options": [ {"name": _("System") + " " + _("(default)"), "value": "system_lang"}]}}, {"theme": { @@ -279,10 +279,6 @@ class KlipperScreenConfig: self.configurable_options.extend(panel_options) - lang_opt = self.configurable_options[0]['language']['options'] - for lang in self.lang_list: - lang_opt.append({"name": lang, "value": lang}) - t_path = os.path.join(klipperscreendir, 'styles') themes = [d for d in os.listdir(t_path) if (not os.path.isfile(os.path.join(t_path, d)) and d != "z-bolt")] themes.sort() diff --git a/ks_includes/screen_panel.py b/ks_includes/screen_panel.py index f9de3f53..f21e9f5e 100644 --- a/ks_includes/screen_panel.py +++ b/ks_includes/screen_panel.py @@ -64,7 +64,9 @@ class ScreenPanel: self._screen.show_panel(panel, item['panel'], item['name'], 1, False) def load_menu(self, widget, name, title=None): + logging.info(f"loading menu {name}") if f"{name}_menu" not in self.labels: + logging.error(f"{name} not in labels") return for child in self.content.get_children(): diff --git a/panels/settings.py b/panels/settings.py index 4228497c..255a4ac8 100644 --- a/panels/settings.py +++ b/panels/settings.py @@ -13,7 +13,7 @@ def create_panel(*args): class SettingsPanel(ScreenPanel): def __init__(self, screen, title): super().__init__(screen, title) - self.printers = self.settings = {} + self.printers = self.settings = self.langs = {} self.menu = ['settings_menu'] options = self._config.get_configurable_options().copy() options.append({"printers": { @@ -21,6 +21,11 @@ class SettingsPanel(ScreenPanel): "type": "menu", "menu": "printers" }}) + options.append({"lang": { + "name": _("Language"), + "type": "menu", + "menu": "lang" + }}) self.labels['settings_menu'] = self._gtk.ScrolledWindow() self.labels['settings'] = Gtk.Grid() @@ -29,6 +34,16 @@ class SettingsPanel(ScreenPanel): name = list(option)[0] self.add_option('settings', self.settings, name, option[name]) + self.labels['lang_menu'] = self._gtk.ScrolledWindow() + self.labels['lang'] = Gtk.Grid() + self.labels['lang_menu'].add(self.labels['lang']) + for lang in self._config.lang_list: + self.langs[lang] = { + "name": lang, + "type": "lang", + } + self.add_option("lang", self.langs, lang, self.langs[lang]) + self.labels['printers_menu'] = self._gtk.ScrolledWindow() self.labels['printers'] = Gtk.Grid() self.labels['printers_menu'].add(self.labels['printers']) @@ -114,6 +129,12 @@ class SettingsPanel(ScreenPanel): open_menu.set_hexpand(False) open_menu.set_halign(Gtk.Align.END) dev.add(open_menu) + elif option['type'] == "lang": + select = self._gtk.Button("load", style="color3") + select.connect("clicked", self._screen.change_language, option['name']) + select.set_hexpand(False) + select.set_halign(Gtk.Align.END) + dev.add(select) opt_array[opt_name] = { "name": option['name'], diff --git a/screen.py b/screen.py index 9d78f1de..81e2ac4b 100755 --- a/screen.py +++ b/screen.py @@ -681,7 +681,7 @@ class KlipperScreen(Gtk.Window): def toggle_macro_shortcut(self, value): self.base_panel.show_macro_shortcut(value) - def change_language(self, lang): + def change_language(self, widget, lang): self._config.install_language(lang) self.lang_ltr = set_text_direction(lang) self._config._create_configurable_options(self)