Commit Graph
100 Commits
Author SHA1 Message Date
infoandClaude Opus 4.8 74b08e31c7 Version 1.7.1: Icon-System vereinfacht und gecacht
- icons.py: _ICON_MAP entfernt (war reine Identitätsabbildung), Pfad
  wird direkt aus dem Namen abgeleitet
- icons.py: Render-Cache mit Schlüssel (name, theme-farbe) ergänzt,
  vermeidet wiederholtes SVG-Rendering bei Baum-/Kontextmenü-Aufbau
- icons.py: Qt-Ressourcen-Registrierung gekapselt (Import aus main.py
  hierher verschoben)
- download_icons.py: toten folder-open-Eintrag entfernt (in Feather
  nicht vorhanden, nirgends genutzt)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:51:21 +02:00
info c837802fe7 docs(web): update download links and version to 1.7.0
Update index.html to reflect the latest release version 1.7.0,
including MSI and ZIP download links with corrected release tag format.
2026-05-30 16:50:05 +02:00
infoandClaude Sonnet 4.6 712bd8917e version-bump Skill: Git-Tag nach Commit setzen
Der Skill setzt jetzt nach einem erfolgreichen Commit mit Versionserhöhung
automatisch einen passenden annotated Git-Tag (z.B. v1.7.1).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 16:38:57 +02:00
infoandClaude Sonnet 4.6 ec753a5770 Version 1.7.0: Feather Icons via Qt-Ressourcensystem eingebunden
Alle QIcon.fromTheme()-Aufrufe durch eingebettete Feather Icons ersetzt,
die unter Windows zuverlässig funktionieren. Icons passen sich automatisch
der Palette-Farbe des aktiven Themes an (QSvgRenderer + currentColor).

- scripts/download_icons.py: lädt 20 Feather-SVGs von GitHub
- src/res/icons/: 20 SVG-Dateien (MIT-Lizenz, stroke=currentColor)
- src/res/resources.qrc + resources_rc.py: Qt-Ressourcensystem
- src/icons.py: icon()-Hilfsfunktion mit Palette-Farb-Injection
- MainWindow, AppSettings, XslDependencyDialog, tree_manager,
  XsltParamsEditDialog, ProjectXsltParamsDialog: Icons gesetzt
