From 3190364a72cbce37e328f1d0ff3f92cb7d83100e Mon Sep 17 00:00:00 2001 From: lorow Date: Fri, 6 Oct 2023 00:33:37 +0200 Subject: [PATCH] Add config reset, clean-up modules --- EyeTrackApp/settings/BaseSettings.py | 28 ++++++++++++++++++- .../AdvancedTrackingAlgoSettingsModule.py | 4 +-- EyeTrackApp/settings/modules/BaseModule.py | 10 ++----- .../settings/modules/BlinkAlgoModule.py | 4 +-- .../settings/modules/GeneralSettingsModule.py | 4 +-- .../settings/modules/OSCSettingsModule.py | 4 +-- .../settings/modules/OneEuroSettingsModule.py | 4 +-- .../modules/TrackingAlgorithmModule.py | 4 +-- 8 files changed, 42 insertions(+), 20 deletions(-) diff --git a/EyeTrackApp/settings/BaseSettings.py b/EyeTrackApp/settings/BaseSettings.py index 9e43651..e08045f 100644 --- a/EyeTrackApp/settings/BaseSettings.py +++ b/EyeTrackApp/settings/BaseSettings.py @@ -15,6 +15,7 @@ class BaseSettingsWidget: settings_modules: Iterable, ): self.gui_general_settings_layout = f"-GENERALSETTINGSLAYOUT{widget_id}-" + self.reset_button_key = f"RESET_SETTINGS{widget_id}" self.is_saving = False self.main_config = main_config self.config = main_config.settings @@ -35,6 +36,7 @@ class BaseSettingsWidget: background_color="#424042", ), ], + [sg.Button("Reset settings to default", key=self.reset_button_key)], ] self.cancellation_event = ( @@ -82,12 +84,13 @@ class BaseSettingsWidget: if errors: self._handle_errors(errors) + self.handle_events(event, window) + def _initialize_modules(self, settings_modules, widget_id): return [ module( config=self.config, settings=self.main_config, - settings_base_class=EyeTrackSettingsConfig, widget_id=widget_id, ) for module in settings_modules @@ -95,3 +98,26 @@ class BaseSettingsWidget: def get_layout(self) -> Iterable: return self.widget_layout + + def handle_events(self, event, window): + if event == "__TIMEOUT__": + return + + if event == self.reset_button_key: + self.reset_config(window) + + def reset_config(self, window): + + default_values = {} + base_settings = EyeTrackSettingsConfig() + + print(f"\033[92m[INFO] Resetting config to defaults\033[0m") + for module in self.initialized_modules: + for key in module.get_key_for_panel_defaults(): + default_val = getattr(base_settings, key) + widget_key = getattr(module, key) + default_values[key] = default_val + window[widget_key].update(default_val) + print(f"\033[92m[INFO] Config reset, saving\033[0m") + + self._update_and_save_config(default_values) diff --git a/EyeTrackApp/settings/modules/AdvancedTrackingAlgoSettingsModule.py b/EyeTrackApp/settings/modules/AdvancedTrackingAlgoSettingsModule.py index b818582..7272ec2 100644 --- a/EyeTrackApp/settings/modules/AdvancedTrackingAlgoSettingsModule.py +++ b/EyeTrackApp/settings/modules/AdvancedTrackingAlgoSettingsModule.py @@ -15,8 +15,8 @@ class AdvancedTrackingAlgoSettingsValidationModel(BaseValidationModel): class AdvancedTrackingAlgoSettingsModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.validation_model = AdvancedTrackingAlgoSettingsValidationModel self.gui_blob_maxsize = f"-BLOBMAXSIZE{widget_id}-" diff --git a/EyeTrackApp/settings/modules/BaseModule.py b/EyeTrackApp/settings/modules/BaseModule.py index b796aab..60c2046 100644 --- a/EyeTrackApp/settings/modules/BaseModule.py +++ b/EyeTrackApp/settings/modules/BaseModule.py @@ -24,10 +24,9 @@ class ValidationResult(NamedTuple): class BaseSettingsModule: - def __init__(self, config: EyeTrackSettingsConfig, settings_base_class, widget_id, **kwargs): + def __init__(self, config: EyeTrackSettingsConfig, widget_id, **kwargs): self.validation_model: BaseValidationModel = BaseValidationModel # noqa self.config = config - self.settings_base_class = settings_base_class self.widget_id = widget_id def get_validation_model(self): @@ -66,8 +65,5 @@ class BaseSettingsModule: def get_layout(self) -> Iterable: raise NotImplementedError - def get_defaults(self) -> dict: - defaults = {} - for field in self.validation_model.schema().keys(): - defaults[field] = getattr(self.settings_base_class, field) - return defaults + def get_key_for_panel_defaults(self) -> dict: + return self.validation_model.schema().get("properties").keys() \ No newline at end of file diff --git a/EyeTrackApp/settings/modules/BlinkAlgoModule.py b/EyeTrackApp/settings/modules/BlinkAlgoModule.py index 396b7b2..b9eb6fe 100644 --- a/EyeTrackApp/settings/modules/BlinkAlgoModule.py +++ b/EyeTrackApp/settings/modules/BlinkAlgoModule.py @@ -15,8 +15,8 @@ class BlinkAlgoSettingsValidationModel(BaseValidationModel): class BlinkAlgoSettingsModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.validation_model = BlinkAlgoSettingsValidationModel self.gui_IBO = f"-IBO{widget_id}-" diff --git a/EyeTrackApp/settings/modules/GeneralSettingsModule.py b/EyeTrackApp/settings/modules/GeneralSettingsModule.py index f140a6c..8a33cb8 100644 --- a/EyeTrackApp/settings/modules/GeneralSettingsModule.py +++ b/EyeTrackApp/settings/modules/GeneralSettingsModule.py @@ -13,8 +13,8 @@ class GeneralSettingsValidationModel(BaseValidationModel): class GeneralSettingsModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.validation_model = GeneralSettingsValidationModel self.gui_flip_x_axis_left = f"-FLIPXAXISLEFT{widget_id}-" self.gui_flip_x_axis_right = f"-FLIPXAXISRIGHT{widget_id}-" diff --git a/EyeTrackApp/settings/modules/OSCSettingsModule.py b/EyeTrackApp/settings/modules/OSCSettingsModule.py index c50c16b..fd5e65d 100644 --- a/EyeTrackApp/settings/modules/OSCSettingsModule.py +++ b/EyeTrackApp/settings/modules/OSCSettingsModule.py @@ -13,8 +13,8 @@ class OSCValidationModel(BaseValidationModel): class OSCSettingsModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.validation_model = OSCValidationModel self.gui_osc_address = f"-OSCADDRESS{widget_id}-" self.gui_osc_port = f"-OSCPORT{widget_id}-" diff --git a/EyeTrackApp/settings/modules/OneEuroSettingsModule.py b/EyeTrackApp/settings/modules/OneEuroSettingsModule.py index b20f39c..a1872c3 100644 --- a/EyeTrackApp/settings/modules/OneEuroSettingsModule.py +++ b/EyeTrackApp/settings/modules/OneEuroSettingsModule.py @@ -9,8 +9,8 @@ class OneEuroFilterValidationModel(BaseValidationModel): class OneEuroSettingsModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.gui_speed_coefficient = f"-SPEEDCOEFFICIENT{widget_id}-" self.gui_min_cutoff = f"-MINCUTOFF{widget_id}-" self.validation_model = OneEuroFilterValidationModel diff --git a/EyeTrackApp/settings/modules/TrackingAlgorithmModule.py b/EyeTrackApp/settings/modules/TrackingAlgorithmModule.py index fc4a4fa..308d79d 100644 --- a/EyeTrackApp/settings/modules/TrackingAlgorithmModule.py +++ b/EyeTrackApp/settings/modules/TrackingAlgorithmModule.py @@ -20,8 +20,8 @@ class TrackingAlgorithmValidationModel(BaseValidationModel): class TrackingAlgorithmModule(BaseSettingsModule): - def __init__(self, config, widget_id, settings_base_class, **kwargs): - super().__init__(config, widget_id, settings_base_class, **kwargs) + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) self.algo_count = ["1", "2", "3", "4", "5", "6"] self.validation_model = TrackingAlgorithmValidationModel self.gui_BLOB = f"-BLOBFALLBACK{widget_id}-"