]> Softwares of Agnibho - medscript.git/commitdiff
GUI Configuration Editor
authorAgnibho Mondal <mondal@agnibho.com>
Tue, 12 Sep 2023 19:18:17 +0000 (00:48 +0530)
committerAgnibho Mondal <mondal@agnibho.com>
Tue, 12 Sep 2023 19:18:17 +0000 (00:48 +0530)
setting.py
window.py

index d2df6b1547ca5c8905009e190924d042f0f41104..b68b42d1a0b20a3fdcee6ace25cbb735be62cec9 100644 (file)
 # 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 <https://www.gnu.org/licenses/>.
 
-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):
 
index 6bb25c84a1a1f17cacc51a46a91eb729050a31ef..a67123450d9c76ba5fbbd07bc6edaa41dc0dcdc6 100644 (file)
--- 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()