Dialog für PDF-Projekte

This commit is contained in:
2025-06-16 20:30:56 +02:00
parent ae09775c58
commit 7145176bfc
5 changed files with 701 additions and 12 deletions
+89 -11
View File
@@ -10,7 +10,9 @@ from PySide6.QtPdfWidgets import QPdfView
from ui.MainWinddow_ui import Ui_MainWindow
from ui.AppSettings import AppSettingsDlg
from conf import app_settings
from ui.PdfProject import PdfProjectDlg
from conf import app_settings, PdfProject
from pathlib import Path
class MainWindow(QMainWindow):
@@ -243,17 +245,18 @@ class MainWindow(QMainWindow):
except Exception as e:
print(f"Fehler beim Laden der PDFs: {e}")
# Erstelle das eine Vollbild-Label für die rechte Spalte
self.fullsize_label = QLabel()
self.fullsize_label.setObjectName("fullsize_current_page")
self.fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter)
self.fullsize_label.setCursor(QCursor(Qt.CursorShape.OpenHandCursor))
self.ui.verticalLayout_3.addWidget(self.fullsize_label)
# Erstelle das eine Vollbild-Label für die rechte Spalte (immer erstellen)
if self.fullsize_label is None:
self.fullsize_label = QLabel()
self.fullsize_label.setObjectName("fullsize_current_page")
self.fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter)
self.fullsize_label.setCursor(QCursor(Qt.CursorShape.OpenHandCursor))
self.ui.verticalLayout_3.addWidget(self.fullsize_label)
# Drag-to-Scroll Events für das große Bild einrichten
self.fullsize_label.mousePressEvent = lambda event: self.on_fullsize_mouse_press(event, self.fullsize_label)
self.fullsize_label.mouseMoveEvent = lambda event: self.on_fullsize_mouse_move(event, self.fullsize_label)
self.fullsize_label.mouseReleaseEvent = lambda event: self.on_fullsize_mouse_release(event, self.fullsize_label)
# Drag-to-Scroll Events für das große Bild einrichten
self.fullsize_label.mousePressEvent = lambda event: self.on_fullsize_mouse_press(event, self.fullsize_label)
self.fullsize_label.mouseMoveEvent = lambda event: self.on_fullsize_mouse_move(event, self.fullsize_label)
self.fullsize_label.mouseReleaseEvent = lambda event: self.on_fullsize_mouse_release(event, self.fullsize_label)
# Zeige die erste Seite initial an
if self.current_pdf:
@@ -349,6 +352,10 @@ class MainWindow(QMainWindow):
print("Keine gerenderten Pixmaps verfügbar")
return
if self.fullsize_label is None:
print("Fullsize-Label ist nicht verfügbar")
return
# Hole die gecachten Pixmaps
ref_pixmap = self.current_rendered_pixmaps['ref']
diff_pixmap = self.current_rendered_pixmaps['diff']
@@ -442,6 +449,7 @@ class MainWindow(QMainWindow):
self.ui.alpha.mouseDoubleClickEvent = lambda event: self.ui.alpha.setValue(0)
# Menü-Aktionen verbinden
self.ui.actionNeu.triggered.connect(self.open_new_project_dialog)
self.ui.actionEinstellungen.triggered.connect(self.open_settings_dialog)
def on_alpha_changed(self, alpha_value):
@@ -471,6 +479,76 @@ class MainWindow(QMainWindow):
except Exception as e:
print(f"Fehler beim Öffnen des Einstellungen-Dialogs: {e}")
def open_new_project_dialog(self):
"""Öffnet Pdf-Projekt-Dialog."""
try:
# Erstelle und zeige den PdfProject-Dialog
dialog = PdfProjectDlg(self)
if dialog.exec() == PdfProjectDlg.DialogCode.Accepted:
# Hole die Projektdaten aus dem Dialog
project_data = dialog.get_project_data()
# Erstelle neue ID für das Projekt
new_id = max([p.id for p in app_settings.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={}
)
# Erstelle Projekt-Ordnerstruktur
self._create_project_structure(new_project)
# Füge das neue Projekt zu app_settings hinzu
app_settings.pdf_projects.append(new_project)
# Speichere app_settings
app_settings.save()
print(f"Neues PDF-Projekt '{project_data['name']}' wurde erstellt und gespeichert")
print(f"Projekt-ID: {new_id}")
print(f"Projekt-Ordner: {project_data['project_dir']}")
except Exception as e:
print(f"Fehler beim Erstellen des neuen Projekts: {e}")
def _create_project_structure(self, project: PdfProject):
"""
Erstellt die Ordnerstruktur und project.yaml-Datei für ein neues Projekt.
Args:
project: Das PdfProject-Objekt
"""
try:
project_dir = Path(project.project_dir)
# Erstelle Unterordner
subdirs = ['xml', 'new', 'diff', 'ref', 'tmp']
for subdir in subdirs:
subdir_path = project_dir / subdir
subdir_path.mkdir(parents=True, exist_ok=True)
print(f"Ordner erstellt: {subdir_path}")
project_yaml_path = project_dir / 'project.yaml'
# Projekt-Datei erstellen, wenn nicht vorhanden
if not project_yaml_path.exists():
project_yaml_path.touch()
print(f"project.yaml erstellt: {project_yaml_path}")
except Exception as e:
print(f"Fehler beim Erstellen der Projekt-Struktur: {e}")
raise
def on_button_clicked(self):
"""Wird ausgeführt, wenn der Button geklickt wird."""
print("Button wurde geklickt!")