- Theme-Wechsel aktualisiert Icons und Tree-Items sofort
- THIRD_PARTY_LICENSES.txt: Feather Icons (MIT) eingetragen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 16:13:22 +02:00
infoandClaude Sonnet 4.6 bf2db92040 Version 1.6.6: Versionsanzeige im Info-Dialog bei PyInstaller-Bundle gefixt
Im PyInstaller-Bundle fehlten .dist-info-Metadaten, wodurch importlib.metadata
keine Paketversionen liefern konnte. Lösung: DocuMentor.spec erzeugt beim Build
einen Versions-Snapshot (versions.json) der ins Bundle eingebettet wird.
license_parser.py liest diesen Snapshot im Bundle-Modus statt importlib.metadata.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 13:54:27 +02:00
infoandClaude Sonnet 4.6 19f7deec20 build_msi.py: Klare Fehlermeldung bei fehlendem wix-Befehl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 13:34:30 +02:00
infoandClaude Sonnet 4.6 5f10b79906 Version 1.6.5: 'Bearbeiten' als Standard-Aktion im Tree-Kontextmenü
Der Menüpunkt 'Bearbeiten' steht nun ganz oben im Kontextmenü aller
Knotentypen (TreeNode, XslFile, XmlFile), wird fett dargestellt und
öffnet sich per Doppelklick auf den jeweiligen Knoten.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 13:17:01 +02:00
infoandClaude Sonnet 4.6 1bd20824b4 Version 1.6.4: Dep-Update-Check und Permission-Allowlist für Claude Code
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 12:41:34 +02:00
infoandClaude Sonnet 4.6 0d25dc4b35 Claude Code: Permission-Allowlist für read-only Befehle hinzugefügt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 12:31:56 +02:00
info ce7290d6e8 Merge branch 'master' of https://code.vitaligraf.de/info/xsl-validator 2026-05-23 16:58:45 +02:00
infoandClaude Sonnet 4.6 e84dd6c232 version-bump Skill: uv version --bump statt direkter pyproject.toml-Bearbeitung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 16:55:22 +02:00
infoandClaude Sonnet 4.6 bc07c71f39 Neuer Skill: dep-update-check für Dependency- und Python-Updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 20:15:44 +02:00
info 47e98b88ef Neues Icon 2026-05-03 16:29:07 +02:00
info 799d3dc2ba Slogan geendert 2026-05-03 16:28:28 +02:00
info 938fc9bfeb alte Webseite gelöscht 2026-05-03 16:23:44 +02:00
info ea7fbaf8b8 README.md angepasst 2026-04-25 20:43:21 +02:00
info 9a2fb45802 Korrektur in index.html 2026-04-25 20:35:06 +02:00
infoandClaude Sonnet 4.6 1501f8208d Web: Datenschutz- und Impressumsseite zur Landing Page hinzugefügt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 20:25:00 +02:00
infoandClaude Sonnet 4.6 2b36afc451 Fix: WiX-Installationsbefehl mit expliziter Version 6.* präzisiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:12:16 +02:00
infoandClaude Sonnet 4.6 4ec5125ea2 Fix: Konsolenfenster bei Subprozessen unter Windows unterdrückt (v1.6.3)
subprocess.CREATE_NO_WINDOW-Flag in transform.py und worker_pool_base.py
gesetzt, damit beim Start aus einer PyInstaller-EXE keine Konsolenfenster
für Saxon, FOP und diff-pdf erscheinen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 15:57:14 +02:00
infoandClaude Sonnet 4.6 0f3c0dd878 Fix: PyInstaller-EXE zeigt App-Symbol korrekt via sys._MEIPASS und datas (v1.6.2)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 15:26:09 +02:00
infoandClaude Sonnet 4.6 16de979524 Fix: Windows-Titelleistensymbol durch AppUserModelID und setWindowIcon korrekt gesetzt (v1.6.1)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 15:02:37 +02:00
infoandClaude Sonnet 4.6 394cbcf4be Refactor: Web-Landingpage mit industriellem Design neu gestaltet
Altes elegantes Dunkelmodus-Design durch ein industrielles Beton-Stahl-Theme ersetzt; nicht mehr benötigte Schriftarten-Dateien und alte HTML-Versionen entfernt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 11:24:20 +02:00
infoandClaude Sonnet 4.6 9fad317891 Feat: XML-Knoten-Bearbeiten-Dialog implementiert (v1.6.0)
Neuer Dialog ermöglicht es, einem XML-Knoten XSL-Zuordnungen hinzuzufügen
oder zu entfernen. XmlToXslAssignDialog wiederverwendet mit edit_mode,
Vorauswahl per preselected_xsl_ids und get_selection_diff(). Beim Entfernen
werden zugehörige PDF-Dateien gelöscht; bei verbleibend leerer Zuordnung
wird das physische Löschen der XML-Datei angeboten.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 21:10:58 +02:00
infoandClaude Sonnet 4.6 762523d669 Fix: Build-Skripte verwenden Versionsnummer aus pyproject.toml für Ausgabedateien (v1.5.1)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:23:12 +02:00
infoandClaude Sonnet 4.6 b900455d69 Fix: Code-Qualität und Effizienz verbessern (v1.5.1)
- main.py: print() durch logging ersetzt, cleanup nach Logger-Init verschoben
- conf.py: funktionsloses global-Statement entfernt
- database.py: unerreichbaren zweiten Projekt-Check entfernt
- hash_calculation.py: deprecated _handle_xml_file_drop entfernt, nutzlosen
  _get_all_project_xml_files-Wrapper entfernt, seen_paths-Scope-Bug in
  rekursiver Traversierung behoben (O(N²) → O(N)), veraltete List[]-Syntax
  und ungenutzte Imports bereinigt
- transform.py: TOCTOU-Muster (exists+stat) durch direktes stat() mit
  FileNotFoundError ersetzt; fop_conf.exists() gecacht

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:02:59 +02:00
infoandClaude Opus 4.6 3d2efe628b Feat: Projekt-Baum verschlanken und XSL-Dateiname im Edit-Dialog anzeigen (v1.5.0)
Mittlere Spalte (Kontextinfos) aus dem Projekt-Baum entfernt, sodass nur noch
Bezeichnung und Diff-PDF-Anzahl angezeigt werden. XSL-Dateiname wird jetzt als
nur-lese Label oben im XslFileEditDialog angezeigt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 12:38:37 +02:00
infoandClaude Opus 4.6 8c59187fe9 Feat: Suchfilter durchsucht auch XSL-Dateinamen (v1.4.1)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 12:02:06 +02:00
infoandClaude Opus 4.6 a0626a78a3 Feat: Projektweite XSLT-Parameter mit Vererbungshierarchie (v1.4.0)
Ermöglicht die Definition von XSLT-Parametern auf Projektebene, die als
Basis für alle Transformationen dienen und von TreeNode- bzw. XslFile-
Parametern überschrieben werden können (Projekt < TreeNode < XslFile).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 10:58:01 +02:00
infoandClaude Opus 4.6 d1def05607 Feat: Suchfilter für TreeNodes und XSL-Dateien im Hauptfenster (v1.3.0)
Neues Suchfeld über dem Baum filtert Knoten und XSL-Dateien per
case-insensitive Textsuche. Übergeordnete Knoten bleiben bei
Kind-Treffern sichtbar und werden automatisch expandiert. Der
gespeicherte Expand-Status wird beim Leeren der Suche wiederhergestellt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 19:55:06 +02:00
infoandClaude Opus 4.6 0560dbafe4 Fix: Maximize-Button im XSL-Abhängigkeitsdialog unter Windows ermöglichen (v1.2.8)
WindowMinMaxButtonsHint gesetzt, damit der Dialog auch unter Windows maximiert werden kann.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 13:24:32 +02:00
infoandClaude Opus 4.6 7406c65bf9 Docs: Commit-Skills und Claude-Plugin-Einstellungen hinzufügen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 20:50:16 +02:00
infoandClaude Opus 4.6 9370c03e90 Feat: Veraltete XSL-Einträge nach DB-Import erkennen und entfernen (v1.2.7)
Beim Import aus der PostgreSQL-Datenbank werden nun XSL-Einträge erkannt,
die nicht mehr in der DB vorhanden sind. Ein Dialog zeigt diese gruppiert
in einer Baumansicht an und bietet die Option, sie samt nicht mehr
verwendeter XML-/PDF-Dateien aus dem Projekt zu entfernen.
Leere TreeNodes werden automatisch bereinigt.

