diff options
Diffstat (limited to 'preferences_dialog.py')
-rw-r--r-- | preferences_dialog.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/preferences_dialog.py b/preferences_dialog.py new file mode 100644 index 0000000..df192ba --- /dev/null +++ b/preferences_dialog.py @@ -0,0 +1,93 @@ +import sys +from PyQt5.QtWidgets import QApplication, QDialog, QFileDialog, QFormLayout, QHBoxLayout, QLineEdit, QPushButton, QTabWidget, QVBoxLayout, QWidget +from config import Config + +class PreferencesDialog(QDialog): + """ + Implemented to set configuration options in the program + """ + def __init__(self): + super().__init__() + + # class globals + self.config = Config() + + self.initializeUI() + + def initializeUI(self): + self.resize(500, 320) + self.setWindowTitle("Preferences") + self.displayWidgets() + self.exec() + + def displayWidgets(self): + # TODO make this a scrollable window + # FIXME could use some work on sizing + main_layout = QVBoxLayout() + tab_bar = QTabWidget(self) + paths_tab = self.pathsTabLayout() + + tab_bar.addTab(paths_tab, "Paths") + main_layout.addWidget(tab_bar) + main_layout.addStretch() + + buttons_hbox = QHBoxLayout() + buttons_hbox.addStretch() + + close_button = QPushButton("Close", self) + close_button.clicked.connect(self.close) + buttons_hbox.addWidget(close_button) + + apply_button = QPushButton("Apply", self) + apply_button.clicked.connect(self.apply) + buttons_hbox.addWidget(apply_button) + + main_layout.addLayout(buttons_hbox) + self.setLayout(main_layout) + + def pathsTabLayout(self): + output = QWidget() + output_layout = QFormLayout() + + # Dialog for setting the database file path + db_path_hbox = QHBoxLayout() + self.db_path_edit = QLineEdit() + if "paths" in self.config.config: + self.db_path_edit.setText(self.config.config["paths"]["db_path"]) + db_path_hbox.addWidget(self.db_path_edit) + db_path_button = QPushButton("...") + db_path_button.setMaximumWidth(25) + db_path_button.clicked.connect(self.dbPathDialog) + db_path_hbox.addWidget(db_path_button) + output_layout.addRow("Database File:", db_path_hbox) + + output.setLayout(output_layout) + return output + + def dbPathDialog(self): + file_dialog = QFileDialog(self) + # TODO create filter to only allow selecting .db files + new_path = file_dialog.getOpenFileName(self, "Open File") + + if new_path[0]: + self.db_path_edit.setText(new_path[0]) + + def apply(self): + """ + Update the configuration in the config file + """ + # Save paths + if "paths" in self.config.config: + try: + with open(self.db_path_edit.text(), 'a'): + self.config.config["paths"]["db_path"] = self.db_path_edit.text() + except: + print("Warning: db_path '{}' does not exist; skipping".format(self.db_path_edit.text())) + + self.config.updateConfig() + + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = PreferencesDialog() + sys.exit(app.exec_()) |