Feature: Buttons zum Öffnen von Ref- und New-PDFs im System-Viewer

Neue Buttons im PDF-Vergleichs-Viewer:
- "Vorher (Referenz)" Button öffnet Referenz-PDF im System-PDF-Viewer
- "Nachher (Neu)" Button öffnet neue PDF im System-PDF-Viewer
- Beide Buttons sind initial deaktiviert
- Automatische Aktivierung beim Laden von Diff-PDFs
- Automatische Deaktivierung beim Leeren des Viewers

Implementierung:
- Neue Instanzvariablen: current_ref_pdf_path, current_new_pdf_path
- Handler-Methoden: _on_view_ref_pdf_clicked(), _on_view_new_pdf_clicked()
- QDesktopServices.openUrl() für plattformunabhängiges Öffnen
- Fehlerbehandlung und Logging

UI-Änderungen:
- Buttons in MainWinddow.ui hinzugefügt (view_ref_pdf, view_new_pdf)
- MainWinddow_ui.py automatisch generiert

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-02 20:11:56 +01:00
parent b29fa633cb
commit d914e9b06a
3 changed files with 92 additions and 12 deletions
+58 -2
View File
@@ -5,8 +5,8 @@ import hashlib
import logging
from typing import List
from PySide6.QtCore import Qt, QSize, QThread, Signal
from PySide6.QtGui import QCursor, QPixmap, QPainter, QAction, QIcon, QDragEnterEvent, QDropEvent
from PySide6.QtCore import Qt, QSize, QThread, Signal, QUrl
from PySide6.QtGui import QCursor, QPixmap, QPainter, QAction, QIcon, QDragEnterEvent, QDropEvent, QDesktopServices
from PySide6.QtWidgets import (
QLabel,
QMainWindow,
@@ -508,6 +508,10 @@ class MainWindow(QMainWindow):
self.current_diff_xml_path = None
self.current_diff_xsl_id = None
# Pfade zu aktuellen Ref- und New-PDFs (für System-Viewer)
self.current_ref_pdf_path = None
self.current_new_pdf_path = None
# Cache für die aktuell gerenderten Pixmaps (Performance-Optimierung)
self.current_rendered_pixmaps = None
@@ -1108,6 +1112,10 @@ class MainWindow(QMainWindow):
# Button "Accept Changes" verbinden
self.ui.accept_changes.clicked.connect(self._on_accept_changes_clicked)
# Buttons zum Öffnen von PDFs im System-Viewer verbinden
self.ui.view_ref_pdf.clicked.connect(self._on_view_ref_pdf_clicked)
self.ui.view_new_pdf.clicked.connect(self._on_view_new_pdf_clicked)
def _setup_tree_context_menu(self):
"""Richtet das Kontextmenü für das TreeWidget ein."""
# Aktiviere Kontextmenü für das TreeWidget
@@ -1958,6 +1966,14 @@ class MainWindow(QMainWindow):
# PDF-Dokumente speichern
self.pdf_documents[pdf_basename] = {"diff": diff_doc, "ref": ref_doc, "new": new_doc}
# PDF-Pfade für System-Viewer speichern
self.current_ref_pdf_path = ref_pdf_path
self.current_new_pdf_path = new_pdf_path
# Buttons zum Öffnen der PDFs im System-Viewer aktivieren
self.ui.view_ref_pdf.setEnabled(True)
self.ui.view_new_pdf.setEnabled(True)
logger.info(f"PDFs geladen: {pdf_basename}")
logger.info(f" diff: {diff_doc.pageCount()} Seiten")
logger.info(f" ref: {ref_doc.pageCount()} Seiten")
@@ -4640,6 +4656,12 @@ class MainWindow(QMainWindow):
self.current_diff_xml_path = None
self.current_diff_xsl_id = None
# PDF-Pfade zurücksetzen und Buttons deaktivieren
self.current_ref_pdf_path = None
self.current_new_pdf_path = None
self.ui.view_ref_pdf.setEnabled(False)
self.ui.view_new_pdf.setEnabled(False)
logger.info("PDF-Viewer geleert")
def _on_accept_changes_clicked(self):
@@ -4740,6 +4762,40 @@ class MainWindow(QMainWindow):
logger.error(f"Fehler beim Akzeptieren der Änderungen: {e}")
QMessageBox.critical(self, "Fehler", f"Fehler beim Akzeptieren der Änderungen:\n{str(e)}")
def _on_view_ref_pdf_clicked(self):
"""
Handler für view_ref_pdf Button.
Öffnet die Referenz-PDF im systemseitig installierten PDF-Viewer.
"""
if not self.current_ref_pdf_path or not self.current_ref_pdf_path.exists():
QMessageBox.warning(self, "Fehler", "Referenz-PDF nicht gefunden")
logger.warning("Referenz-PDF nicht verfügbar")
return
logger.info(f"Öffne Referenz-PDF im System-Viewer: {self.current_ref_pdf_path}")
url = QUrl.fromLocalFile(str(self.current_ref_pdf_path))
if not QDesktopServices.openUrl(url):
QMessageBox.critical(
self, "Fehler", f"Konnte Referenz-PDF nicht öffnen:\n{self.current_ref_pdf_path}"
)
logger.error(f"Fehler beim Öffnen der Referenz-PDF: {self.current_ref_pdf_path}")
def _on_view_new_pdf_clicked(self):
"""
Handler für view_new_pdf Button.
Öffnet die neue PDF im systemseitig installierten PDF-Viewer.
"""
if not self.current_new_pdf_path or not self.current_new_pdf_path.exists():
QMessageBox.warning(self, "Fehler", "Neue PDF nicht gefunden")
logger.warning("Neue PDF nicht verfügbar")
return
logger.info(f"Öffne neue PDF im System-Viewer: {self.current_new_pdf_path}")
url = QUrl.fromLocalFile(str(self.current_new_pdf_path))
if not QDesktopServices.openUrl(url):
QMessageBox.critical(self, "Fehler", f"Konnte neue PDF nicht öffnen:\n{self.current_new_pdf_path}")
logger.error(f"Fehler beim Öffnen der neuen PDF: {self.current_new_pdf_path}")
def closeEvent(self, event):
"""Wird beim Schließen der Anwendung aufgerufen."""
# UI-Zustände speichern