Zusätzlich: SQL-Filter `r3.export = 0` in data.sql ergänzt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 20:38:36 +02:00
infoandClaude Opus 4.6 d7282082f4 Fix: Version und Drittanbieter-Lizenzen im PyInstaller-Build anzeigen (v1.2.6)
pyproject.toml und THIRD_PARTY_LICENSES.txt werden nun ins PyInstaller-Bundle
eingebunden. Pfadauflösung nutzt sys._MEIPASS im Bundle-Kontext.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 19:32:03 +01:00
infoandClaude Opus 4.6 09312dbd66 Feat: Legende oben links und auto-fit bei Suche/Filter im Abhängigkeitsgraph (v1.2.5)
- Legende von unten links nach oben links verschoben, damit vis.js-Navigationspfeile nicht überdeckt werden
- network.fit() mit Animation bei jeder Suche und Checkbox-Änderung, sodass alle relevanten Knoten im Viewport sichtbar sind

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 21:11:14 +01:00
info 1265309b41 Anderes Icon für Eindstellungen im XSL-Dependencies-Dialog 2026-03-22 20:40:20 +01:00
infoandClaude Opus 4.6 bf352a1fcd Feat: Individuelle Knoten-Styles im XSL-Abhängigkeitsgraph nach Dateistatus (v1.2.4)
Knoten im vis.js Netzwerkgraph werden nun farblich nach drei Kategorien
unterschieden: blau (nur im Verzeichnis), grün (im Projekt referenziert),
rot/gestrichelt (im Projekt, aber Datei fehlt). Inkl. Legende und
erweitertem Tooltip mit Projekt-Zugehörigkeit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 19:57:17 +01:00
infoandClaude Opus 4.6 84d0866f72 Feat: Doppelklick auf Netzwerkgraph-Knoten kopiert Dateiname ins Suchfeld (v1.2.3)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:46:45 +01:00
infoandClaude Opus 4.6 cdca38eb98 Feat: Klickbare Webseite-Links in der AboutDialog-Abhängigkeitstabelle (v1.2.2)
URLs in der Spalte "Webseite" werden als anklickbare Links dargestellt,
die sich im Standardbrowser öffnen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 20:01:58 +01:00
infoandClaude Opus 4.6 36d257e2e2 Fix: HTML-Tooltips im vis.js Abhängigkeitsgraph korrekt rendern (v1.2.1)
vis.js rendert String-Titles als Klartext. Node-Titles werden nun vor der
DataSet-Erstellung in DOM-Elemente konvertiert, damit HTML-Tags (<b>, <br>)
korrekt dargestellt werden.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 19:54:38 +01:00
infoandClaude Opus 4.6 4e65a6ad4c Feat: vis.js Layout-Switcher im XSL-Abhängigkeitsgraph (v1.2.0)
Layout-Umschaltung zwischen barnesHut, ForceAtlas2, Repulsion und hierarchischem
Layout mit konfigurierbaren Parametern pro Layout. Einstellungen werden persistent
in AppSettings gespeichert und beim Öffnen des Dialogs wiederhergestellt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 19:32:29 +01:00
infoandClaude Opus 4.6 f7ef90079a Feat: License-Check-Skill und lxml-Lizenzeintrag hinzugefügt (v1.1.1)
Neuer Skill prüft bei jedem Commit automatisch ob THIRD_PARTY_LICENSES.txt
mit pyproject.toml synchron ist. Fehlenden lxml-Eintrag ergänzt und
Kategorie-Spalte im AboutDialog verbreitert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:20:07 +01:00
infoandClaude Opus 4.6 a8b4fac085 Feat: Hilfe-Menü mit Info-Dialog und Lizenz-Parser hinzugefügt (v1.1.0)
Neues Menü "Hilfe > Info" zeigt Programmversion, Python-Version und alle
Drittanbieter-Bibliotheken mit installierten Versionen und Lizenzinfos an.
Der license_parser liest THIRD_PARTY_LICENSES.txt als Datenquelle und
ergänzt tatsächlich installierte Versionen via importlib.metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:54:21 +01:00
infoandClaude Opus 4.6 c69c163b34 Feat: Version-Bump-Skill hinzugefügt und installer.iss-Version synchronisiert
installer.iss hatte noch Version 0.1.0 statt 1.0.0. Neuer Skill fragt
bei jedem Commit, ob die Programmversion aktualisiert werden soll.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:02:05 +01:00
infoandClaude Opus 4.6 64408157ba Docs: AGENTS.md mit CLAUDE.md konsolidiert und Einzeldatei entfernt
Code-Style-Richtlinien (Imports, Type Annotations, Naming, Logging,
Docstrings), UI-Import-Pattern, Thread-Pattern, RAM-Optimierung und
Test-Infos aus AGENTS.md übernommen. Veraltete Einträge korrigiert
(qdarktheme entfernt, _execute_sql_query → DatabaseQueryThread,
XslDependencyDialog dokumentiert).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 15:25:10 +01:00
infoandClaude Opus 4.6 3dcbf783b1 Feat: Sidebar mit Suchfilter und lxml-Parser im XslDependencyDialog
- Ein-/ausblendbare Sidebar mit tab-übergreifender Suche hinzugefügt
- Graph-Suchfilter blendet nicht-betroffene XSL-Dateien aus dem Netzwerkgraph aus
- Regex-basierte XSL-Abhängigkeitserkennung durch lxml-Parser ersetzt
- Suchfilter wird beim Tab-Wechsel erneut angewendet

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 21:15:16 +01:00
infoandClaude Opus 4.6 48ab596476 Feat: UI-Datei für XslDependencyDialog hinzugefügt und _ui.py neu generiert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 20:23:35 +01:00
infoandClaude Opus 4.6 bd6827cb2f Docs: BUILD.md mit windows_distribution.md konsolidiert und Einzeldatei entfernt
Gesamte Windows-Distribution-Dokumentation (ZIP, Setup.exe, MSI) in BUILD.md
zusammengeführt. docs/windows_distribution.md entfernt, da redundant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 19:37:10 +01:00
infoandClaude Opus 4.6 36911b111d Feat: Interaktiver XSL-Abhängigkeitsgraph mit vis.js und THIRD_PARTY_LICENSES aktualisiert
XslDependencyDialog mit zwei Tabs: Baumansicht (vorwärts/rückwärts-Abhängigkeiten)
und interaktiver Netzwerkgraph (vis.js in QWebEngineView mit Physics-Simulation,
Hover-Tooltips, Nachbar-Hervorhebung). Graceful Fallback wenn WebEngine fehlt.
THIRD_PARTY_LICENSES um psutil, PyInstaller, Pillow, vis-network ergänzt und
Versionen aktualisiert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 20:50:09 +01:00
infoandClaude Opus 4.6 71fa48a514 Feat: XSL-Abhängigkeitsgraph für import/include-Erkennung in Transformations-Pipeline
is_up_to_date() prüft nun auch transitiv importierte/inkludierte XSL-Dateien.
Abhängigkeiten werden per Tooltip und Kontextmenü-Aktion im TreeWidget angezeigt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:37:05 +01:00
infoandClaude Opus 4.6 140905af77 Refactor: Installationsbereich umstrukturiert und PostgreSQL-Hinweis entfernt
Reihenfolge: Windows-Pakete → Hinweis → Quellcode → Hinweis.
PostgreSQL aus den Installationshinweisen entfernt, da optional.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 18:12:09 +01:00
infoandClaude Opus 4.6 1a12da19f3 Feat: Windows-Download (MSI/ZIP) zum Installations-Bereich der Webseite hinzugefügt
Installationssektion um vorkompilierte Windows-Pakete (MSI-Installer und
portables ZIP-Archiv) erweitert, inkl. JDK-Empfehlung für Pool-Worker-Performance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 17:43:10 +01:00
info 84bbf201d0 EInige Symbole zu den Buttons hinzugefügt 2026-03-14 17:16:27 +01:00
infoandClaude Sonnet 4.6 4f2d136d17 Feat: Ref-PDF automatisch im internen Viewer anzeigen wenn keine Diff-PDF vorhanden
Beim Auswählen eines XML-Knotens im Baum wird jetzt die Ref-PDF direkt im
internen Viewer geladen, sofern keine Diff-PDF existiert. Der Kontextmenü-Eintrag
"Ref-PDF öffnen" und der zugehörige Handler wurden entfernt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 17:01:19 +01:00
infoandClaude Sonnet 4.6 93f9bb90dd Fix: QApplication.processEvents() Anti-Pattern entfernt
_close_all_pdf_documents() führt bereits doc.close() + gc.collect() durch,
wodurch Dateihandles freigegeben werden. Das nachfolgende processEvents()
war redundant und birgt das Risiko von Re-Entrant-Events.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:20:36 +01:00
infoandClaude Sonnet 4.6 29574ce0dc Perf: PDF-Thumbnails progressiv rendern statt alle auf einmal
Placeholder-Labels werden sofort erstellt, das eigentliche Rendern
erfolgt asynchron über QTimer.singleShot(0) — ein Thumbnail pro
Event-Loop-Iteration. UI friert nicht mehr ein; RAM-Spitze wird verteilt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:19:42 +01:00
infoandClaude Sonnet 4.6 87b2d9273f Refactor: Worker-Pool-Zugriff über öffentliche Getter statt private Modul-Globals
get_saxon_worker_pool() und get_fop_worker_pool() in transform.py hinzugefügt.
worker_pool.py greift nicht mehr direkt auf transform._saxon_worker_pool /
transform._fop_worker_pool zu, sondern verwendet die Getter/Setter konsistent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:18:01 +01:00
infoandClaude Sonnet 4.6 cfbdb8b7fa Perf: Tool-Konfigurationsauflösung in _create_transformation_job gecacht
Die 5 linearen Lookups (java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir)
werden jetzt nur einmalig pro Projekt aufgelöst (_get_cached_project_tools).
Bei Batch-Transformationen entfällt das wiederholte Durchsuchen der Listen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:11:58 +01:00
infoandClaude Sonnet 4.6 edfe424a6a Perf: O(n²) Baumtraversierung bei Dateinamen-Konfliktprüfung behoben
_is_filename_used_in_project wurde bei jedem while-Schleifen-Durchlauf
aufgerufen und traversierte den kompletten Baum neu. Ersetzt durch
_collect_project_filenames(), die einmalig ein Set aufbaut → O(1) Lookups.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:09:10 +01:00
infoandClaude Sonnet 4.6 b954106a0d Refactor: Stringly-typed Knotentypen durch ItemType-Enum ersetzt
ItemType(Enum) mit TREE_NODE, XSL_FILE, XML_FILE, UNKNOWN statt
String-Konstanten in tree_manager.py. Verbessert Typsicherheit und IDE-Support.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:08:23 +01:00
infoandClaude Sonnet 4.6 22bc693d4d Perf: Polars-Import lazy gemacht (nur bei DB-Nutzung laden)
Polars wird nicht mehr beim App-Start importiert, sondern erst wenn
eine Datenbankabfrage tatsächlich ausgeführt wird. Beschleunigt den
Kaltstart der Anwendung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:05:48 +01:00
infoandClaude Sonnet 4.6 9be6ac24e9 Refactor: AppSettings CRUD-Methoden durch generische Helfer vereinfacht
4 generische Helfer (_add_item, _remove_item, _edit_item, _update_remove_button)
ersetzen 26 nahezu identische CRUD-Methoden für 7 Tool-Typen.
_make_centered_item eliminiert QTableWidgetItem-Duplikation in populate-Methoden.
Ergebnis: 805 → 508 Zeilen (-37%).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:53:34 +01:00
infoandClaude Sonnet 4.6 37ebdff349 Refactor: Gemeinsame Basisklassen für Worker-Pools und Parameter-Dialoge
- BaseWorkerPool (worker_pool_base.py): Eliminiert ~450 Zeilen Duplikation
  aus saxon_pool.py, saxon_pool_s9api.py und fop_pool.py; behebt stderr-Handle-Leak
