# 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):
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
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()
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)
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)
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()