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.
|
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
|
## Wichtige Hinweise
|
||||||
|
|
||||||
- `pyproject.toml` **niemals direkt bearbeiten** — immer `uv version --bump` verwenden
|
- `pyproject.toml` **niemals direkt bearbeiten** — immer `uv version --bump` verwenden
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<!-- Paket-Definition (ersetzt Product in v4) -->
|
<!-- Paket-Definition (ersetzt Product in v4) -->
|
||||||
<Package
|
<Package
|
||||||
Name="DocuMentor"
|
Name="DocuMentor"
|
||||||
Version="1.7.0"
|
Version="1.7.1"
|
||||||
Manufacturer="Vitali Graf / Software- und Datenbankentwicklung"
|
Manufacturer="Vitali Graf / Software- und Datenbankentwicklung"
|
||||||
UpgradeCode="F498B66C-726D-44AA-95F4-CB4FBDCEF26E"
|
UpgradeCode="F498B66C-726D-44AA-95F4-CB4FBDCEF26E"
|
||||||
Language="1031"
|
Language="1031"
|
||||||
|
|||||||
@@ -262,6 +262,6 @@ HINWEISE
|
|||||||
da sich diese ändern können.
|
da sich diese ändern können.
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
Stand: April 2026
|
Stand: Mai 2026
|
||||||
Erstellt für: DocuMentor v1.7.0
|
Erstellt für: DocuMentor v1.7.1
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
; Build-Befehl: iscc installer.iss
|
; Build-Befehl: iscc installer.iss
|
||||||
|
|
||||||
#define MyAppName "DocuMentor"
|
#define MyAppName "DocuMentor"
|
||||||
#define MyAppVersion "1.7.0"
|
#define MyAppVersion "1.7.1"
|
||||||
#define MyAppPublisher "Ihr Name/Organisation"
|
#define MyAppPublisher "Ihr Name/Organisation"
|
||||||
#define MyAppURL "https://github.com/yourusername/xsl-validator"
|
#define MyAppURL "https://github.com/yourusername/xsl-validator"
|
||||||
#define MyAppExeName "DocuMentor.exe"
|
#define MyAppExeName "DocuMentor.exe"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "DocuMentor"
|
name = "DocuMentor"
|
||||||
version = "1.7.0"
|
version = "1.7.1"
|
||||||
description = "Professionelle XSL-Transformations-Verwaltung und PDF-Generierung"
|
description = "Professionelle XSL-Transformations-Verwaltung und PDF-Generierung"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license = {text = "MIT"}
|
license = {text = "MIT"}
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ ICONS = [
|
|||||||
"file-plus",
|
"file-plus",
|
||||||
"columns",
|
"columns",
|
||||||
"sliders",
|
"sliders",
|
||||||
"folder-open",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
BASE_URL = "https://raw.githubusercontent.com/feathericons/feather/master/icons/{name}.svg"
|
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.QtGui import QIcon, QPainter, QPixmap, QPalette
|
||||||
from PySide6.QtSvg import QSvgRenderer
|
from PySide6.QtSvg import QSvgRenderer
|
||||||
from PySide6.QtWidgets import QApplication
|
from PySide6.QtWidgets import QApplication
|
||||||
|
import res.resources_rc # noqa: F401 # registriert die Qt-Ressourcen (Icons) beim Import
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
_ICON_MAP: dict[str, str] = {
|
# Cache: (Icon-Name, Theme-Textfarbe) → fertig gerendertes QIcon.
|
||||||
"folder-plus": ":/icons/folder-plus.svg",
|
# Der Farb-Anteil im Schlüssel sorgt dafür, dass ein Theme-Wechsel automatisch
|
||||||
"log-out": ":/icons/log-out.svg",
|
# neue Einträge erzeugt, ohne dass der Cache explizit geleert werden muss.
|
||||||
"settings": ":/icons/settings.svg",
|
_ICON_CACHE: dict[tuple[str, bytes], QIcon] = {}
|
||||||
"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",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def icon(name: str) -> 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:
|
Args:
|
||||||
name: Feather-Icon-Name (z.B. "folder-plus", "settings")
|
name: Feather-Icon-Name (z.B. "folder-plus", "settings")
|
||||||
@@ -40,10 +23,7 @@ def icon(name: str) -> QIcon:
|
|||||||
Returns:
|
Returns:
|
||||||
QIcon in der Textfarbe des aktiven Themes, oder leerer QIcon bei unbekanntem Namen
|
QIcon in der Textfarbe des aktiven Themes, oder leerer QIcon bei unbekanntem Namen
|
||||||
"""
|
"""
|
||||||
path = _ICON_MAP.get(name)
|
path = f":/icons/{name}.svg"
|
||||||
if path is None:
|
|
||||||
logger.warning(f"Unbekannter Icon-Name: {name!r}")
|
|
||||||
return QIcon()
|
|
||||||
|
|
||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
if app is None:
|
if app is None:
|
||||||
@@ -51,6 +31,10 @@ def icon(name: str) -> QIcon:
|
|||||||
|
|
||||||
color = app.palette().color(QPalette.ColorRole.WindowText).name().encode()
|
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)
|
f = QFile(path)
|
||||||
if not f.open(QFile.OpenModeFlag.ReadOnly):
|
if not f.open(QFile.OpenModeFlag.ReadOnly):
|
||||||
logger.warning(f"Icon konnte nicht geöffnet werden: {path}")
|
logger.warning(f"Icon konnte nicht geöffnet werden: {path}")
|
||||||
@@ -69,4 +53,5 @@ def icon(name: str) -> QIcon:
|
|||||||
painter.end()
|
painter.end()
|
||||||
result.addPixmap(pixmap)
|
result.addPixmap(pixmap)
|
||||||
|
|
||||||
|
_ICON_CACHE[cache_key] = result
|
||||||
return result
|
return result
|
||||||
|
|||||||
@@ -98,9 +98,6 @@ def main():
|
|||||||
if icon_path.exists():
|
if icon_path.exists():
|
||||||
app.setWindowIcon(QIcon(str(icon_path)))
|
app.setWindowIcon(QIcon(str(icon_path)))
|
||||||
|
|
||||||
# Qt-Ressourcen registrieren (Icons)
|
|
||||||
import res.resources_rc # noqa: F401
|
|
||||||
|
|
||||||
# Hauptfenster erstellen
|
# Hauptfenster erstellen
|
||||||
window = MainWindow()
|
window = MainWindow()
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "documentor"
|
name = "documentor"
|
||||||
version = "1.7.0"
|
version = "1.7.1"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "connectorx" },
|
{ name = "connectorx" },
|
||||||
|
|||||||
+4
-4
@@ -1873,8 +1873,8 @@
|
|||||||
<span class="download-card-badge">EMPFOHLEN</span>
|
<span class="download-card-badge">EMPFOHLEN</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="download-card-desc">Windows-Installer mit automatischer Einrichtung. Erstellt Startmenü-Einträge und ermöglicht saubere Deinstallation über die Systemsteuerung.</p>
|
<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>
|
<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/1.6.3/DocuMentor-1.6.3.msi" class="btn-download">▼ MSI herunterladen</a>
|
<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>
|
||||||
<div class="download-card corner-brackets">
|
<div class="download-card corner-brackets">
|
||||||
<div class="download-card-header">
|
<div class="download-card-header">
|
||||||
@@ -1882,8 +1882,8 @@
|
|||||||
<span class="download-card-badge">PORTABEL</span>
|
<span class="download-card-badge">PORTABEL</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="download-card-desc">Portable Version ohne Installation. Entpacken und direkt starten — ideal für eingeschränkte Umgebungen ohne Administratorrechte.</p>
|
<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>
|
<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/1.6.3/DocuMentor-1.6.3.zip" class="btn-download">▼ ZIP herunterladen</a>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user