- XsltParamsEditDialog (XsltParamsEditDialog.py): Gemeinsame Basisklasse für
  TreeNodeEditDialog und XslFileEditDialog; reduziert je 162 auf 8 Zeilen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:49:57 +01:00
infoandClaude Opus 4.6 cb90f9e483 Refactor: Code-Duplikation reduziert und Dead Code entfernt
- blake2b-Hash-Berechnung in zentrale Utility-Funktion extrahiert (src/utils.py) mit chunk-basiertem Hashing für bessere RAM-Effizienz
- _transform_all_xml_files und _transform_all_xml_files_force zu einer Methode mit force-Parameter zusammengeführt
- Project-Lookup-Methoden (getXsl, getJavaVm, etc.) über gemeinsame _lookup()-Hilfsmethode konsolidiert
- Duplizierte XML-Sammel-Methoden entfernt, Set-basierte Duplikatsprüfung eingeführt
- Ungenutzte Imports, Dead Code und wirkungslose Ausdrücke entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:21:02 +01:00
info 6fe61b9a42 Kleine fix für die Webseite 2026-03-07 20:10:59 +01:00
info ec9ac22296 Fonts werden lokal gespeichert. 2026-03-03 21:20:02 +01:00
info d5c035a316 Neue Seiten für den Projekt 2026-03-03 20:47:56 +01:00
info affba2a9ca Fix: PyInstaller-Bundle für installierte Version repariert (connectorx, SQL-Ressourcen)
- connectorx via collect_all() eingebunden statt hiddenimports (Rust-PYD + __init__.py + Metadaten als Einheit)
- SQL/CSV-Ressourcen (src/res/) ins PyInstaller-Bundle aufgenommen
- Pfadauflösung in database.py auf sys._MEIPASS umgestellt für installierten Modus
- connectorx als explizite Abhängigkeit in pyproject.toml ergänzt
- Dokumentation (windows_distribution.md) um collect_all-Pattern und _MEIPASS-Hinweise erweitert
- Version auf 1.0.0 aktualisiert, Hersteller-Informationen ergänzt
2026-02-15 19:51:58 +01:00
infoandClaude Opus 4.6 ec33a5b586 Feature: Timeout-Einstellung und asynchrone DB-Abfrage mit Abbrechen-Dialog
DB-Abfragen laufen nun in einem Hintergrund-Thread mit QProgressDialog,
sodass die UI nicht mehr einfriert. connect_timeout wird als konfigurierbarer
Parameter (1-300s, Standard: 10) im Connection-String übergeben.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 21:31:40 +01:00
infoandClaude Opus 4.6 66496c26d8 Fix: Projektname wird beim Bearbeiten im PdfProject-Dialog gespeichert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:53:00 +01:00
infoandClaude Opus 4.6 a0bc55fa7b Refactor: TreeWidget-Styling in Qt Designer UI-Dateien verlagert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:17:21 +01:00
infoandClaude Opus 4.6 b985e1eeee Feature: Löschen-Funktion für TreeNode-Knoten im Baum implementiert
Rekursive Löschung von TreeNodes mit PDF-Bereinigung, automatischer
physischer Löschung nicht mehr verwendeter XML-Dateien und korrekter
"anderswo verwendet"-Prüfung durch vorheriges Entfernen aus dem
Datenmodell.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:08:23 +01:00
infoandClaude Opus 4.6 52180e38ce Feature: Löschen-Funktion für XSL-Knoten im Baum implementiert
Ersetzt den bisherigen Stub durch eine vollständige Implementierung mit
Bestätigungsdialog, automatischer PDF-Bereinigung, optionaler physischer
XML-Löschung und Datenmodell-Aktualisierung.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:12:24 +01:00
info 29f34c4d85 Refactor: projectPath-Widget in Qt Designer verlagert
- projectPath-Label jetzt vollständig in MainWinddow.ui definiert
- StyleSheet (padding, font-weight) in UI-Datei integriert
- Dynamische Widget-Erstellung aus MainWindow.py entfernt (9 Zeilen Code)
- MainWinddow_ui.py automatisch neu generiert mit Styling
2026-02-07 20:35:17 +01:00
info 747c6dbfec Feature: Projektpfad-Anzeige über TreeWidget hinzugefügt 2026-02-07 20:25:21 +01:00
info 9180fc342e Feature: Häkchen im Menü 'Vorhandene Projekte' für geladenes Projekt 2026-02-07 20:00:50 +01:00
info 9e58b3a9a1 Feature: Automatische PDF-Bereinigung beim Entfernen von XML-Dateien
Implementiert intelligente Löschlogik die zugehörige PDF-Dateien (new/ref/diff) automatisch entfernt wenn eine XML-Datei aus einem XSL-Knoten gelöscht wird. PDFs werden nur gelöscht wenn die XML+XSL-Kombination nicht mehr anderswo im Projektbaum verwendet wird.
2026-02-07 19:47:02 +01:00
info 0fd0703dbb Feature: Expand-Status beim Projektwechsel automatisch speichern
- open_existing_project() speichert nun das vorherige Projekt vor dem Wechsel
- Expand-Status der aufgeklappten Tree-Knoten bleibt beim Projektwechsel erhalten
- Umfassendes Logging für Debugging
- Fehlerbehandlung für robuste Ausführung
2026-02-01 15:51:50 +01:00
info e6b2743677 Feature: Expand-Status von Tree-Knoten bei jedem Speichern persistent sichern
- ProjectData um optionales Feld 'expanded_nodes' erweitert (abwärtskompatibel)
- _save_project_settings() speichert nun automatisch den Expand-Status
- Expand-Status wird bei allen Speicheroperationen gesichert:
  * Beim Bearbeiten von TreeNodes und XslFiles
  * Bei Drag&Drop-Operationen im Tree
  * Bei Hash-Berechnungen für XML-Dateien
  * Beim Laden von Daten aus der Datenbank
  * Beim Beenden der Anwendung
