feat: add option to change shortcuts, set return modes

This commit is contained in:
WorldTeacher
2024-09-30 11:21:26 +02:00
parent 114d6fb1ca
commit 4164da4f55
7 changed files with 303 additions and 191 deletions

View File

@@ -6,26 +6,23 @@ from omegaconf import OmegaConf
import os
class Settings(QtWidgets.QDialog, Ui_Dialog):
def __init__(self):
super(Settings, self).__init__()
self.setupUi(self)
self.setWindowTitle("Einstellungen")
self.setWindowIcon(Icon("settings").icon)
#variables
self.originalSettings = config
self.shortcuts = config.shortcuts
self.settingschanged = False
# lineedits
self.institution_name.textChanged.connect(self.enableButtonBox)
self.default_loan_duration.textChanged.connect(self.enableButtonBox)
self.database_backupLocation.textChanged.connect(self.enableButtonBox)
self.database_path.textChanged.connect(self.enableButtonBox)
self.database_name.textChanged.connect(self.enableButtonBox)
self.database_name.textChanged.connect(self.enableButtonBox)
self.delete_inactive_user_duration.textChanged.connect(self.enableButtonBox)
self.report_path.textChanged.connect(self.enableButtonBox)
self.report_day.currentIndexChanged.connect(self.enableButtonBox)
self.check_generate_report.stateChanged.connect(self.enableButtonBox)
self.populateShortcuts()
# buttonbox
self.buttonBox.accepted.connect(self.saveSettings)
@@ -48,10 +45,42 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.btn_select_database_path.clicked.connect(self.selectDatabasePath)
self.btn_select_database_name.clicked.connect(self.selectDatabaseName)
self.btn_select_report_path.clicked.connect(self.selectReportPath)
#variables
self.returnMode.clicked.connect(self.returnModeSetting)
#other
#stretch columns
self.shortcutchanger.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeMode.Stretch)
def returnModeSetting(self):
currentstate = self.returnMode.isChecked()
if self.originalSettings.advanced_refresh != currentstate:
self.enableButtonBox()
def populateShortcuts(self):
for shortcut in self.shortcuts:
name = shortcut["name"]
default = shortcut["default"]
current = shortcut["current"]
self.addShortcut(name, default, current)
#assume the shortcuts will be changed
self.settingschanged = True
self.enableButtonBox()
def addShortcut(self, name, default, current):
#remove all pages from shortcutchanger
#add new page with name, default and current
self.shortcutchanger.insertRow(0)
self.shortcutchanger.setItem(0, 0, QtWidgets.QTableWidgetItem(name))
self.shortcutchanger.setItem(0, 1, QtWidgets.QTableWidgetItem(default))
#add keysequenceedit
keysequenceedit = QtWidgets.QKeySequenceEdit()
keysequenceedit.setKeySequence(current)
self.shortcutchanger.setCellWidget(0, 2, keysequenceedit)
self.settingschanged = False
def enableButtonBox(self):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
@@ -73,7 +102,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
def selectReportPath(self):
reportPath = QtWidgets.QFileDialog.getExistingDirectory(
self, "Select Report Path", self.originalSettings.report.path
@@ -85,6 +115,9 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
def selectDatabasePath(self):
databasePath = QtWidgets.QFileDialog.getExistingDirectory(
@@ -97,6 +130,8 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
def selectDatabaseName(self):
# filepicker with filter to select only .db files if a file is selected, set name to the lineedit and set database_path
@@ -114,6 +149,22 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
True
)
self.settingschanged = False
def getShortcuts(self):
shortcuts = []
for row in range(self.shortcutchanger.rowCount()):
name = self.shortcutchanger.item(row, 0).text()
default = self.shortcutchanger.item(row, 1).text()
current = self.shortcutchanger.cellWidget(row, 2).keySequence().toString()
shortcuts.append(
{
"name": name,
"default": default,
"current": current,
}
)
return shortcuts
def saveSettings(self):
# save settings to config file
@@ -126,6 +177,12 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
report_day = self.report_day.currentIndex()
report_generate = self.check_generate_report.isChecked()
report_path = self.report_path.text()
refresh_state = self.returnMode.isChecked()
shortcuts = self.getShortcuts()
#shortcuts to omegaconf.DictConfig
shortcuts = OmegaConf.create(shortcuts)
if database_path != self.originalSettings.database.path :
os.makedirs(database_path, exist_ok=True)
self.restart()
@@ -136,9 +193,11 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
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
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
# save the new settings
config.save()
self.settingschanged = True
@@ -176,6 +235,7 @@ class Settings(QtWidgets.QDialog, Ui_Dialog):
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)
pass