From 76b5182a538845d99274c823198e9101ea7971ba Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Tue, 17 Jun 2025 20:12:38 +0200 Subject: [PATCH] Dialoge in eigene Dateien ausgelagert - `JavaVmConfigDialog` - `DiffPdfConfigDialog` - `SaxonJarConfigDialog` - `ApacheFopConfigDialog` - `XslDirConfigDialog` --- src/ui/ApacheFopConfigDialog.py | 42 +++++ src/ui/AppSettings.py | 288 ++++++++++---------------------- src/ui/DiffPdfConfigDialog.py | 50 ++++++ src/ui/JavaVmConfigDialog.py | 42 +++++ src/ui/PdfProject.py | 17 +- src/ui/SaxonJarConfigDialog.py | 44 +++++ src/ui/XslDirConfigDialog.py | 37 ++++ 7 files changed, 317 insertions(+), 203 deletions(-) create mode 100644 src/ui/ApacheFopConfigDialog.py create mode 100644 src/ui/DiffPdfConfigDialog.py create mode 100644 src/ui/JavaVmConfigDialog.py create mode 100644 src/ui/SaxonJarConfigDialog.py create mode 100644 src/ui/XslDirConfigDialog.py diff --git a/src/ui/ApacheFopConfigDialog.py b/src/ui/ApacheFopConfigDialog.py new file mode 100644 index 0000000..1f654f4 --- /dev/null +++ b/src/ui/ApacheFopConfigDialog.py @@ -0,0 +1,42 @@ +from PySide6.QtWidgets import QDialog, QFileDialog +from pathlib import Path + +from ui.ApacheFopConfigDialog_ui import Ui_ApacheFopConfigDialog + + +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", + } diff --git a/src/ui/AppSettings.py b/src/ui/AppSettings.py index b514de0..943782e 100644 --- a/src/ui/AppSettings.py +++ b/src/ui/AppSettings.py @@ -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() diff --git a/src/ui/DiffPdfConfigDialog.py b/src/ui/DiffPdfConfigDialog.py new file mode 100644 index 0000000..c68591f --- /dev/null +++ b/src/ui/DiffPdfConfigDialog.py @@ -0,0 +1,50 @@ +from PySide6.QtWidgets import QDialog, QFileDialog +from pathlib import Path + +from ui.DiffPdfConfigDialog_ui import Ui_DiffPdfConfigDialog + + +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", + } diff --git a/src/ui/JavaVmConfigDialog.py b/src/ui/JavaVmConfigDialog.py new file mode 100644 index 0000000..50c9747 --- /dev/null +++ b/src/ui/JavaVmConfigDialog.py @@ -0,0 +1,42 @@ +from PySide6.QtWidgets import QDialog, QFileDialog +from pathlib import Path + +from ui.JavaVmConfigDialog_ui import Ui_JavaVmConfigDialog + + +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()), + } diff --git a/src/ui/PdfProject.py b/src/ui/PdfProject.py index 803a2d1..60fafba 100644 --- a/src/ui/PdfProject.py +++ b/src/ui/PdfProject.py @@ -8,13 +8,14 @@ from ui.PdfProject_ui import Ui_projectDlg class PdfProjectDlg(QDialog): - def __init__(self, parent=None, project_data=None): + def __init__(self, parent=None, project_data=None, edit_mode=False): """ Konstruktor für den PDF-Projekt-Dialog. Args: parent: Übergeordnetes Widget project_data: Bestehende Projektdaten zum Bearbeiten (optional) + edit_mode: Wenn True, werden Projekt-Name und -Ordner deaktiviert (nur Einstellungen ändern) """ super().__init__(parent) @@ -24,6 +25,7 @@ class PdfProjectDlg(QDialog): # Projektdaten speichern self.project_data = project_data or {} + self.edit_mode = edit_mode # Dialog-Eigenschaften setzen self.setModal(True) @@ -35,6 +37,10 @@ class PdfProjectDlg(QDialog): # ComboBoxen initialisieren self._init_combo_boxes() + # Edit-Modus konfigurieren + if self.edit_mode: + self._configure_edit_mode() + # Bestehende Projektdaten laden, falls vorhanden if self.project_data: self._load_project_data() @@ -233,6 +239,15 @@ class PdfProjectDlg(QDialog): 'diff_pdf_id': self.ui.comboBox.currentData() } + def _configure_edit_mode(self): + """Konfiguriert den Dialog für den Edit-Modus (nur Einstellungen ändern).""" + # Projekt-Ordner und Browse-Button deaktivieren + self.ui.lineProjectDir.setEnabled(False) + self.ui.pushButton.setEnabled(False) + + # Dialog-Titel ändern + self.setWindowTitle("Projekt-Einstellungen bearbeiten") + def set_project_data(self, project_data): """ Setzt die Projektdaten in den Dialog. diff --git a/src/ui/SaxonJarConfigDialog.py b/src/ui/SaxonJarConfigDialog.py new file mode 100644 index 0000000..324ab0b --- /dev/null +++ b/src/ui/SaxonJarConfigDialog.py @@ -0,0 +1,44 @@ +from PySide6.QtWidgets import QDialog, QFileDialog +from pathlib import Path + +from ui.SaxonJarConfigDialog_ui import Ui_SaxonJarConfigDialog + + +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", + } diff --git a/src/ui/XslDirConfigDialog.py b/src/ui/XslDirConfigDialog.py new file mode 100644 index 0000000..30c5472 --- /dev/null +++ b/src/ui/XslDirConfigDialog.py @@ -0,0 +1,37 @@ +from PySide6.QtWidgets import QDialog, QFileDialog +from pathlib import Path + +from ui.XslDirConfigDialog_ui import Ui_XslDirConfigDialog + + +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())}