- Beim Laden eines Projekts werden aufgeklappte Knoten wiederhergestellt
- Rekursive Speicherung und Wiederherstellung für TreeNode und XslFile
- Umfassendes Logging für Debugging und Fehlerbehandlung
2026-02-01 15:44:55 +01:00
info 0f14418749 UI: PDF-Thumbnails kompakt und zentriert anzeigen
- Thumbnails horizontal zentriert im ScrollArea-Layout
- Layout-Spacing auf 5px reduziert für kompakte Darstellung
- Seitennummer-Labels auf 18px Höhe begrenzt
- Ränder um Layout und Labels entfernt
- Expandierenden Spacer am Ende hinzugefügt, damit Thumbnails oben bleiben
- Verbesserte Übersichtlichkeit der Thumbnail-Navigation
2026-02-01 15:06:22 +01:00
info 3bdc0a0daa Feature: Aktions-Menü mit Batch-Transformationen und UI-Bereinigung
- Neues Aktions-Menü mit Transformations- und Datenbankfunktionen
- Menü wird beim Projekt-Laden automatisch aktiviert
- Neue Aktion: Alle XML-Dateien transformieren (inkrementell)
- Neue Aktion: Alle XML-Dateien neu transformieren (force)
- Neue Aktion: Aus Datenbank laden (ersetzt Button)
- Entfernte obsolete Buttons (pushButton, pushButton_2, pB_lade_aus_fn2)
- UI-Bereinigung: Button-Frame unterhalb TreeWidget entfernt
- Batch-Transformationen sammeln rekursiv alle XML/XSL-Paare
- Bestätigungsdialoge mit Job-Anzahl und Warnungen
- Deutsche Log-Meldungen und Fehlertexte
2026-01-25 15:23:32 +01:00
info 2858d46ef1 Refactor: Worker-Log-Verzeichnis von 'temp' zu 'tmp' umbenennen 2026-01-23 19:38:57 +01:00
info afff427f67 Feature: Prüfung auf Existenz von XML- und XSL-Dateien vor Transformation
- Prüfe ob XML- und XSL-Dateien existieren bevor TransformationJobs erstellt werden
- Zeige detaillierte Fehlermeldungen wenn Dateien fehlen
- Zähle und melde übersprungene Jobs bei Batch-Verarbeitung
- Verhindere mehrfache Fehlerdialoge durch zentrale Fehlerbehandlung
- Logge fehlende Dateien mit vollständigen Pfaden für einfaches Debugging
2026-01-22 19:37:53 +01:00
info d74dfd20e5 Fix: QIcon.ThemeIcon.TextXGeneric durch korrekten String-Namen ersetzen 2026-01-22 19:33:15 +01:00
info bad4d55ebd Feature: Automatische Aktualisierung des Projekte-Menüs und Validierung der Projekt-Verzeichnisse
- AppSettings: Menü-Update nach jedem app_settings.save() Aufruf
- MainWindow: Prüfung der Projekt-Verzeichnis-Existenz beim Start
- Nur gültige Projekte werden im Menü angezeigt
- Ungültige Projekte werden ausgeblendet mit Logging-Warnung
- Memory-Leak-Prävention durch korrektes Aufräumen alter Menüs
2026-01-20 20:29:34 +01:00
info c8e1a541cd Fix: Log-Verzeichnis mit parents=True erstellen, um FileNotFoundError zu vermeiden 2026-01-20 19:50:42 +01:00
info df1bb65136 Refactor: Entferne ungenutzten datetime-Import in cleanup_old_logs 2026-01-18 19:08:12 +01:00
info 43bd0ec8e6 Füge WiX v6-kompatiblen MSI-Installer hinzu
- Erstelle generate_wix_files.py zum Ersetzen von 'wix heat'
- Migriere DocuMentor.wxs auf WiX v4/v6-Syntax
- Füge build_msi.py für automatisierten Build hinzu
- Aktualisiere Dokumentation für WiX v6
- Erweitere .gitignore für WiX-Artefakte

