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:
+17
-2
@@ -278,7 +278,10 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<widget class="QPushButton" name="view_ref_pdf">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Vorher (Referenz)</string>
|
||||
</property>
|
||||
@@ -286,6 +289,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="alpha">
|
||||
<property name="toolTip">
|
||||
<string>Doppelklick um diesen Slider auf Mitte zu stellen</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-100</number>
|
||||
</property>
|
||||
@@ -298,7 +304,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<widget class="QPushButton" name="view_new_pdf">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Nachher (Neu)</string>
|
||||
</property>
|
||||
@@ -326,6 +335,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="zoom">
|
||||
<property name="toolTip">
|
||||
<string>Doppelklick um den Zoom zurückzusetzen</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>25</number>
|
||||
</property>
|
||||
@@ -381,6 +393,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea_2">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Shape::NoFrame</enum>
|
||||
</property>
|
||||
|
||||
@@ -169,10 +169,11 @@ class Ui_MainWindow(object):
|
||||
|
||||
self.horizontalLayout_3.addItem(self.horizontalSpacer_4)
|
||||
|
||||
self.label_6 = QLabel(self.frame_4)
|
||||
self.label_6.setObjectName(u"label_6")
|
||||
self.view_ref_pdf = QPushButton(self.frame_4)
|
||||
self.view_ref_pdf.setObjectName(u"view_ref_pdf")
|
||||
self.view_ref_pdf.setEnabled(False)
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.label_6)
|
||||
self.horizontalLayout_3.addWidget(self.view_ref_pdf)
|
||||
|
||||
self.alpha = QSlider(self.frame_4)
|
||||
self.alpha.setObjectName(u"alpha")
|
||||
@@ -182,10 +183,11 @@ class Ui_MainWindow(object):
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.alpha)
|
||||
|
||||
self.label_7 = QLabel(self.frame_4)
|
||||
self.label_7.setObjectName(u"label_7")
|
||||
self.view_new_pdf = QPushButton(self.frame_4)
|
||||
self.view_new_pdf.setObjectName(u"view_new_pdf")
|
||||
self.view_new_pdf.setEnabled(False)
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.label_7)
|
||||
self.horizontalLayout_3.addWidget(self.view_new_pdf)
|
||||
|
||||
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
||||
|
||||
@@ -224,6 +226,7 @@ class Ui_MainWindow(object):
|
||||
|
||||
self.scrollArea_2 = QScrollArea(self.frame_3)
|
||||
self.scrollArea_2.setObjectName(u"scrollArea_2")
|
||||
self.scrollArea_2.setEnabled(True)
|
||||
self.scrollArea_2.setFrameShape(QFrame.Shape.NoFrame)
|
||||
self.scrollArea_2.setFrameShadow(QFrame.Shadow.Raised)
|
||||
self.scrollArea_2.setWidgetResizable(True)
|
||||
@@ -287,9 +290,15 @@ class Ui_MainWindow(object):
|
||||
self.pB_lade_aus_fn2.setText(QCoreApplication.translate("MainWindow", u"lade aus FN2", None))
|
||||
self.label.setText("")
|
||||
self.label_2.setText("")
|
||||
self.label_6.setText(QCoreApplication.translate("MainWindow", u"Vorher (Referenz)", None))
|
||||
self.label_7.setText(QCoreApplication.translate("MainWindow", u"Nachher (Neu)", None))
|
||||
self.view_ref_pdf.setText(QCoreApplication.translate("MainWindow", u"Vorher (Referenz)", None))
|
||||
#if QT_CONFIG(tooltip)
|
||||
self.alpha.setToolTip(QCoreApplication.translate("MainWindow", u"Doppelklick um diesen Slider auf Mitte zu stellen", None))
|
||||
#endif // QT_CONFIG(tooltip)
|
||||
self.view_new_pdf.setText(QCoreApplication.translate("MainWindow", u"Nachher (Neu)", None))
|
||||
self.label_5.setText(QCoreApplication.translate("MainWindow", u"Zoom", None))
|
||||
#if QT_CONFIG(tooltip)
|
||||
self.zoom.setToolTip(QCoreApplication.translate("MainWindow", u"Doppelklick um den Zoom zur\u00fcckzusetzen", None))
|
||||
#endif // QT_CONFIG(tooltip)
|
||||
self.accept_changes.setText(QCoreApplication.translate("MainWindow", u"\u2705 \u00c4nderungen \u00fcbernehmen", None))
|
||||
self.menuProjekt.setTitle(QCoreApplication.translate("MainWindow", u"Projekt", None))
|
||||
self.menuThema.setTitle(QCoreApplication.translate("MainWindow", u"Thema", None))
|
||||
|
||||
+58
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user