diff --git a/src/main.py b/src/main.py index 6afcf4a..18b292b 100644 --- a/src/main.py +++ b/src/main.py @@ -28,6 +28,7 @@ def main(): or len(app_settings.diff_pdfs) == 0 or len(app_settings.java_vms) == 0 or len(app_settings.saxon_jars) == 0 + or len(app_settings.xsl_dirs) == 0 ): # Als Modal Dialog öffnen! dlg = AppSettingsDlg(window, app_settings) diff --git a/src/ui/AppSettings.py b/src/ui/AppSettings.py index 43bd206..846d239 100644 --- a/src/ui/AppSettings.py +++ b/src/ui/AppSettings.py @@ -33,6 +33,12 @@ class JavaVmConfigDialog(QDialog): if file_path: self.ui.pathEdit.setText(file_path) + def set_data(self, data): + """Setzt die Daten in den Dialog.""" + if data: + self.ui.versionEdit.setText(data.get('version', '')) + self.ui.pathEdit.setText(str(data.get('path_to_binary_file', ''))) + def get_data(self): """Gibt die eingegebenen Daten zurück.""" if not self.ui.versionEdit.text().strip() or not self.ui.pathEdit.text().strip(): @@ -66,6 +72,14 @@ class DiffPdfConfigDialog(QDialog): if file_path: self.ui.pathEdit.setText(file_path) + def set_data(self, data): + """Setzt die Daten in den Dialog.""" + if data: + self.ui.versionEdit.setText(data.get('version', '')) + self.ui.pathEdit.setText(str(data.get('path_to_binary_file', ''))) + self.ui.paramsEdit.setPlainText('\n'.join(data.get('default_params', []))) + self.ui.extensionEdit.setText(data.get('output_file_extension', 'pdf')) + def get_data(self): """Gibt die eingegebenen Daten zurück.""" if not self.ui.versionEdit.text().strip() or not self.ui.pathEdit.text().strip(): @@ -105,6 +119,13 @@ class SaxonJarConfigDialog(QDialog): if file_path: self.ui.pathEdit.setText(file_path) + def set_data(self, data): + """Setzt die Daten in den Dialog.""" + if data: + self.ui.versionEdit.setText(data.get('version', '')) + self.ui.pathEdit.setText(str(data.get('path_to_jar_file', ''))) + self.ui.extensionEdit.setText(data.get('output_file_extension', 'fo')) + def get_data(self): """Gibt die eingegebenen Daten zurück.""" if not self.ui.versionEdit.text().strip() or not self.ui.pathEdit.text().strip(): @@ -138,6 +159,13 @@ class ApacheFopConfigDialog(QDialog): if dir_path: self.ui.pathEdit.setText(dir_path) + def set_data(self, data): + """Setzt die Daten in den Dialog.""" + if data: + self.ui.versionEdit.setText(data.get('version', '')) + self.ui.pathEdit.setText(str(data.get('path_to_dir', ''))) + self.ui.extensionEdit.setText(data.get('output_file_extension', 'pdf')) + def get_data(self): """Gibt die eingegebenen Daten zurück.""" if not self.ui.versionEdit.text().strip() or not self.ui.pathEdit.text().strip(): @@ -171,6 +199,12 @@ class XslDirConfigDialog(QDialog): if dir_path: self.ui.pathEdit.setText(dir_path) + def set_data(self, data): + """Setzt die Daten in den Dialog.""" + if data: + self.ui.nameEdit.setText(data.get('name', '')) + self.ui.pathEdit.setText(str(data.get('path_to_root_dir', ''))) + def get_data(self): """Gibt die eingegebenen Daten zurück.""" if not self.ui.nameEdit.text().strip() or not self.ui.pathEdit.text().strip(): @@ -239,21 +273,33 @@ class AppSettingsDlg(QDialog): self.ui.tableDiffPdfs.itemSelectionChanged.connect(self._update_diff_pdf_buttons) def _setup_tables(self): - """Richtet die Tabellen-Header ein.""" + """Richtet die Tabellen-Header ein und macht sie unveränderbar.""" + from PySide6.QtWidgets import QAbstractItemView + # XSL-Ordner Tabelle self.ui.tableXsls.setHorizontalHeaderLabels(["Name", "Pfad"]) + self.ui.tableXsls.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.ui.tableXsls.doubleClicked.connect(self._edit_xsl_dir) # Java VM Tabelle self.ui.tableJavaVms.setHorizontalHeaderLabels(["Version", "Pfad"]) + self.ui.tableJavaVms.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.ui.tableJavaVms.doubleClicked.connect(self._edit_java_vm) # Saxon Tabelle self.ui.tableSaxons.setHorizontalHeaderLabels(["Version", "JAR-Pfad", "Extension"]) + self.ui.tableSaxons.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.ui.tableSaxons.doubleClicked.connect(self._edit_saxon) # Apache FOP Tabelle self.ui.tableApacheFops.setHorizontalHeaderLabels(["Version", "Verzeichnis", "Extension"]) + self.ui.tableApacheFops.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.ui.tableApacheFops.doubleClicked.connect(self._edit_apache_fop) # Diff PDF Tabelle self.ui.tableDiffPdfs.setHorizontalHeaderLabels(["Version", "Binary-Pfad", "Parameter", "Extension"]) + self.ui.tableDiffPdfs.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.ui.tableDiffPdfs.doubleClicked.connect(self._edit_diff_pdf) def _populate_tables(self): """Füllt alle Tabellen mit den aktuellen Einstellungen.""" @@ -441,6 +487,125 @@ class AppSettingsDlg(QDialog): has_selection = self.ui.tableDiffPdfs.currentRow() >= 0 self.ui.removeDiffPdf.setEnabled(has_selection) + # Bearbeitungsmethoden für Doppelklick-Events + def _edit_xsl_dir(self, index): + """Bearbeitet einen XSL-Ordner per Doppelklick.""" + row = index.row() + if 0 <= row < len(self.temp_xsl_dirs): + xsl_dir = self.temp_xsl_dirs[row] + dialog = XslDirConfigDialog(self) + + # Vorhandene Daten setzen + data = { + 'name': xsl_dir.name, + 'path_to_root_dir': xsl_dir.path_to_root_dir + } + dialog.set_data(data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + new_data = dialog.get_data() + if new_data: + # Daten aktualisieren + xsl_dir.name = new_data['name'] + xsl_dir.path_to_root_dir = new_data['path_to_root_dir'] + self._populate_xsl_table() + + def _edit_java_vm(self, index): + """Bearbeitet eine Java VM per Doppelklick.""" + row = index.row() + if 0 <= row < len(self.temp_java_vms): + java_vm = self.temp_java_vms[row] + dialog = JavaVmConfigDialog(self) + + # Vorhandene Daten setzen + data = { + 'version': java_vm.version, + 'path_to_binary_file': java_vm.path_to_binary_file + } + dialog.set_data(data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + new_data = dialog.get_data() + if new_data: + # Daten aktualisieren + java_vm.version = new_data['version'] + java_vm.path_to_binary_file = new_data['path_to_binary_file'] + self._populate_java_vm_table() + + def _edit_saxon(self, index): + """Bearbeitet eine Saxon JAR per Doppelklick.""" + row = index.row() + if 0 <= row < len(self.temp_saxon_jars): + saxon = self.temp_saxon_jars[row] + dialog = SaxonJarConfigDialog(self) + + # Vorhandene Daten setzen + data = { + 'version': saxon.version, + 'path_to_jar_file': saxon.path_to_jar_file, + 'output_file_extension': saxon.output_file_extension + } + dialog.set_data(data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + new_data = dialog.get_data() + if new_data: + # Daten aktualisieren + saxon.version = new_data['version'] + saxon.path_to_jar_file = new_data['path_to_jar_file'] + saxon.output_file_extension = new_data['output_file_extension'] + self._populate_saxon_table() + + def _edit_apache_fop(self, index): + """Bearbeitet eine Apache FOP Konfiguration per Doppelklick.""" + row = index.row() + if 0 <= row < len(self.temp_apache_fops): + fop = self.temp_apache_fops[row] + dialog = ApacheFopConfigDialog(self) + + # Vorhandene Daten setzen + data = { + 'version': fop.version, + 'path_to_dir': fop.path_to_dir, + 'output_file_extension': fop.output_file_extension + } + dialog.set_data(data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + new_data = dialog.get_data() + if new_data: + # Daten aktualisieren + fop.version = new_data['version'] + fop.path_to_dir = new_data['path_to_dir'] + fop.output_file_extension = new_data['output_file_extension'] + self._populate_apache_fop_table() + + def _edit_diff_pdf(self, index): + """Bearbeitet eine Diff PDF Konfiguration per Doppelklick.""" + row = index.row() + if 0 <= row < len(self.temp_diff_pdfs): + diff_pdf = self.temp_diff_pdfs[row] + dialog = DiffPdfConfigDialog(self) + + # Vorhandene Daten setzen + data = { + 'version': diff_pdf.version, + 'path_to_binary_file': diff_pdf.path_to_binary_file, + 'default_params': diff_pdf.default_params, + 'output_file_extension': diff_pdf.output_file_extension + } + dialog.set_data(data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + new_data = dialog.get_data() + if new_data: + # Daten aktualisieren + diff_pdf.version = new_data['version'] + diff_pdf.path_to_binary_file = new_data['path_to_binary_file'] + diff_pdf.default_params = new_data['default_params'] + diff_pdf.output_file_extension = new_data['output_file_extension'] + self._populate_diff_pdf_table() + def accept(self): """Übernimmt die Änderungen und schließt den Dialog.""" # Aktualisiere die ursprünglichen Einstellungen diff --git a/src/ui/AppSettings.ui b/src/ui/AppSettings.ui index b17b47b..6db3f24 100644 --- a/src/ui/AppSettings.ui +++ b/src/ui/AppSettings.ui @@ -20,7 +20,7 @@ true - 5 + 0 diff --git a/src/ui/AppSettings_ui.py b/src/ui/AppSettings_ui.py index c15b045..daf4eaf 100644 --- a/src/ui/AppSettings_ui.py +++ b/src/ui/AppSettings_ui.py @@ -280,7 +280,7 @@ class Ui_Dialog(object): self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) - self.tabSettings.setCurrentIndex(5) + self.tabSettings.setCurrentIndex(0) QMetaObject.connectSlotsByName(Dialog)