Feature: Ref-PDF direkt aus Kontextmenü öffnen
- Neue Kontextmenü-Aktion "Ref-PDF öffnen" für XML-Dateien - Aktion nur aktiv wenn Ref-PDF existiert und keine Diff-PDF vorhanden - Öffnet Ref-PDF im System-PDF-Viewer via QDesktopServices - Handler-Methode _open_ref_pdf_for_xml_file() mit Fehlerbehandlung Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1494,6 +1494,33 @@ class MainWindow(QMainWindow):
|
||||
|
||||
menu.addSeparator()
|
||||
|
||||
# Ref-PDF öffnen Aktion (nur enabled wenn Ref-PDF existiert und keine Diff-PDF)
|
||||
xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole)
|
||||
parent_item = item.parent()
|
||||
ref_pdf_can_open = False
|
||||
|
||||
if xml_file_obj and parent_item and self.project:
|
||||
xsl_file_obj = parent_item.data(0, Qt.ItemDataRole.UserRole)
|
||||
if xsl_file_obj:
|
||||
# Erstelle Pfade zu Ref-PDF und Diff-PDF
|
||||
xsl_id_str = "_".join(map(str, xsl_file_obj.id))
|
||||
xml_stem = xml_file_obj.xml.stem
|
||||
pdf_basename = f"{xml_stem}_xsl_{xsl_id_str}.pdf"
|
||||
|
||||
ref_pdf_path = self.project.project_dir / "ref" / pdf_basename
|
||||
diff_pdf_path = self.project.project_dir / "diff" / pdf_basename
|
||||
|
||||
# Ref-PDF kann geöffnet werden, wenn sie existiert und keine Diff-PDF vorhanden ist
|
||||
ref_pdf_can_open = ref_pdf_path.exists() and not diff_pdf_path.exists()
|
||||
|
||||
action_open_ref_pdf = QAction("Ref-PDF öffnen", self)
|
||||
action_open_ref_pdf.setIcon(QIcon(QIcon.fromTheme("document-open")))
|
||||
action_open_ref_pdf.triggered.connect(lambda: self._open_ref_pdf_for_xml_file(item))
|
||||
action_open_ref_pdf.setEnabled(ref_pdf_can_open)
|
||||
menu.addAction(action_open_ref_pdf)
|
||||
|
||||
menu.addSeparator()
|
||||
|
||||
action_edit = QAction("Bearbeiten", self)
|
||||
action_edit.setIcon(QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DocumentProperties)))
|
||||
action_edit.triggered.connect(lambda: self._edit_xml_file(item))
|
||||
@@ -4846,6 +4873,66 @@ class MainWindow(QMainWindow):
|
||||
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 _open_ref_pdf_for_xml_file(self, item):
|
||||
"""
|
||||
Handler für Kontextmenü-Aktion "Ref-PDF öffnen" bei XML-Dateien.
|
||||
Öffnet die Referenz-PDF für die ausgewählte XML-Datei im systemseitig installierten PDF-Viewer.
|
||||
|
||||
Args:
|
||||
item: Das TreeWidgetItem der XML-Datei
|
||||
"""
|
||||
try:
|
||||
if not self.project:
|
||||
QMessageBox.warning(self, "Fehler", "Kein Projekt geöffnet")
|
||||
return
|
||||
|
||||
# Hole XML-Datei-Objekt
|
||||
xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole)
|
||||
if not xml_file_obj:
|
||||
QMessageBox.warning(self, "Fehler", "XML-Datei-Objekt nicht gefunden")
|
||||
return
|
||||
|
||||
# Hole Parent-Item (XslFile)
|
||||
parent_item = item.parent()
|
||||
if not parent_item:
|
||||
QMessageBox.warning(self, "Fehler", "Parent-Item nicht gefunden")
|
||||
return
|
||||
|
||||
# Hole XslFile-Objekt
|
||||
xsl_file_obj = parent_item.data(0, Qt.ItemDataRole.UserRole)
|
||||
if not xsl_file_obj:
|
||||
QMessageBox.warning(self, "Fehler", "XSL-Datei-Objekt nicht gefunden")
|
||||
return
|
||||
|
||||
# Erstelle XSL-ID-String
|
||||
xsl_id_str = "_".join(map(str, xsl_file_obj.id))
|
||||
|
||||
# Ermittle PDF-Dateinamen
|
||||
xml_file_path = xml_file_obj.xml
|
||||
xml_stem = xml_file_path.stem
|
||||
pdf_basename = f"{xml_stem}_xsl_{xsl_id_str}.pdf"
|
||||
|
||||
# Pfad zur Ref-PDF
|
||||
ref_dir = self.project.project_dir / "ref"
|
||||
ref_pdf_path = ref_dir / pdf_basename
|
||||
|
||||
# Prüfe ob Ref-PDF existiert
|
||||
if not ref_pdf_path.exists():
|
||||
QMessageBox.warning(self, "Fehler", f"Referenz-PDF nicht gefunden:\n{pdf_basename}")
|
||||
logger.warning(f"Referenz-PDF nicht gefunden: {ref_pdf_path}")
|
||||
return
|
||||
|
||||
# Öffne Ref-PDF im System-Viewer
|
||||
logger.info(f"Öffne Referenz-PDF im System-Viewer: {ref_pdf_path}")
|
||||
url = QUrl.fromLocalFile(str(ref_pdf_path))
|
||||
if not QDesktopServices.openUrl(url):
|
||||
QMessageBox.critical(self, "Fehler", f"Konnte Referenz-PDF nicht öffnen:\n{ref_pdf_path}")
|
||||
logger.error(f"Fehler beim Öffnen der Referenz-PDF: {ref_pdf_path}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Öffnen der Referenz-PDF: {e}")
|
||||
QMessageBox.critical(self, "Fehler", f"Fehler beim Öffnen der Referenz-PDF:\n{str(e)}")
|
||||
|
||||
def eventFilter(self, obj, event):
|
||||
"""
|
||||
Event-Filter für Zoom per STRG+Mausrad im PDF-Viewer.
|
||||
|
||||
Reference in New Issue
Block a user