WiX v6 hat das 'heat' Tool entfernt, daher wurde ein Python-Skript
erstellt, das automatisch alle Dateien aus dist/DocuMentor harvested
und eine WiX-konforme ProductFiles.wxs generiert.

Der neue Build-Prozess:
1. uv run python build_windows.py
2. uv run python generate_wix_files.py
3. wix build DocuMentor.wxs ProductFiles.wxs -o DocuMentor.msi

Oder vereinfacht: uv run python build_msi.py
2026-01-18 19:01:05 +01:00
info c3d1bbc74c Docs: WiX MSI-Installer Anleitung zu Windows Distribution hinzugefügt
- Vollständige WiX-Konfiguration (DocuMentor.wxs)
- Heat-Tool für automatisches File Harvesting
- Build-Automatisierung mit build_msi.py
- Silent Installation und GPO-Deployment
- MSI-Vorteile vs. Inno Setup detailliert erklärt
2026-01-18 17:58:37 +01:00
info b1f259e443 Build: Ungenutzte pyqtdarktheme-Dependency aus PyInstaller-Config entfernt 2026-01-18 17:55:17 +01:00
info 70c12a91dc Merge: Branch 'dist' in 'master' integriert
- Windows-Distribution-Infrastruktur (PyInstaller, Inno Setup)
- FOP Worker Pool für Performance-Steigerung
- PDF-Viewer Zoom-Feature
- Performance-Einstellungen in UI
- Build-Dokumentation und Icon-Ressourcen

