diff --git a/bauh/api/abstract/view.py b/bauh/api/abstract/view.py index 50781c82..e904807c 100644 --- a/bauh/api/abstract/view.py +++ b/bauh/api/abstract/view.py @@ -1,6 +1,6 @@ from abc import ABC from enum import Enum -from typing import List, Set, Optional, Dict, TypeVar, Type +from typing import List, Set, Optional, Dict, TypeVar, Type, Union, Tuple class MessageType(Enum): @@ -30,6 +30,39 @@ class ViewComponent(ABC): V = TypeVar('V', bound=ViewComponent) +class ViewContainer(ViewComponent, ABC): + """ + Represents a GUI component composed by other components + """ + + def __init__(self, components: Union[List[ViewComponent], Tuple[ViewComponent]], + id_: Optional[str] = None, + observers: Optional[List[ViewObserver]] = None): + super(ViewContainer, self).__init__(id_=id_, observers=observers) + self.components = components + self.component_map = {c.id: c for c in components if c.id is not None} if components else None + + def get_component(self, id_: str, type_: Type[V] = ViewComponent) -> Optional[V]: + if self.component_map: + instance = self.component_map.get(id_) + + if instance: + if isinstance(instance, type_): + return instance + + raise Exception(f"The {ViewComponent.__class__.__name__} (id={id_}) is not an " + f"instance of '{type_.__name__}'") + + def get_component_by_idx(self, idx: int, type_: Type[V]) -> Optional[V]: + if self.components and idx < len(self.components): + c = self.components[idx] + if isinstance(c, type_): + return c + + raise Exception(f"The {ViewComponent.__class__.__name__} at index {idx} is not an " + f"instance of '{type_.__name__}'") + + class SpacerComponent(ViewComponent): def __init__(self): @@ -205,45 +238,15 @@ class TextInputComponent(ViewComponent): return self.label.capitalize() if self.capitalize_label else self.label -class FormComponent(ViewComponent): +class FormComponent(ViewContainer): def __init__(self, components: List[ViewComponent], label: str = None, spaces: bool = True, id_: str = None, min_width: Optional[int] = None): - super(FormComponent, self).__init__(id_=id_) + super(FormComponent, self).__init__(id_=id_, components=components) self.label = label self.spaces = spaces - self.components = components - self.component_map = {c.id: c for c in components if c.id} if components else None self.min_width = min_width - def get_component(self, id_: str) -> Optional[ViewComponent]: - if self.component_map: - return self.component_map.get(id_) - - def get_single_select_component(self, id_: str) -> Optional[SingleSelectComponent]: - comp = self.get_component(id_) - - if comp: - if not isinstance(comp, SingleSelectComponent): - raise Exception("'{}' is not a {}".format(id_, SingleSelectComponent.__class__.__name__)) - return comp - - def get_form_component(self, id_: str) -> Optional["FormComponent"]: - comp = self.get_component(id_) - - if comp: - if not isinstance(comp, FormComponent): - raise Exception("'{}' is not a {}".format(id_, FormComponent.__class__.__name__)) - return comp - - def get_text_input(self, id_) -> Optional[TextInputComponent]: - comp = self.get_component(id_) - - if comp: - if not isinstance(comp, TextInputComponent): - raise Exception("'{}' is not a {}".format(id_, TextInputComponent.__class__.__name__)) - return comp - class FileChooserComponent(ViewComponent): @@ -309,38 +312,7 @@ class RangeInputComponent(InputViewComponent): self.max_width = max_width -class PanelComponent(ViewComponent): +class PanelComponent(ViewContainer): def __init__(self, components: List[ViewComponent], id_: str = None): - super(PanelComponent, self).__init__(id_=id_) - self.components = components - self.component_map = {c.id: c for c in components if c.id is not None} if components else None - - def get_component(self, id_: str) -> Optional[ViewComponent]: - if self.component_map: - return self.component_map.get(id_) - - def get_component_by_idx(self, idx: int, type_: Type[V]) -> Optional[V]: - if self.components and idx < len(self.components): - c = self.components[idx] - if isinstance(c, type_): - return c - - raise Exception(f"The {ViewComponent.__class__.__name__} at index {idx} is not an " - f"instance of '{type_.__name__}'") - - def get_form_component(self, id_: str) -> Optional[FormComponent]: - comp = self.get_component(id_) - - if comp: - if not isinstance(comp, FormComponent): - raise Exception("'{}' is not a {}".format(id_, FormComponent.__class__.__name__)) - return comp - - def get_text_input(self, id_) -> Optional[TextInputComponent]: - comp = self.get_component(id_) - - if comp: - if not isinstance(comp, TextInputComponent): - raise Exception("'{}' is not a {}".format(id_, TextInputComponent.__class__.__name__)) - return comp + super(PanelComponent, self).__init__(id_=id_, components=components) diff --git a/bauh/gems/appimage/controller.py b/bauh/gems/appimage/controller.py index c84e85a6..2bf0ffce 100644 --- a/bauh/gems/appimage/controller.py +++ b/bauh/gems/appimage/controller.py @@ -851,20 +851,20 @@ class AppImageManager(SoftwareManager, SettingsController): traceback.print_exc() def get_settings(self) -> Optional[Generator[SettingsView, None, None]]: - appimage_config = self.configman.get_config() + config_ = self.configman.get_config() max_width = floor(self.context.screen_width * 0.15) comps = [ TextInputComponent(label=self.i18n['appimage.config.database.expiration'], - value=int(appimage_config['database']['expiration']) if isinstance( - appimage_config['database']['expiration'], int) else '', + value=int(config_['database']['expiration']) if isinstance( + config_['database']['expiration'], int) else '', tooltip=self.i18n['appimage.config.database.expiration.tip'], only_int=True, max_width=max_width, id_='appim_db_exp'), TextInputComponent(label=self.i18n['appimage.config.suggestions.expiration'], - value=int(appimage_config['suggestions']['expiration']) if isinstance( - appimage_config['suggestions']['expiration'], int) else '', + value=int(config_['suggestions']['expiration']) if isinstance( + config_['suggestions']['expiration'], int) else '', tooltip=self.i18n['appimage.config.suggestions.expiration.tip'], only_int=True, max_width=max_width, @@ -874,14 +874,14 @@ class AppImageManager(SoftwareManager, SettingsController): yield SettingsView(self, PanelComponent([FormComponent(components=comps)])) def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: - appimage_config = self.configman.get_config() + config_ = self.configman.get_config() form = component.get_component_by_idx(0, FormComponent) - appimage_config['database']['expiration'] = form.get_text_input('appim_db_exp').get_int_value() - appimage_config['suggestions']['expiration'] = form.get_text_input('appim_sugs_exp').get_int_value() + config_['database']['expiration'] = form.get_component('appim_db_exp', TextInputComponent).get_int_value() + config_['suggestions']['expiration'] = form.get_component('appim_sugs_exp', TextInputComponent).get_int_value() try: - self.configman.save_config(appimage_config) + self.configman.save_config(config_) return True, None except: return False, [traceback.format_exc()] diff --git a/bauh/gems/arch/controller.py b/bauh/gems/arch/controller.py index 4ce38833..e0cacde7 100644 --- a/bauh/gems/arch/controller.py +++ b/bauh/gems/arch/controller.py @@ -3026,47 +3026,59 @@ class ArchManager(SoftwareManager, SettingsController): yield self._get_general_settings(arch_config, max_width) yield self._get_aur_settings(arch_config, max_width) - def _fill_general_settings(self, arch_config: dict, form: FormComponent): - arch_config['repositories'] = form.get_single_select_component('repos').get_selected() - arch_config['sync_databases'] = form.get_single_select_component('sync_dbs').get_selected() - arch_config['sync_databases_startup'] = form.get_single_select_component('sync_dbs_start').get_selected() - arch_config['clean_cached'] = form.get_single_select_component('clean_cached').get_selected() - arch_config['refresh_mirrors_startup'] = form.get_single_select_component('ref_mirs').get_selected() - arch_config['mirrors_sort_limit'] = form.get_text_input('mirrors_sort_limit').get_int_value() - arch_config['repositories_mthread_download'] = form.get_single_select_component('mthread_download').get_selected() - arch_config['automatch_providers'] = form.get_single_select_component('autoprovs').get_selected() + @staticmethod + def fill_general_settings(arch_config: dict, form: FormComponent): + arch_config['repositories'] = form.get_component('repos', SingleSelectComponent).get_selected() + arch_config['sync_databases'] = form.get_component('sync_dbs', SingleSelectComponent).get_selected() + arch_config['clean_cached'] = form.get_component('clean_cached', SingleSelectComponent).get_selected() + arch_config['refresh_mirrors_startup'] = form.get_component('ref_mirs', SingleSelectComponent).get_selected() + arch_config['mirrors_sort_limit'] = form.get_component('mirrors_sort_limit', TextInputComponent).get_int_value() + arch_config['automatch_providers'] = form.get_component('autoprovs', SingleSelectComponent).get_selected() - prefer_repo_provider = form.get_single_select_component('prefer_repo_provider').get_selected() + sync_dbs_startup = form.get_component('sync_dbs_start', SingleSelectComponent).get_selected() + arch_config['sync_databases_startup'] = sync_dbs_startup + + mthread_download = form.get_component('mthread_download', SingleSelectComponent).get_selected() + arch_config['repositories_mthread_download'] = mthread_download + + prefer_repo_provider = form.get_component('prefer_repo_provider', SingleSelectComponent).get_selected() arch_config['prefer_repository_provider'] = prefer_repo_provider - check_dep_break = form.get_single_select_component('check_dependency_breakage').get_selected() + check_dep_break = form.get_component('check_dependency_breakage', SingleSelectComponent).get_selected() arch_config['check_dependency_breakage'] = check_dep_break - sug_opt_dep_uni = form.get_single_select_component('suggest_optdep_uninstall').get_selected() + sug_opt_dep_uni = form.get_component('suggest_optdep_uninstall', SingleSelectComponent).get_selected() arch_config['suggest_optdep_uninstall'] = sug_opt_dep_uni - sug_unneeded_uni = form.get_single_select_component('suggest_unneeded_uninstall').get_selected() + sug_unneeded_uni = form.get_component('suggest_unneeded_uninstall', SingleSelectComponent).get_selected() arch_config['suggest_unneeded_uninstall'] = sug_unneeded_uni - arch_config['categories_exp'] = form.get_text_input('arch_cats_exp').get_int_value() + arch_config['categories_exp'] = form.get_component('arch_cats_exp', TextInputComponent).get_int_value() def _fill_aur_settings(self, arch_config: dict, form: FormComponent): - arch_config['optimize'] = form.get_single_select_component('opts').get_selected() - arch_config['aur_rebuild_detector'] = form.get_single_select_component('rebuild_detector').get_selected() + arch_config['optimize'] = form.get_component('opts', SingleSelectComponent).get_selected() - rebuild_no_bin = form.get_single_select_component('rebuild_detector_no_bin').get_selected() + rebuild_detect = form.get_component('rebuild_detector', SingleSelectComponent).get_selected() + arch_config['aur_rebuild_detector'] = rebuild_detect + + rebuild_no_bin = form.get_component('rebuild_detector_no_bin', SingleSelectComponent).get_selected() arch_config['aur_rebuild_detector_no_bin'] = rebuild_no_bin - arch_config['edit_aur_pkgbuild'] = form.get_single_select_component('edit_aur_pkgbuild').get_selected() - arch_config['aur_remove_build_dir'] = form.get_single_select_component('aur_remove_build_dir').get_selected() - arch_config['aur_build_dir'] = form.get_component('aur_build_dir').file_path - arch_config['aur_build_only_chosen'] = form.get_single_select_component('aur_build_only_chosen').get_selected() - arch_config['aur_idx_exp'] = form.get_text_input('aur_idx_exp').get_int_value() + arch_config['edit_aur_pkgbuild'] = form.get_component('edit_aur_pkgbuild', SingleSelectComponent).get_selected() + + remove_build_dir = form.get_component('aur_remove_build_dir', SingleSelectComponent).get_selected() + arch_config['aur_remove_build_dir'] = remove_build_dir + + build_chosen = form.get_component('aur_build_only_chosen', SingleSelectComponent).get_selected() + arch_config['aur_build_only_chosen'] = build_chosen + + arch_config['aur_build_dir'] = form.get_component('aur_build_dir', FileChooserComponent).file_path + arch_config['aur_idx_exp'] = form.get_component('aur_idx_exp', TextInputComponent).get_int_value() if not arch_config['aur_build_dir']: arch_config['aur_build_dir'] = None - aur_enabled_select = form.get_single_select_component('aur') + aur_enabled_select = form.get_component('aur', SingleSelectComponent) arch_config['aur'] = aur_enabled_select.get_selected() if aur_enabled_select.changed() and arch_config['aur']: @@ -3078,7 +3090,7 @@ class ArchManager(SoftwareManager, SettingsController): form = component.get_component_by_idx(0, FormComponent) if component.id == 'repo': - self._fill_general_settings(arch_config, form) + self.fill_general_settings(arch_config, form) elif component.id == 'aur': self._fill_aur_settings(arch_config, form) diff --git a/bauh/gems/debian/controller.py b/bauh/gems/debian/controller.py index 4df4ea0e..183e4995 100644 --- a/bauh/gems/debian/controller.py +++ b/bauh/gems/debian/controller.py @@ -636,16 +636,26 @@ class DebianPackageManager(SoftwareManager, SettingsController): yield SettingsView(self, panel) def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: - deb_config = self.configman.get_config() + config_ = self.configman.get_config() container = component.get_component_by_idx(0, FormComponent) - deb_config['pkg_sources.app'] = container.get_single_select_component('pkg_sources.app').get_selected() - deb_config['index_apps.exp'] = container.get_text_input('index_apps.exp').get_int_value() - deb_config['sync_pkgs.time'] = container.get_text_input('sync_pkgs.time').get_int_value() - deb_config['suggestions.exp'] = container.get_text_input('suggestions.exp').get_int_value() + + for prop, type_ in {'pkg_sources.app': SingleSelectComponent, + 'index_apps.exp': TextInputComponent, + 'sync_pkgs.time': TextInputComponent, + 'suggestions.exp': TextInputComponent}.items(): + comp = container.get_component(prop, type_) + + val = None + if isinstance(comp, SingleSelectComponent): + val = comp.get_selected() + elif isinstance(comp, TextInputComponent): + val = comp.get_int_value() + + config_[prop] = val try: - self.configman.save_config(deb_config) + self.configman.save_config(config_) return True, None except: return False, [traceback.format_exc()] diff --git a/bauh/gems/flatpak/controller.py b/bauh/gems/flatpak/controller.py index 09351329..48165b12 100644 --- a/bauh/gems/flatpak/controller.py +++ b/bauh/gems/flatpak/controller.py @@ -631,7 +631,7 @@ class FlatpakManager(SoftwareManager, SettingsController): def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: flatpak_config = self.configman.get_config() form = component.get_component_by_idx(0, FormComponent) - flatpak_config['installation_level'] = form.get_single_select_component('install').get_selected() + flatpak_config['installation_level'] = form.get_component('install', SingleSelectComponent).get_selected() try: self.configman.save_config(flatpak_config) diff --git a/bauh/gems/snap/controller.py b/bauh/gems/snap/controller.py index 232b6221..4889a682 100644 --- a/bauh/gems/snap/controller.py +++ b/bauh/gems/snap/controller.py @@ -10,7 +10,7 @@ from bauh.api.abstract.disk import DiskCacheLoader from bauh.api.abstract.handler import ProcessWatcher, TaskManager from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \ SuggestionPriority, PackageStatus -from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption, ViewComponent, PanelComponent, \ +from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption, PanelComponent, \ FormComponent, TextInputComponent from bauh.api.exception import NoInternetException from bauh.commons.boot import CreateConfigFile @@ -439,8 +439,9 @@ class SnapManager(SoftwareManager, SettingsController): max_width=max_width, tip=self.i18n['snap.config.install_channel.tip']) + cat_exp_val = snap_config['categories_exp'] if isinstance(snap_config['categories_exp'], int) else '' categories_exp = TextInputComponent(id_='snap_cat_exp', - value=snap_config['categories_exp'] if isinstance(snap_config['categories_exp'], int) else '', + value=cat_exp_val, max_width=max_width, only_int=True, label=self.i18n['snap.config.categories_exp'], @@ -450,14 +451,14 @@ class SnapManager(SoftwareManager, SettingsController): yield SettingsView(self, panel) def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: - snap_config = self.configman.get_config() + config_ = self.configman.get_config() form = component.get_component_by_idx(0, FormComponent) - snap_config['install_channel'] = form.get_single_select_component('snap_install_channel').get_selected() - snap_config['categories_exp'] = form.get_text_input('snap_cat_exp').get_int_value() + config_['install_channel'] = form.get_component('snap_install_channel', SingleSelectComponent).get_selected() + config_['categories_exp'] = form.get_component('snap_cat_exp', TextInputComponent).get_int_value() try: - self.configman.save_config(snap_config) + self.configman.save_config(config_) return True, None except: return False, [traceback.format_exc()] diff --git a/bauh/gems/web/controller.py b/bauh/gems/web/controller.py index 5113abad..c1fc6135 100644 --- a/bauh/gems/web/controller.py +++ b/bauh/gems/web/controller.py @@ -25,7 +25,7 @@ from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction, Packa PackageHistory, \ SuggestionPriority, PackageStatus from bauh.api.abstract.view import MessageType, MultipleSelectComponent, InputOption, SingleSelectComponent, \ - SelectViewType, TextInputComponent, FormComponent, FileChooserComponent, ViewComponent, PanelComponent + SelectViewType, TextInputComponent, FormComponent, FileChooserComponent, PanelComponent from bauh.api.paths import DESKTOP_ENTRIES_DIR from bauh.commons import resource from bauh.commons.boot import CreateConfigFile @@ -1152,27 +1152,27 @@ class WebApplicationManager(SoftwareManager, SettingsController): yield SettingsView(self, PanelComponent([form_env])) def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: - web_config = self.configman.get_config() + config_ = self.configman.get_config() - form_env = component.get_component_by_idx(0, FormComponent) + form = component.get_component_by_idx(0, FormComponent) - electron_version = str(form_env.get_text_input('electron_branch').get_value()).strip() - web_config['environment']['electron']['version'] = electron_version + electron_version = str(form.get_component('electron_branch', TextInputComponent).get_value()).strip() + config_['environment']['electron']['version'] = electron_version - if len(web_config['environment']['electron']['version']) == 0: - web_config['environment']['electron']['version'] = None + if len(config_['environment']['electron']['version']) == 0: + config_['environment']['electron']['version'] = None - system_nativefier = form_env.get_single_select_component('nativefier').get_selected() + system_nativefier = form.get_component('nativefier', SingleSelectComponent).get_selected() if system_nativefier and not nativefier.is_available(): return False, [self.i18n['web.settings.env.nativefier.system.not_installed'].format('Nativefier')] - web_config['environment']['system'] = system_nativefier - web_config['environment']['cache_exp'] = form_env.get_text_input('web_cache_exp').get_int_value() - web_config['suggestions']['cache_exp'] = form_env.get_text_input('web_sugs_exp').get_int_value() + config_['environment']['system'] = system_nativefier + config_['environment']['cache_exp'] = form.get_component('web_cache_exp', TextInputComponent).get_int_value() + config_['suggestions']['cache_exp'] = form.get_component('web_sugs_exp', TextInputComponent).get_int_value() try: - self.configman.save_config(web_config) + self.configman.save_config(config_) return True, None except: return False, [traceback.format_exc()] diff --git a/bauh/view/core/settings.py b/bauh/view/core/settings.py index 193a694e..1740038c 100644 --- a/bauh/view/core/settings.py +++ b/bauh/view/core/settings.py @@ -359,104 +359,131 @@ class GenericSettingsManager(SettingsController): # general gen_form = general.get_component_by_idx(0, FormComponent) - locale = gen_form.get_single_select_component('locale').get_selected() + locale = gen_form.get_component('locale', SingleSelectComponent).get_selected() if locale != self.i18n.current_key: core_config['locale'] = locale - core_config['system']['notifications'] = gen_form.get_single_select_component('sys_notify').get_selected() - core_config['suggestions']['enabled'] = gen_form.get_single_select_component('sugs_enabled').get_selected() - core_config['store_root_password'] = gen_form.get_single_select_component('store_pwd').get_selected() + notifications = gen_form.get_component('sys_notify', SingleSelectComponent).get_selected() + core_config['system']['notifications'] = notifications - sugs_by_type = gen_form.get_text_input('sugs_by_type').get_int_value() + suggestions = gen_form.get_component('sugs_enabled', SingleSelectComponent).get_selected() + core_config['suggestions']['enabled'] = suggestions + + store_root_pwd = gen_form.get_component('store_pwd', SingleSelectComponent).get_selected() + core_config['store_root_password'] = store_root_pwd + + sugs_by_type = gen_form.get_component('sugs_by_type', TextInputComponent).get_int_value() core_config['suggestions']['by_type'] = sugs_by_type - core_config['updates']['ask_for_reboot'] = gen_form.get_single_select_component('ask_for_reboot').get_selected() - core_config['boot']['load_apps'] = gen_form.get_single_select_component('boot.load_apps').get_selected() + ask_reboot = gen_form.get_component('ask_for_reboot', SingleSelectComponent).get_selected() + core_config['updates']['ask_for_reboot'] = ask_reboot + + load_apps = gen_form.get_component('boot.load_apps', SingleSelectComponent).get_selected() + core_config['boot']['load_apps'] = load_apps # advanced adv_form = advanced.get_component_by_idx(0, FormComponent) - download_mthreaded = adv_form.get_single_select_component('down_mthread').get_selected() + download_mthreaded = adv_form.get_component('down_mthread', SingleSelectComponent).get_selected() core_config['download']['multithreaded'] = download_mthreaded - mthread_client = adv_form.get_single_select_component('mthread_client').get_selected() + mthread_client = adv_form.get_component('mthread_client', SingleSelectComponent).get_selected() core_config['download']['multithreaded_client'] = mthread_client if isinstance(self.file_downloader, AdaptableFileDownloader): self.file_downloader.multithread_client = mthread_client self.file_downloader.multithread_enabled = download_mthreaded - single_dep_check = adv_form.get_single_select_component('dep_check').get_selected() + single_dep_check = adv_form.get_component('dep_check', SingleSelectComponent).get_selected() core_config['system']['single_dependency_checking'] = single_dep_check - data_exp = adv_form.get_text_input('data_exp').get_int_value() + data_exp = adv_form.get_component('data_exp', TextInputComponent).get_int_value() core_config['memory_cache']['data_expiration'] = data_exp - icon_exp = adv_form.get_text_input('icon_exp').get_int_value() + icon_exp = adv_form.get_component('icon_exp', TextInputComponent).get_int_value() core_config['memory_cache']['icon_expiration'] = icon_exp - trim_after_upgrade = adv_form.get_single_select_component('trim_after_upgrade').get_selected() + trim_after_upgrade = adv_form.get_component('trim_after_upgrade', SingleSelectComponent).get_selected() core_config['disk']['trim']['after_upgrade'] = trim_after_upgrade # backup if backup: bkp_form = backup.get_component_by_idx(0, FormComponent) - core_config['backup']['enabled'] = bkp_form.get_single_select_component('enabled').get_selected() - core_config['backup']['mode'] = bkp_form.get_single_select_component('mode').get_selected() - core_config['backup']['type'] = bkp_form.get_single_select_component('type').get_selected() - core_config['backup']['remove_method'] = bkp_form.get_single_select_component('remove_method').get_selected() - core_config['backup']['install'] = bkp_form.get_single_select_component('install').get_selected() - core_config['backup']['uninstall'] = bkp_form.get_single_select_component('uninstall').get_selected() - core_config['backup']['upgrade'] = bkp_form.get_single_select_component('upgrade').get_selected() - core_config['backup']['downgrade'] = bkp_form.get_single_select_component('downgrade').get_selected() + core_config['backup']['enabled'] = bkp_form.get_component('enabled', SingleSelectComponent).get_selected() + core_config['backup']['mode'] = bkp_form.get_component('mode', SingleSelectComponent).get_selected() + core_config['backup']['type'] = bkp_form.get_component('type', SingleSelectComponent).get_selected() + core_config['backup']['install'] = bkp_form.get_component('install', SingleSelectComponent).get_selected() + core_config['backup']['upgrade'] = bkp_form.get_component('upgrade', SingleSelectComponent).get_selected() + + bkp_remove_method = bkp_form.get_component('remove_method', SingleSelectComponent).get_selected() + core_config['backup']['remove_method'] = bkp_remove_method + + bkp_uninstall = bkp_form.get_component('uninstall', SingleSelectComponent).get_selected() + core_config['backup']['uninstall'] = bkp_uninstall + + bkp_downgrade = bkp_form.get_component('downgrade', SingleSelectComponent).get_selected() + core_config['backup']['downgrade'] = bkp_downgrade # tray tray_form = tray.get_component_by_idx(0, FormComponent) - core_config['updates']['check_interval'] = tray_form.get_text_input('updates_interval').get_int_value() - def_icon_path = tray_form.get_component('def_icon').file_path + updates_interval = tray_form.get_component('updates_interval', TextInputComponent).get_int_value() + core_config['updates']['check_interval'] = updates_interval + + def_icon_path = tray_form.get_component('def_icon', FileChooserComponent).file_path core_config['ui']['tray']['default_icon'] = def_icon_path if def_icon_path else None - up_icon_path = tray_form.get_component('up_icon').file_path + up_icon_path = tray_form.get_component('up_icon', FileChooserComponent).file_path core_config['ui']['tray']['updates_icon'] = up_icon_path if up_icon_path else None # ui ui_form = ui.get_component_by_idx(0, FormComponent) - core_config['download']['icons'] = ui_form.get_single_select_component('down_icons').get_selected() - core_config['ui']['hdpi'] = ui_form.get_single_select_component('hdpi').get_selected() + core_config['download']['icons'] = ui_form.get_component('down_icons', SingleSelectComponent).get_selected() + core_config['ui']['hdpi'] = ui_form.get_component('hdpi', SingleSelectComponent).get_selected() previous_autoscale = core_config['ui']['auto_scale'] - core_config['ui']['auto_scale'] = ui_form.get_single_select_component('auto_scale').get_selected() + core_config['ui']['auto_scale'] = ui_form.get_component('auto_scale', SingleSelectComponent).get_selected() if previous_autoscale and not core_config['ui']['auto_scale']: self.logger.info("Deleting environment variable QT_AUTO_SCREEN_SCALE_FACTOR") del os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] core_config['ui']['scale_factor'] = ui_form.get_component('scalef').value / 100 - core_config['ui']['table']['max_displayed'] = ui_form.get_text_input('table_max').get_int_value() - style = ui_form.get_single_select_component('style').get_selected() + table_max = ui_form.get_component('table_max', TextInputComponent).get_int_value() + core_config['ui']['table']['max_displayed'] = table_max + + style = ui_form.get_component('style', SingleSelectComponent).get_selected() + + if core_config['ui']['qt_style']: + cur_style = core_config['ui']['qt_style'] + else: + cur_style = QApplication.instance().property('qt_style') - cur_style = core_config['ui']['qt_style'] if core_config['ui']['qt_style'] else QApplication.instance().property('qt_style') if style != cur_style: core_config['ui']['qt_style'] = style QApplication.instance().setProperty('qt_style', style) - core_config['ui']['system_theme'] = ui_form.get_single_select_component('system_theme').get_selected() + core_config['ui']['system_theme'] = ui_form.get_component('system_theme', SingleSelectComponent).get_selected() # gems - checked_gems = gems_panel.components[1].get_component('gems').get_selected_values() + checked_gems = gems_panel.components[1].get_component('gems', MultipleSelectComponent).get_selected_values() for man in self.managers: modname = man.__module__.split('.')[-2] enabled = modname in checked_gems man.set_enabled(enabled) - core_config['gems'] = None if core_config['gems'] is None and len(checked_gems) == len(self.managers) else checked_gems + if core_config['gems'] is None and len(checked_gems) == len(self.managers): + sel_gems = None + else: + sel_gems = checked_gems + + core_config['gems'] = sel_gems try: self.configman.save_config(core_config)