Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d6ab87ce3 |
No files matched your search
@@ -1,5 +1,12 @@
|
||||
# Änderungsprotokoll
|
||||
|
||||
## 1.0.6 – 2026-09-24
|
||||
|
||||
### Behoben
|
||||
|
||||
- Dateianzeige und Fortschrittsleiste besitzen nun feste Breiten und verschieben sich beim Wechsel zwischen unterschiedlich langen Dateipfaden nicht mehr.
|
||||
- Lange Dateipfade werden platzsparend gekürzt; der vollständige Text bleibt als Tooltip verfügbar.
|
||||
|
||||
## 1.0.5 – 2026-09-24
|
||||
|
||||
### Neu
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "syncvito"
|
||||
version = "1.0.5"
|
||||
version = "1.0.6"
|
||||
description = "Windows-Desktopwerkzeug für lokale und NAS-Synchronisation"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
|
||||
@@ -7,7 +7,7 @@ from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from PyQt6.QtCore import QEvent, Qt, QTimer, pyqtSignal
|
||||
from PyQt6.QtGui import QAction, QCloseEvent, QFontDatabase
|
||||
from PyQt6.QtGui import QAction, QCloseEvent, QFontDatabase, QResizeEvent
|
||||
from PyQt6.QtWidgets import (
|
||||
QAbstractItemView,
|
||||
QApplication,
|
||||
@@ -50,6 +50,35 @@ __all__ = ["MainWindow"]
|
||||
|
||||
UPDATE_CHECK_INTERVAL_MS = 30 * 60 * 1000
|
||||
UPDATE_RETRY_INTERVAL_MS = 60 * 1000
|
||||
PROGRESS_TEXT_WIDTH = 300
|
||||
PROGRESS_BAR_WIDTH = 450
|
||||
|
||||
|
||||
class _ElidedLabel(QLabel):
|
||||
"""Hält dynamische Texte in einer festen Breite vollständig zugänglich."""
|
||||
|
||||
def __init__(self, text: str = "", parent: QWidget | None = None) -> None:
|
||||
super().__init__(parent)
|
||||
self._full_text = ""
|
||||
self.setText(text)
|
||||
|
||||
def setText(self, text: str) -> None: # noqa: N802 - Qt API
|
||||
self._full_text = text
|
||||
self.setToolTip(text)
|
||||
self.setAccessibleName(text)
|
||||
self._refresh_elided_text()
|
||||
|
||||
def resizeEvent(self, event: QResizeEvent) -> None: # noqa: N802 - Qt API
|
||||
super().resizeEvent(event)
|
||||
self._refresh_elided_text()
|
||||
|
||||
def _refresh_elided_text(self) -> None:
|
||||
visible_text = self.fontMetrics().elidedText(
|
||||
self._full_text,
|
||||
Qt.TextElideMode.ElideMiddle,
|
||||
max(0, self.contentsRect().width()),
|
||||
)
|
||||
super().setText(visible_text)
|
||||
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
@@ -65,7 +94,7 @@ class MainWindow(QMainWindow):
|
||||
self._notified_update_version: str | None = None
|
||||
self.setWindowTitle("SyncVito")
|
||||
self.setWindowIcon(app_icon())
|
||||
self.setMinimumSize(980, 680)
|
||||
self.setMinimumSize(1040, 680)
|
||||
self.resize(1220, 800)
|
||||
|
||||
self.coordinator = SyncCoordinator(config, config_store, self)
|
||||
@@ -380,15 +409,17 @@ class MainWindow(QMainWindow):
|
||||
dock.setFixedHeight(66)
|
||||
layout = QHBoxLayout(dock)
|
||||
layout.setContentsMargins(28, 12, 28, 12)
|
||||
self.progress_text = QLabel("Bereit")
|
||||
self.progress_text.setMinimumWidth(250)
|
||||
self.progress_text = _ElidedLabel("Bereit")
|
||||
self.progress_text.setFixedWidth(PROGRESS_TEXT_WIDTH)
|
||||
self.progress_text.setProperty("muted", True)
|
||||
self.progress_bar = QProgressBar()
|
||||
self.progress_bar.setFixedWidth(PROGRESS_BAR_WIDTH)
|
||||
self.progress_bar.setRange(0, 100)
|
||||
self.progress_bar.setValue(0)
|
||||
self.progress_bar.setFormat("%p %")
|
||||
layout.addWidget(self.progress_text)
|
||||
layout.addWidget(self.progress_bar, 1)
|
||||
layout.addWidget(self.progress_bar)
|
||||
layout.addStretch(1)
|
||||
return dock
|
||||
|
||||
def _build_tray(self) -> None:
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from PyQt6.QtWidgets import QApplication
|
||||
|
||||
from syncvito.main_window import PROGRESS_BAR_WIDTH, PROGRESS_TEXT_WIDTH, MainWindow
|
||||
|
||||
|
||||
def test_progress_widgets_keep_fixed_widths_for_long_paths() -> None:
|
||||
application = QApplication.instance() or QApplication([])
|
||||
owner = SimpleNamespace()
|
||||
dock = MainWindow._build_progress_dock(owner)
|
||||
dock.resize(900, 66)
|
||||
dock.show()
|
||||
application.processEvents()
|
||||
bar_x = owner.progress_bar.x()
|
||||
long_path = "Kopieren: " + "sehr-langer-ordner\\" * 20 + "wichtige-datei.ini"
|
||||
|
||||
owner.progress_text.setText(long_path)
|
||||
application.processEvents()
|
||||
|
||||
assert owner.progress_text.width() == PROGRESS_TEXT_WIDTH
|
||||
assert owner.progress_bar.width() == PROGRESS_BAR_WIDTH
|
||||
assert owner.progress_bar.x() == bar_x
|
||||
assert owner.progress_text.text() != long_path
|
||||
assert "…" in owner.progress_text.text()
|
||||
assert owner.progress_text.toolTip() == long_path
|
||||
assert owner.progress_text.accessibleName() == long_path
|
||||
dock.close()
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.0.5
|
||||
1.0.6
|
||||
Reference in new issue
Block a user