Konflikte gelöst:
- pyproject.toml: Neueste ruff-Version beibehalten, Build-Dependencies hinzugefügt
- uv.lock: Automatisch neu generiert
2026-01-18 16:59:48 +01:00
info 5ab8674833 Feature: Icons für TreeNodes, XSL-Nodes und XML-Nodes hinzufügen
Fügt visuelle Icons für bessere Übersichtlichkeit im TreeWidget hinzu:
- TreeNode: Ordner-Icon (folder-open mit Fallback)
- XslFile: Script/Code-Icon (text-x-script)
- XmlFile: XML-Dokument-Icon (text-xml)

Icons verwenden QIcon.ThemeIcon für bessere Kompatibilität und
System-Theme-Integration mit automatischen Fallbacks.
2026-01-18 13:48:20 +01:00
info f4d2d4b944 Docs: Entwicklerrichtlinien für KI-Coding-Agenten hinzufügen
Fügt AGENTS.md mit umfassenden Richtlinien für Coding-Agenten hinzu:
- Sprachkonventionen (Deutsch)
- Code-Style & Type Annotations
- Build-/Test-Kommandos mit uv
- PySide6 UI-Integration
- Pydantic Models & Settings
- Import-Organisation & Error Handling
2026-01-18 13:40:15 +01:00
infoandClaude Sonnet 4.5 8a37992bea Feature: XSL-Knoten bei fehlenden Dateien deaktivieren
Beim Laden des Projekts werden nun auch XSL-Knoten automatisch deaktiviert (ausgegraut), wenn die entsprechende XSL-Datei nicht im XSL-Verzeichnis vorhanden ist.

