From d7b2f745a29eafe70637a0eb835ca51d07cbff9d Mon Sep 17 00:00:00 2001 From: Agnibho Mondal Date: Wed, 13 Sep 2023 00:48:17 +0530 Subject: [PATCH] GUI Configuration Editor --- setting.py | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++- window.py | 15 ++++++-- 2 files changed, 119 insertions(+), 6 deletions(-) diff --git a/setting.py b/setting.py index d2df6b1..b68b42d 100644 --- a/setting.py +++ b/setting.py @@ -5,11 +5,117 @@ # MedScript is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with MedScript. If not, see . -from PyQt6.QtWidgets import QWidget, QMainWindow, QFormLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QStatusBar, QMessageBox +from PyQt6.QtWidgets import QWidget, QMainWindow, QFormLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QStatusBar, QMessageBox, QFileDialog from PyQt6.QtGui import QIcon from PyQt6.QtCore import pyqtSignal +from copy import deepcopy import os, json -from config import config +from config import config, config_file + +class EditConfiguration(QMainWindow): + + def select_directory(self): + d=QFileDialog.getExistingDirectory(self, "Select Directory", config["data_directory"]) + if(d): + self.input_directory.setText(d) + def select_prescriber(self): + f=QFileDialog.getOpenFileName(self, "Select Prescriber", config["prescriber_directory"], "JSON (*.json);; All Files (*)")[0] + if(f): + self.input_prescriber.setText(f) + def select_key(self): + f=QFileDialog.getOpenFileName(self, "Select Private Key", os.path.expanduser("~"), "PEM (*.pem);; All Files (*)")[0] + if(f): + self.input_prescriber.setText(f) + def select_certificate(self): + f=QFileDialog.getOpenFileName(self, "Select Certificate", os.path.expanduser("~"), "PEM (*.pem);; All Files (*)")[0] + if(f): + self.input_certificate.setText(f) + + def load(self): + try: + self.file=self.config["filename"] + self.statusbar.showMessage(self.file) + self.input_directory.setText(self.config["data_directory"]) + self.input_prescriber.setText(self.config["prescriber"]) + self.input_newline.setChecked(bool(self.config["preset_newline"])) + self.input_delimiter.setCurrentText(self.config["preset_delimiter"]) + self.input_key.setText(self.config["private_key"]) + self.input_certificate.setText(self.config["certificate"]) + except Exception as e: + QMessageBox.critical(self,"Failed to load", "Failed to load the data into the application.") + raise(e) + + def save(self): + try: + self.config["data_directory"]=self.input_directory.text() + self.config["prescriber"]=self.input_prescriber.text() + self.config["preset_newline"]=self.input_newline.isChecked() + self.config["preset_delimiter"]=self.input_delimiter.currentText() + self.config["private_key"]=self.input_key.text() + self.config["certificate"]=self.input_certificate.text() + with open(config_file, "w") as f: + f.write(json.dumps(self.config, indent=4)) + QMessageBox.information(self,"Saved", "Configuration saved. Please restart MedScript.") + self.hide() + except Exception as e: + QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.") + raise(e) + + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.config=deepcopy(config) + + self.setWindowTitle("MedScript") + self.setGeometry(200, 200, 300, 200) + + widget=QWidget(self) + layout=QFormLayout(widget) + self.input_directory=QLineEdit(self) + btn_directory=QPushButton("...", self) + btn_directory.clicked.connect(self.select_directory) + layout_directory=QHBoxLayout() + layout_directory.addWidget(self.input_directory) + layout_directory.addWidget(btn_directory) + layout.addRow("Data Directory", layout_directory) + self.input_prescriber=QLineEdit(self) + btn_prescriber=QPushButton("...", self) + btn_prescriber.clicked.connect(self.select_prescriber) + layout_prescriber=QHBoxLayout() + layout_prescriber.addWidget(self.input_prescriber) + layout_prescriber.addWidget(btn_prescriber) + layout.addRow("Prescriber", layout_prescriber) + self.input_newline=QCheckBox("Add newline after preset", self) + layout.addRow("Preset Newline", self.input_newline) + self.input_delimiter=QComboBox(self) + self.input_delimiter.addItems([",", ";"]) + layout.addRow("Preset Delimiter", self.input_delimiter) + self.input_key=QLineEdit(self) + btn_key=QPushButton("...", self) + btn_key.clicked.connect(self.select_key) + layout_key=QHBoxLayout() + layout_key.addWidget(self.input_key) + layout_key.addWidget(btn_key) + layout.addRow("Private Key", layout_key) + self.input_certificate=QLineEdit(self) + btn_certificate=QPushButton("...", self) + btn_certificate.clicked.connect(self.select_certificate) + layout_certificate=QHBoxLayout() + layout_certificate.addWidget(self.input_certificate) + layout_certificate.addWidget(btn_certificate) + layout.addRow("X509 Certificate", layout_certificate) + button=QPushButton("Save") + button.clicked.connect(self.save) + layout.addWidget(button) + + self.statusbar=QStatusBar() + self.setStatusBar(self.statusbar) + + self.setCentralWidget(widget) + self.setWindowIcon(QIcon(os.path.join("resource", "icon_medscript.ico"))) + + self.load() class EditPrescriber(QMainWindow): diff --git a/window.py b/window.py index 6bb25c8..a671234 100644 --- a/window.py +++ b/window.py @@ -19,7 +19,7 @@ from prescription import Prescription from renderer import Renderer from filehandler import FileHandler from renderbox import RenderBox -from setting import EditPrescriber +from setting import EditConfiguration, EditPrescriber from viewbox import ViewBox from preset import Preset @@ -150,6 +150,9 @@ class MainWindow(QMainWindow): print(e) QMessageBox.warning(self, "Failed", "Failed to verify.") + def cmd_configuration(self): + self.edit_configuration.show() + def cmd_prescriber(self): self.edit_prescriber.show() @@ -416,6 +419,8 @@ class MainWindow(QMainWindow): action_sign.triggered.connect(self.cmd_sign) action_verify=QAction("Verify", self) action_verify.triggered.connect(self.cmd_verify) + action_configuration=QAction("Configuration", self) + action_configuration.triggered.connect(self.cmd_configuration) action_prescriber=QAction("Settings", self) action_prescriber.triggered.connect(self.cmd_prescriber) action_switch=QAction("Switch", self) @@ -437,9 +442,10 @@ class MainWindow(QMainWindow): menu_prepare.addAction(action_refresh) menu_prepare.addAction(action_sign) menu_prepare.addAction(action_verify) - menu_prescriber=menubar.addMenu("Prescriber") - menu_prescriber.addAction(action_prescriber) - menu_prescriber.addAction(action_switch) + menu_settings=menubar.addMenu("Settings") + menu_settings.addAction(action_configuration) + menu_settings.addAction(action_prescriber) + menu_settings.addAction(action_switch) menu_help=menubar.addMenu("Help") menu_help.addAction(action_about) menu_help.addAction(action_help) @@ -663,6 +669,7 @@ class MainWindow(QMainWindow): self.renderbox=RenderBox() self.signal_view.connect(self.renderbox.update) + self.edit_configuration=EditConfiguration() self.edit_prescriber=EditPrescriber() self.edit_prescriber.signal_save.connect(self.cmd_prescriber_reload) self.viewbox=ViewBox() -- 2.39.2