Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 74b08e31c7 | |||
| c837802fe7 | |||
| 712bd8917e |
@@ -60,6 +60,20 @@ Führe zuerst `uv version --bump` aus, lese danach die neue Version aus `pyproje
|
||||
|
||||
Nachdem die Versionsdateien aktualisiert wurden (oder der Benutzer "Nein" gewählt hat), erstelle den Commit ganz normal nach den üblichen Commit-Konventionen. Falls die Version geändert wurde, füge die geänderten Versionsdateien zum Commit hinzu.
|
||||
|
||||
### Schritt 4: Git-Tag setzen (nur bei Versionserhöhung)
|
||||
|
||||
Wenn der Benutzer eine Versionserhöhung gewählt hat und der Commit erfolgreich war, setze einen annotated Git-Tag mit der neuen Version:
|
||||
|
||||
```bash
|
||||
git tag -a "vX.Y.Z" -m "Version X.Y.Z"
|
||||
```
|
||||
|
||||
Wobei `X.Y.Z` die neue Version aus `pyproject.toml` ist. Das Tag-Format ist immer `v` + Versionsnummer (z.B. `v1.7.1`).
|
||||
|
||||
Informiere den Benutzer danach kurz: „Tag `vX.Y.Z` gesetzt. Mit `git push origin vX.Y.Z` kannst du ihn pushen."
|
||||
|
||||
Wenn der Benutzer "Nein" gewählt hat, wird kein Tag gesetzt.
|
||||
|
||||
## Wichtige Hinweise
|
||||
|
||||
- `pyproject.toml` **niemals direkt bearbeiten** — immer `uv version --bump` verwenden
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<!-- Paket-Definition (ersetzt Product in v4) -->
|
||||
<Package
|
||||
Name="DocuMentor"
|
||||
Version="1.7.0"
|
||||
Version="1.7.1"
|
||||
Manufacturer="Vitali Graf / Software- und Datenbankentwicklung"
|
||||
UpgradeCode="F498B66C-726D-44AA-95F4-CB4FBDCEF26E"
|
||||
Language="1031"
|
||||
|
||||
@@ -262,6 +262,6 @@ HINWEISE
|
||||
da sich diese ändern können.
|
||||
|
||||
================================================================================
|
||||
Stand: April 2026
|
||||
Erstellt für: DocuMentor v1.7.0
|
||||
Stand: Mai 2026
|
||||
Erstellt für: DocuMentor v1.7.1
|
||||
================================================================================
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
; Build-Befehl: iscc installer.iss
|
||||
|
||||
#define MyAppName "DocuMentor"
|
||||
#define MyAppVersion "1.7.0"
|
||||
#define MyAppVersion "1.7.1"
|
||||
#define MyAppPublisher "Ihr Name/Organisation"
|
||||
#define MyAppURL "https://github.com/yourusername/xsl-validator"
|
||||
#define MyAppExeName "DocuMentor.exe"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "DocuMentor"
|
||||
version = "1.7.0"
|
||||
version = "1.7.1"
|
||||
description = "Professionelle XSL-Transformations-Verwaltung und PDF-Generierung"
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
|
||||
@@ -29,7 +29,6 @@ ICONS = [
|
||||
"file-plus",
|
||||
"columns",
|
||||
"sliders",
|
||||
"folder-open",
|
||||
]
|
||||
|
||||
BASE_URL = "https://raw.githubusercontent.com/feathericons/feather/master/icons/{name}.svg"
|
||||
|
||||
+12
-27
@@ -3,36 +3,19 @@ from PySide6.QtCore import QByteArray, QFile, Qt
|
||||
from PySide6.QtGui import QIcon, QPainter, QPixmap, QPalette
|
||||
from PySide6.QtSvg import QSvgRenderer
|
||||
from PySide6.QtWidgets import QApplication
|
||||
import res.resources_rc # noqa: F401 # registriert die Qt-Ressourcen (Icons) beim Import
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_ICON_MAP: dict[str, str] = {
|
||||
"folder-plus": ":/icons/folder-plus.svg",
|
||||
"log-out": ":/icons/log-out.svg",
|
||||
"settings": ":/icons/settings.svg",
|
||||
"folder": ":/icons/folder.svg",
|
||||
"refresh-cw": ":/icons/refresh-cw.svg",
|
||||
"plus-circle": ":/icons/plus-circle.svg",
|
||||
"minus-circle": ":/icons/minus-circle.svg",
|
||||
"play-circle": ":/icons/play-circle.svg",
|
||||
"file": ":/icons/file.svg",
|
||||
"check-circle": ":/icons/check-circle.svg",
|
||||
"info": ":/icons/info.svg",
|
||||
"git-branch": ":/icons/git-branch.svg",
|
||||
"file-text": ":/icons/file-text.svg",
|
||||
"code": ":/icons/code.svg",
|
||||
"chevron-down": ":/icons/chevron-down.svg",
|
||||
"chevron-up": ":/icons/chevron-up.svg",
|
||||
"trash-2": ":/icons/trash-2.svg",
|
||||
"file-plus": ":/icons/file-plus.svg",
|
||||
"columns": ":/icons/columns.svg",
|
||||
"sliders": ":/icons/sliders.svg",
|
||||
}
|
||||
# Cache: (Icon-Name, Theme-Textfarbe) → fertig gerendertes QIcon.
|
||||
# Der Farb-Anteil im Schlüssel sorgt dafür, dass ein Theme-Wechsel automatisch
|
||||
# neue Einträge erzeugt, ohne dass der Cache explizit geleert werden muss.
|
||||
_ICON_CACHE: dict[tuple[str, bytes], QIcon] = {}
|
||||
|
||||
|
||||
def icon(name: str) -> QIcon:
|
||||
"""
|
||||
Lädt ein Icon aus dem Qt-Ressource-System und färbt es mit der aktuellen Palette-Farbe.
|
||||
Lädt ein Feather-Icon aus dem Qt-Ressource-System und färbt es mit der aktuellen Palette-Farbe.
|
||||
|
||||
Args:
|
||||
name: Feather-Icon-Name (z.B. "folder-plus", "settings")
|
||||
@@ -40,10 +23,7 @@ def icon(name: str) -> QIcon:
|
||||
Returns:
|
||||
QIcon in der Textfarbe des aktiven Themes, oder leerer QIcon bei unbekanntem Namen
|
||||
"""
|
||||
path = _ICON_MAP.get(name)
|
||||
if path is None:
|
||||
logger.warning(f"Unbekannter Icon-Name: {name!r}")
|
||||
return QIcon()
|
||||
path = f":/icons/{name}.svg"
|
||||
|
||||
app = QApplication.instance()
|
||||
if app is None:
|
||||
@@ -51,6 +31,10 @@ def icon(name: str) -> QIcon:
|
||||
|
||||
color = app.palette().color(QPalette.ColorRole.WindowText).name().encode()
|
||||
|
||||
cache_key = (name, color)
|
||||
if (cached := _ICON_CACHE.get(cache_key)) is not None:
|
||||
return cached
|
||||
|
||||
f = QFile(path)
|
||||
if not f.open(QFile.OpenModeFlag.ReadOnly):
|
||||
logger.warning(f"Icon konnte nicht geöffnet werden: {path}")
|
||||
@@ -69,4 +53,5 @@ def icon(name: str) -> QIcon:
|
||||
painter.end()
|
||||
result.addPixmap(pixmap)
|
||||
|
||||
_ICON_CACHE[cache_key] = result
|
||||
return result
|
||||
|
||||
@@ -98,9 +98,6 @@ def main():
|
||||
if icon_path.exists():
|
||||
app.setWindowIcon(QIcon(str(icon_path)))
|
||||
|
||||
# Qt-Ressourcen registrieren (Icons)
|
||||
import res.resources_rc # noqa: F401
|
||||
|
||||
# Hauptfenster erstellen
|
||||
window = MainWindow()
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "documentor"
|
||||
version = "1.7.0"
|
||||
version = "1.7.1"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "connectorx" },
|
||||
|
||||
+4
-4
@@ -1873,8 +1873,8 @@
|
||||
<span class="download-card-badge">EMPFOHLEN</span>
|
||||
</div>
|
||||
<p class="download-card-desc">Windows-Installer mit automatischer Einrichtung. Erstellt Startmenü-Einträge und ermöglicht saubere Deinstallation über die Systemsteuerung.</p>
|
||||
<span class="download-card-meta">DocuMentor-1.6.3.msi — ca. 255 MB</span>
|
||||
<a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/1.6.3/DocuMentor-1.6.3.msi" class="btn-download">▼ MSI herunterladen</a>
|
||||
<span class="download-card-meta">DocuMentor-1.7.0.msi — ca. 255 MB</span>
|
||||
<a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/v1.7.0/DocuMentor-1.7.0.msi" class="btn-download">▼ MSI herunterladen</a>
|
||||
</div>
|
||||
<div class="download-card corner-brackets">
|
||||
<div class="download-card-header">
|
||||
@@ -1882,8 +1882,8 @@
|
||||
<span class="download-card-badge">PORTABEL</span>
|
||||
</div>
|
||||
<p class="download-card-desc">Portable Version ohne Installation. Entpacken und direkt starten — ideal für eingeschränkte Umgebungen ohne Administratorrechte.</p>
|
||||
<span class="download-card-meta">DocuMentor-1.6.3.zip — ca. 315 MB</span>
|
||||
<a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/1.6.3/DocuMentor-1.6.3.zip" class="btn-download">▼ ZIP herunterladen</a>
|
||||
<span class="download-card-meta">DocuMentor-1.7.0.zip — ca. 315 MB</span>
|
||||
<a href="https://code.vitaligraf.de/info/xsl-validator/releases/download/v1.7.0/DocuMentor-1.7.0.zip" class="btn-download">▼ ZIP herunterladen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user