Zusätzlich werden alle untergeordneten XML-Knoten ebenfalls deaktiviert, wenn die übergeordnete XSL-Datei fehlt. Dies verhindert, dass Transformationen mit fehlenden XSL-Dateien gestartet werden und gibt sofortige visuelle Rückmeldung.

- XSL-Knoten werden mit setDisabled(True) deaktiviert
- Tooltip zeigt den vollständigen Pfad der fehlenden XSL-Datei
- Alle untergeordneten XML-Knoten werden ebenfalls deaktiviert
- Warnung wird ins Log geschrieben

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:29:29 +01:00
infoandClaude Sonnet 4.5 91fe597301 Feature: XML-Knoten bei fehlenden Dateien deaktivieren
Beim Laden des Projekts in den TreeWidget werden nun XML-Knoten automatisch deaktiviert (ausgegraut), wenn die entsprechende XML-Datei nicht im Projekt vorhanden ist. Dies verbessert die Benutzerfreundlichkeit durch sofortige visuelle Rückmeldung über fehlende Dateien.

- XML-Knoten werden mit setDisabled(True) deaktiviert
- Tooltip zeigt den vollständigen Pfad der fehlenden Datei
- Warnung wird ins Log geschrieben

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:22:42 +01:00
infoandClaude Sonnet 4.5 f91ffd83a2 Fix: Accept-Changes-Button beim PDF-Reset deaktivieren
Beim Zurücksetzen der PDF-Ansicht wird nun auch der "Änderungen akzeptieren" Button deaktiviert, um einen konsistenten UI-Zustand zu gewährleisten.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:08:54 +01:00
infoandClaude Sonnet 4.5 ee9c40610a Feature: Automatische Bereinigung alter Log-Dateien beim Start
Beim Anwendungsstart werden nun automatisch Log-Dateien gelöscht, die älter als 24 Stunden sind. Dies hilft, Speicherplatz zu sparen und das Log-Verzeichnis übersichtlich zu halten.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 19:52:41 +01:00
infoandClaude Opus 4.5 3acdfbb5c8 Refactor: MainWindow in 7 Mixins aufgeteilt (80% Code-Reduktion)
MainWindow.py von 5025 auf 983 Zeilen reduziert durch Extraktion in:
- TreeManagerMixin: Baumstruktur-Verwaltung (~1136 Zeilen)
- PdfViewerMixin: PDF-Anzeige und Rendering
- WorkerPoolMixin: Saxon/FOP Worker-Pool-Verwaltung
- DatabaseMixin: PostgreSQL-Operationen
- DragDropMixin: Drag-and-Drop für XML-Dateien
- HashCalculationMixin: blake2b Hash-Berechnung
- TransformationMixin: XSL-Transformationen

Zusätzlich Thread-Klassen in threads.py ausgelagert.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 18:23:55 +01:00
infoandClaude Sonnet 4.5 5a2da7f264 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>
2026-01-11 16:30:09 +01:00
infoandClaude Sonnet 4.5 4eb80c92b2 Update: Abhängigkeiten aktualisiert und pyqtdarktheme entfernt
- Python-Version auf >=3.13,<3.15 eingeschränkt
- pydantic-settings 2.9.1 → 2.12.0
- pyside6 6.9.1 → 6.10.1
- polars 1.31.0 → 1.37.0
- pydantic-yaml 1.5.1 → 1.6.0
- ruff 0.14.8 → 0.14.11
- pyqtdarktheme entfernt

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-11 16:14:58 +01:00