213 Commits

Author SHA1 Message Date
info d19c36191c Version 1.7.3: Fehlende Menü-Icons ergänzt
- MainWindow: Icons für drei bislang icon-lose Menü-Aktionen gesetzt
  - "Alle XML-Dateien transformieren" → play-circle
  - "Aus Datenbank laden" → database (neu)
  - "Worker-Pool-Metriken" → activity (neu)
- Zwei neue Feather-Icons (database, activity) ergänzt: Download-Skript,
  resources.qrc und resources_rc.py (via pyside6-rcc) aktualisiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 12:45:25 +02:00
info 3e20b186c7 Version 1.7.2: Icon-System – Theme-Reaktivität generalisiert, Render vereinfacht
- icons.py: IconRefreshMixin ergänzt – reagiert auf PaletteChange/StyleChange
  und färbt Icons nur bei tatsächlichem Textfarb-Wechsel neu ein (farb-gegated)
- icons.py: Render auf einen einzelnen 64px-Pixmap vereinfacht (Qt skaliert),
  statt drei fixe Größen (16/24/32)
- MainWindow: nutzt IconRefreshMixin; hasattr-Guards in _setup_icons entfernt
  (läuft jetzt nur im fertig initialisierten Zustand); change_theme entschlackt –
  Icon-/Baum-Aktualisierung erfolgt über changeEvent statt unbedingtem Aufruf
- XslDependencyDialog: nutzt IconRefreshMixin, färbt Button- und Baum-Icons bei
  Theme-Wechsel neu ein (bislang blieben offene non-modale Dialoge stale)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 12:36:58 +02:00
info 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 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 84bbf201d0 EInige Symbole zu den Buttons hinzugefügt 2026-03-14 17:16:27 +01:00
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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
info 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 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
info 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
info 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
info 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
info 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
info 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