diff --git a/config/config.py b/config/config.py index a3c62bb..8741d83 100644 --- a/config/config.py +++ b/config/config.py @@ -140,7 +140,15 @@ class Config: self._config[option] = True else: raise KeyError(f"Option {option} not found in configuration") - + + + def to_Omegaconf(self): + return omegaconf.OmegaConf.create(self._config) + + def updateValue(self, key:str, value): + if self._config is None: + raise RuntimeError("Configuration not loaded") + self._config[key] = value if __name__ == "__main__": cfg = Config("config/settings.yaml") #print(cfg.database.path) diff --git a/src/ui/settings.py b/src/ui/settings.py index c3b77a6..8f74940 100644 --- a/src/ui/settings.py +++ b/src/ui/settings.py @@ -5,12 +5,6 @@ from src import config from omegaconf import OmegaConf import os - - - - - - class Settings(QtWidgets.QDialog, Ui_Dialog): def __init__(self): super(Settings, self).__init__() @@ -18,26 +12,20 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.setWindowTitle("Einstellungen") self.setWindowIcon(Icon("settings").icon) #variables - self.originalSettings = config + self.originalSettings = config.to_Omegaconf() + self.changedSettings = config.to_Omegaconf() self.shortcuts = config.shortcuts self.settingschanged = False + self.restart_required = False - self.populateShortcuts() # buttonbox self.buttonBox.accepted.connect(self.saveSettings) self.buttonBox.rejected.connect(self.close) self.loadSettings() - self.buttonBox.button( - QtWidgets.QDialogButtonBox.StandardButton.Discard - ).clicked.connect(self.DiscardSettings) - self.buttonBox.button( - QtWidgets.QDialogButtonBox.StandardButton.Discard - ).setEnabled(False) - self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( - False - ) + + self.populateShortcuts() # buttons self.btn_select_database_backupLocation.clicked.connect( self.selectBackupLocation @@ -63,9 +51,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): current = shortcut["current"] self.addShortcut(name, default, current) #assume the shortcuts will be changed - self.settingschanged = True - self.enableButtonBox() - + self.settingschanged = True def addShortcut(self, name, default, current): #remove all pages from shortcutchanger #add new page with name, default and current @@ -78,17 +64,6 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): keysequenceedit.setKeySequence(current) self.shortcutchanger.setCellWidget(0, 2, keysequenceedit) - - - - def enableButtonBox(self): - self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( - True - ) - self.buttonBox.button( - QtWidgets.QDialogButtonBox.StandardButton.Discard - ).setEnabled(True) - def selectBackupLocation(self): backupLocation = QtWidgets.QFileDialog.getExistingDirectory( self, @@ -102,7 +77,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( True ) - self.settingschanged = False + self.settingschanged = True def selectReportPath(self): reportPath = QtWidgets.QFileDialog.getExistingDirectory( @@ -115,7 +90,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( True ) - self.settingschanged = False + self.settingschanged = True @@ -130,7 +105,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( True ) - self.settingschanged = False + self.settingschanged = True + self.restart_required = True def selectDatabaseName(self): @@ -141,7 +117,6 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.originalSettings.database.path, "Database Files (*.db)", ) - self.database_name.setText(databaseName[0]) self.database_path.setText(databaseName[0].rsplit("/", 1)[0]) self.buttonBox.button( QtWidgets.QDialogButtonBox.StandardButton.Discard @@ -149,7 +124,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled( True ) - self.settingschanged = False + self.settingschanged = True + self.restart_required = True def getShortcuts(self): shortcuts = [] @@ -185,22 +161,58 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): if database_path != self.originalSettings.database.path : os.makedirs(database_path, exist_ok=True) - self.restart() - # overwrite the original settings - self.originalSettings.institution_name = institution_name - self.originalSettings.loan_duration = default_loan_duration - self.originalSettings.database.backupLocation = database_backupLocation - self.originalSettings.database.path = database_path - self.originalSettings.database.name = database_name - self.originalSettings.delete_inactive_user_duration = delete_inactive_users - self.originalSettings.report.report_day = report_day -1 - self.originalSettings.report.path = report_path - self.originalSettings.report.generate_report = report_generate - self.originalSettings.advanced_refresh = refresh_state - self.originalSettings.shortcuts = shortcuts + self.restart_required = True + if shortcuts != self.originalSettings.shortcuts: + self.restart_required = True + + + + # create new Settings + self.changedSettings.institution_name = institution_name + self.changedSettings.loan_duration = default_loan_duration + self.changedSettings.database.backupLocation = database_backupLocation + self.changedSettings.database.path = database_path + self.changedSettings.database.name = database_name + self.changedSettings.delete_inactive_user_duration = delete_inactive_users + self.changedSettings.report.report_day = report_day + self.changedSettings.report.path = report_path + self.changedSettings.report.generate_report = report_generate + self.changedSettings.advanced_refresh = refresh_state + self.changedSettings.shortcuts = shortcuts + + changed = self.changedSettings + original = self.originalSettings + if changed == original: + print("No changes") + self.settingschanged = False + self.restart_required = False + else: + print("Changes detected") + self.settingschanged = True + if original.database.path != changed.database.path or original.shortcuts != changed.shortcuts: + self.restart_required = True + + + # save the new settings - config.save() - self.settingschanged = True + if self.settingschanged: + # save the settings + config.updateValue("institution_name", self.changedSettings.institution_name) + config.updateValue("default_loan_duration", self.changedSettings.loan_duration) + config.updateValue("database.backupLocation", self.changedSettings.database.backupLocation) + config.updateValue("database.path", self.changedSettings.database.path) + config.updateValue("database.name", self.changedSettings.database.name) + config.updateValue("delete_inactive_user_duration", self.changedSettings.delete_inactive_user_duration) + config.updateValue("report.report_day", self.changedSettings.report.report_day) + config.updateValue("report.generate_report", self.changedSettings.report.generate_report) + config.updateValue("report.path", self.changedSettings.report.path) + config.updateValue("advanced_refresh", self.changedSettings.advanced_refresh) + config.updateValue("shortcuts", self.changedSettings.shortcuts) + self.originalSettings = self.changedSettings + config.save() + + if self.restart_required: + self.restart() self.close() def restart(self): @@ -208,34 +220,35 @@ class Settings(QtWidgets.QDialog, Ui_Dialog): dialog.setIcon(QtWidgets.QMessageBox.Icon.Information) dialog.setText("Neustart erforderlich") dialog.setInformativeText( - "Das Programm muss neu gestartet werden, um die neue Datenbank zu verwenden." + "Das Programm muss neu gestartet werden, um die Änderungen zu übernehmen." ) dialog.setStandardButtons(QtWidgets.QMessageBox.StandardButton.Ok) dialog.setDefaultButton(QtWidgets.QMessageBox.StandardButton.Ok) dialog.setWindowTitle("Neustart erforderlich") + dialog.setWindowIcon(Icon("restart").icon) dialog.exec() def DiscardSettings(self): self.loadSettings() - pass - + self.restart_required = False + self.settingschanged = False def loadSettings(self): - self.institution_name.setText(self.originalSettings.institution_name) + self.institution_name.setText(config.institution_name) self.default_loan_duration.setValue( - int(self.originalSettings.loan_duration) + int(config.loan_duration) ) self.delete_inactive_user_duration.setValue( - int(self.originalSettings.delete_inactive_user_duration) + int(config.delete_inactive_user_duration) ) self.database_backupLocation.setText( - self.originalSettings.database.backupLocation + config.database.backupLocation ) - self.database_path.setText(self.originalSettings.database.path) - self.database_name.setText(self.originalSettings.database.name) - self.report_day.setCurrentIndex(self.originalSettings.report.report_day -1) - self.check_generate_report.setChecked(self.originalSettings.report.generate_report) - self.report_path.setText(self.originalSettings.report.path) - self.returnMode.setChecked(self.originalSettings.advanced_refresh) + self.database_path.setText(config.database.path) + self.database_name.setText(config.database.name) + self.report_day.setCurrentIndex(config.report.report_day) + self.check_generate_report.setChecked(config.report.generate_report) + self.report_path.setText(config.report.path) + self.returnMode.setChecked(config.advanced_refresh) pass