Dialoge in eigene Dateien ausgelagert

- `JavaVmConfigDialog`
- `DiffPdfConfigDialog`
- `SaxonJarConfigDialog`
- `ApacheFopConfigDialog`
- `XslDirConfigDialog`
This commit is contained in:
2025-06-17 20:12:38 +02:00
parent 02d1d4ada4
commit 76b5182a53
7 changed files with 317 additions and 203 deletions
+86 -202
View File
@@ -2,208 +2,13 @@ from PySide6.QtWidgets import QDialog, QTableWidgetItem, QFileDialog, QHeaderVie
from pathlib import Path
from ui.AppSettings_ui import Ui_Dialog
from ui.JavaVmConfigDialog_ui import Ui_JavaVmConfigDialog
from ui.DiffPdfConfigDialog_ui import Ui_DiffPdfConfigDialog
from ui.SaxonJarConfigDialog_ui import Ui_SaxonJarConfigDialog
from ui.ApacheFopConfigDialog_ui import Ui_ApacheFopConfigDialog
from ui.XslDirConfigDialog_ui import Ui_XslDirConfigDialog
from conf import AppSettings, JavaVm, DiffPdf, SaxonJar, ApacheFop, XslDir
# Dialog-Klassen für die Eingabe ohne ID
class JavaVmConfigDialog(QDialog):
"""Dialog zur Konfiguration einer Java VM ohne ID."""
def __init__(self, parent=None):
super().__init__(parent)
# UI einrichten
self.ui = Ui_JavaVmConfigDialog()
self.ui.setupUi(self)
# Signale verbinden
self.ui.browseButton.clicked.connect(self.browse_binary_file)
def browse_binary_file(self):
"""Öffnet einen Dateidialog für die Binary-Datei."""
file_path, _ = QFileDialog.getOpenFileName(
self, "Java Binary-Datei auswählen", "", "Executable Files (*.exe);;All Files (*)"
)
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():
return None
return {
"version": self.ui.versionEdit.text().strip(),
"path_to_binary_file": Path(self.ui.pathEdit.text().strip()),
}
class DiffPdfConfigDialog(QDialog):
"""Dialog zur Konfiguration von DiffPdf ohne ID."""
def __init__(self, parent=None):
super().__init__(parent)
# UI einrichten
self.ui = Ui_DiffPdfConfigDialog()
self.ui.setupUi(self)
# Signale verbinden
self.ui.browseButton.clicked.connect(self.browse_binary_file)
def browse_binary_file(self):
"""Öffnet einen Dateidialog für die Binary-Datei."""
file_path, _ = QFileDialog.getOpenFileName(
self, "DiffPdf Binary-Datei auswählen", "", "Executable Files (*.exe);;All Files (*)"
)
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():
return None
# Parameter aus dem Text extrahieren
params_text = self.ui.paramsEdit.toPlainText().strip()
params = [line.strip() for line in params_text.split("\n") if line.strip()] if params_text else []
return {
"version": self.ui.versionEdit.text().strip(),
"path_to_binary_file": Path(self.ui.pathEdit.text().strip()),
"default_params": params,
"output_file_extension": self.ui.extensionEdit.text().strip() or "pdf",
}
class SaxonJarConfigDialog(QDialog):
"""Dialog zur Konfiguration von Saxon JAR ohne ID."""
def __init__(self, parent=None):
super().__init__(parent)
# UI einrichten
self.ui = Ui_SaxonJarConfigDialog()
self.ui.setupUi(self)
# Signale verbinden
self.ui.browseButton.clicked.connect(self.browse_jar_file)
def browse_jar_file(self):
"""Öffnet einen Dateidialog für die JAR-Datei."""
file_path, _ = QFileDialog.getOpenFileName(
self, "Saxon JAR-Datei auswählen", "", "JAR Files (*.jar);;All Files (*)"
)
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():
return None
return {
"version": self.ui.versionEdit.text().strip(),
"path_to_jar_file": Path(self.ui.pathEdit.text().strip()),
"output_file_extension": self.ui.extensionEdit.text().strip() or "fo",
}
class ApacheFopConfigDialog(QDialog):
"""Dialog zur Konfiguration von Apache FOP ohne ID."""
def __init__(self, parent=None):
super().__init__(parent)
# UI einrichten
self.ui = Ui_ApacheFopConfigDialog()
self.ui.setupUi(self)
# Signale verbinden
self.ui.browseButton.clicked.connect(self.browse_directory)
def browse_directory(self):
"""Öffnet einen Verzeichnisdialog."""
dir_path = QFileDialog.getExistingDirectory(self, "Apache FOP Verzeichnis auswählen")
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():
return None
return {
"version": self.ui.versionEdit.text().strip(),
"path_to_dir": Path(self.ui.pathEdit.text().strip()),
"output_file_extension": self.ui.extensionEdit.text().strip() or "pdf",
}
class XslDirConfigDialog(QDialog):
"""Dialog zur Konfiguration von XSL-Verzeichnis ohne ID."""
def __init__(self, parent=None):
super().__init__(parent)
# UI einrichten
self.ui = Ui_XslDirConfigDialog()
self.ui.setupUi(self)
# Signale verbinden
self.ui.browseButton.clicked.connect(self.browse_directory)
def browse_directory(self):
"""Öffnet einen Verzeichnisdialog."""
dir_path = QFileDialog.getExistingDirectory(self, "XSL Root-Verzeichnis auswählen")
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():
return None
return {"name": self.ui.nameEdit.text().strip(), "path_to_root_dir": Path(self.ui.pathEdit.text().strip())}
from ui.JavaVmConfigDialog import JavaVmConfigDialog
from ui.DiffPdfConfigDialog import DiffPdfConfigDialog
from ui.SaxonJarConfigDialog import SaxonJarConfigDialog
from ui.ApacheFopConfigDialog import ApacheFopConfigDialog
from ui.XslDirConfigDialog import XslDirConfigDialog
from ui.PdfProject import PdfProjectDlg
from conf import AppSettings, JavaVm, DiffPdf, SaxonJar, ApacheFop, XslDir, PdfProject
class AppSettingsDlg(QDialog):
@@ -345,6 +150,13 @@ class AppSettingsDlg(QDialog):
self.ui.tableDiffPdfs.setItem(row, 3, QTableWidgetItem(diff_pdf.output_file_extension))
self.ui.tableDiffPdfs.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
def _populate_pdf_project_table(self):
"""Füllt die PDF-Projekte Tabelle."""
self.ui.tablePdfProjekts.setRowCount(len(self.temp_pdf_projects))
for row, pdf_project in enumerate(self.temp_pdf_projects):
self.ui.tablePdfProjekts.setItem(row, 0, QTableWidgetItem(pdf_project.name))
self.ui.tablePdfProjekts.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
# XSL-Ordner Methoden
def _add_xsl_dir(self):
"""Fügt einen neuen XSL-Ordner hinzu."""
@@ -602,6 +414,77 @@ class AppSettingsDlg(QDialog):
diff_pdf.output_file_extension = new_data["output_file_extension"]
self._populate_diff_pdf_table()
# PDF-Projekt Methoden
def _add_pdf_project(self):
"""Fügt ein neues PDF-Projekt hinzu."""
dialog = PdfProjectDlg(self)
if dialog.exec() == PdfProjectDlg.DialogCode.Accepted:
project_data = dialog.get_project_data()
# Neue ID generieren
new_id = max([p.id for p in self.temp_pdf_projects], default=0) + 1
# Erstelle PdfProject-Objekt
new_project = PdfProject(
id=new_id,
name=project_data['name'],
project_dir=Path(project_data['project_dir']),
java_vm_id=project_data['java_vm_id'] if project_data['java_vm_id'] != -1 else 1,
diff_pdf_id=project_data['diff_pdf_id'] if project_data['diff_pdf_id'] != -1 else 1,
saxon_jar_id=project_data['saxon_jar_id'] if project_data['saxon_jar_id'] != -1 else 1,
apache_fop_id=project_data['apache_fop_id'] if project_data['apache_fop_id'] != -1 else 1,
xsl_dir_id=project_data['xsl_dir_id'] if project_data['xsl_dir_id'] != -1 else 1,
default_xslt_params={}
)
self.temp_pdf_projects.append(new_project)
self._populate_pdf_project_table()
def _remove_pdf_project(self):
"""Entfernt das ausgewählte PDF-Projekt."""
current_row = self.ui.tablePdfProjekts.currentRow()
if current_row >= 0:
del self.temp_pdf_projects[current_row]
self._populate_pdf_project_table()
self._update_pdf_project_buttons()
def _update_pdf_project_buttons(self):
"""Aktualisiert den Status der PDF-Projekt-Buttons."""
has_selection = self.ui.tablePdfProjekts.currentRow() >= 0
self.ui.removeProject.setEnabled(has_selection)
def _edit_pdf_project(self, index):
"""Bearbeitet ein PDF-Projekt per Doppelklick (nur Einstellungen)."""
row = index.row()
if 0 <= row < len(self.temp_pdf_projects):
pdf_project = self.temp_pdf_projects[row]
# Projektdaten für Dialog vorbereiten
project_data = {
'name': pdf_project.name,
'project_dir': str(pdf_project.project_dir),
'java_vm_id': pdf_project.java_vm_id,
'diff_pdf_id': pdf_project.diff_pdf_id,
'saxon_jar_id': pdf_project.saxon_jar_id,
'apache_fop_id': pdf_project.apache_fop_id,
'xsl_dir_id': pdf_project.xsl_dir_id
}
# Dialog im Edit-Modus öffnen (Projekt-Name und -Ordner deaktiviert)
dialog = PdfProjectDlg(self, project_data, edit_mode=True)
if dialog.exec() == PdfProjectDlg.DialogCode.Accepted:
new_data = dialog.get_project_data()
# Nur die Einstellungen aktualisieren (Name und Ordner bleiben unverändert)
pdf_project.java_vm_id = new_data['java_vm_id'] if new_data['java_vm_id'] != -1 else pdf_project.java_vm_id
pdf_project.diff_pdf_id = new_data['diff_pdf_id'] if new_data['diff_pdf_id'] != -1 else pdf_project.diff_pdf_id
pdf_project.saxon_jar_id = new_data['saxon_jar_id'] if new_data['saxon_jar_id'] != -1 else pdf_project.saxon_jar_id
pdf_project.apache_fop_id = new_data['apache_fop_id'] if new_data['apache_fop_id'] != -1 else pdf_project.apache_fop_id
pdf_project.xsl_dir_id = new_data['xsl_dir_id'] if new_data['xsl_dir_id'] != -1 else pdf_project.xsl_dir_id
self._populate_pdf_project_table()
def accept(self):
"""Übernimmt die Änderungen und schließt den Dialog."""
# Aktualisiere die ursprünglichen Einstellungen
@@ -610,6 +493,7 @@ class AppSettingsDlg(QDialog):
self.settings.saxon_jars = self.temp_saxon_jars.copy()
self.settings.apache_fops = self.temp_apache_fops.copy()
self.settings.xsl_dirs = self.temp_xsl_dirs.copy()
self.settings.pdf_projects = self.temp_pdf_projects.copy()
self.settings.save()