summaryrefslogtreecommitdiff
path: root/preferences_dialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'preferences_dialog.py')
-rw-r--r--preferences_dialog.py93
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_())