# 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 QDialog, QFormLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QStatusBar, QMessageBox, QFileDialog
+from PyQt6.QtWidgets import QDialog, QFormLayout, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QMessageBox, QFileDialog, QListWidget
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt, pyqtSignal
+from glob import glob
import os, json
+from prescription import Prescriber
from config import config, config_file
class EditConfiguration(QDialog):
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()
+ self.close()
except Exception as e:
QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.")
print(e)
file=""
prescriber=""
- def load(self):
+ def load(self, file=None):
try:
- self.file=config["prescriber"]
+ if(file):
+ self.file=file
+ else:
+ self.file=config["prescriber"]
with open(self.file) as data:
self.prescriber=json.loads(data.read())
self.input_name.setText(self.prescriber["name"])
self.input_extra.setText(self.prescriber["extra"])
except Exception as e:
QMessageBox.critical(self,"Failed to load", "Failed to load the data into the application.")
- raise(e)
+ print(e)
def save(self, file=False):
if(file is not False or QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm Save", "This action will overwrite the previous information. Continue?")):
f.write(json.dumps(self.prescriber, indent=4))
QMessageBox.information(self,"Saved", "Information saved.")
self.signal_save.emit(self.file)
- self.hide()
+ self.close()
except Exception as e:
QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.")
print(e)
- def save_as(self):
- try:
- self.save(QFileDialog.getSaveFileName(self, "Save prescriber", config["prescriber_directory"], "JSON (*.json);; All Files (*)")[0])
- except Exception as e:
- print(e)
-
-
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
layout.addRow("Extra", self.input_extra)
button_save=QPushButton("Save")
button_save.clicked.connect(self.save)
- button_save_as=QPushButton("Save As")
- button_save_as.clicked.connect(self.save_as)
- button_reset=QPushButton("Reset")
- button_reset.clicked.connect(self.load)
- layout_btn=QHBoxLayout()
- layout_btn.addWidget(button_save)
- layout_btn.addWidget(button_save_as)
- layout_btn.addWidget(button_reset)
- layout.addRow("", layout_btn)
+ layout.addRow("", button_save)
+
+ self.setWindowIcon(QIcon(os.path.join("resource", "icon_medscript.ico")))
+
+ self.load()
+
+class SelectPrescriber(QDialog):
+
+ signal_select=pyqtSignal(str)
+ signal_edit=pyqtSignal(str)
+
+ listAll={"obj": [], "name": [], "file": []}
+
+ def load(self):
+ self.listAll={"obj": [], "name": [], "file": []}
+ self.showAll.clear()
+ for i in glob(os.path.join(config["prescriber_directory"], "*.json")):
+ self.listAll["obj"].append(Prescriber(i))
+ try:
+ self.listAll["name"].append(self.listAll["obj"][-1].name)
+ except AttributeError:
+ del self.listAll["obj"][-1]
+ self.listAll["file"].append(i)
+ for i in self.listAll["name"]:
+ self.showAll.addItem(i)
+
+ def select(self):
+ txt=self.showAll.currentItem().text()
+ idx=self.listAll["name"].index(txt)
+ self.signal_select.emit(self.listAll["file"][idx])
+ self.close()
+
+ def new(self):
+ num=1
+ file=os.path.join(config["prescriber_directory"], "prescriber"+str(num)+".json")
+ while(os.path.exists(file)):
+ num=num+1
+ file=os.path.join(config["prescriber_directory"], "prescriber"+str(num)+".json")
+ self.signal_edit.emit(file)
+ self.close()
+
+ def edit(self):
+ txt=self.showAll.currentItem().text()
+ idx=self.listAll["name"].index(txt)
+ self.signal_edit.emit(self.listAll["file"][idx])
+ self.close()
+
+ def delete(self):
+ txt=self.showAll.currentItem().text()
+ idx=self.listAll["name"].index(txt)
+ file=self.listAll["file"][idx]
+ if(file==config["prescriber"]):
+ QMessageBox.warning(self,"Unable to Delete", "Default prescriber file cannot be deleted.")
+ else:
+ if(QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm Delete", "Are you sure you want to delete the prescriber? This action cannot be undone.")):
+ os.unlink(self.listAll["file"][idx])
+ self.showAll.takeItem(self.showAll.currentRow())
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ self.setWindowTitle("Prescriber")
+
+ layout=QVBoxLayout(self)
+ self.showAll=QListWidget()
+ layout.addWidget(self.showAll)
+ layout2=QHBoxLayout()
+ btn_select=QPushButton("Select")
+ btn_select.clicked.connect(self.select)
+ layout2.addWidget(btn_select)
+ btn_new=QPushButton("New")
+ btn_new.clicked.connect(self.new)
+ layout2.addWidget(btn_new)
+ btn_edit=QPushButton("Edit")
+ btn_edit.clicked.connect(self.edit)
+ layout2.addWidget(btn_edit)
+ btn_del=QPushButton("Delete")
+ btn_del.clicked.connect(self.delete)
+ layout2.addWidget(btn_del)
+ layout.addLayout(layout2)
self.setWindowIcon(QIcon(os.path.join("resource", "icon_medscript.ico")))
from functools import partial
from config import config, info, real_dir
-from prescription import Prescription
+from prescription import Prescription, Prescriber
from renderer import Renderer
from filehandler import FileHandler
from renderbox import RenderBox
-from setting import EditConfiguration, EditPrescriber
+from setting import EditConfiguration, EditPrescriber, SelectPrescriber
from editpreset import EditPreset
from viewbox import ViewBox
from preset import Preset
current_file=FileHandler()
prescription=Prescription()
+ prescriber=Prescriber()
renderer=Renderer()
plugin=Plugin()
save_state=md5("".encode()).hexdigest()
def cmd_configuration(self):
self.edit_configuration.exec()
- def cmd_prescriber(self):
+ def cmd_prescriber(self, file=None):
+ self.edit_prescriber.load(file)
self.edit_prescriber.exec()
- def cmd_prescriber_reload(self, file=None):
- self.prescription.reload_prescriber(file=None)
- self.refresh()
-
def cmd_switch(self):
try:
- self.prescription.reload_prescriber(QFileDialog.getOpenFileName(self, "Open File", config["prescriber_directory"], "JSON (*.json);; All Files (*)")[0])
- self.refresh()
+ self.select_prescriber.load()
+ self.select_prescriber.exec()
except FileNotFoundError as e:
print(e)
self.input_additional.setText(additional)
self.input_certificate.setText(certificate)
self.input_custom.setData(custom)
- self.label_prescriber.setText(self.prescription.prescriber.name)
+ self.label_prescriber.setText(self.prescriber.name)
except Exception as e:
QMessageBox.warning(self,"Failed to load", "Failed to load the data into the application.")
print(e)
self.load_interface_from_instance()
self.save_state=md5(self.prescription.get_json().encode()).hexdigest()
+ def change_prescriber(self, file):
+ self.prescription.reload_prescriber(file)
+ self.prescriber.read_from(file)
+ self.refresh()
+
def refresh(self):
self.update_instance()
self.load_interface_from_instance()
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.edit_prescriber.signal_save.connect(self.change_prescriber)
+ self.select_prescriber=SelectPrescriber()
+ self.select_prescriber.signal_edit.connect(self.cmd_prescriber)
+ self.select_prescriber.signal_select.connect(self.change_prescriber)
self.viewbox=ViewBox()
self.index=Index()
self.edit_preset=EditPreset()