mirror of
https://github.com/KeksPirates/SoftwareManager.git
synced 2026-08-04 01:49:42 +02:00
feat: add image opacity, config migration, settings
Add image overlay opacity support and related UI/settings, plus robust config migration and error handling. Key changes: - UI: image overlay now uses QGraphicsOpacityEffect, hides when disabled, and updates opacity on state changes (src/interface/dialogs/image.py). - New NotificationPopup dialog for user alerts (src/interface/dialogs/notificationpopup.py). - Settings dialog: added Image Opacity control, adjusted labels, persist/rollback behavior on cancel, and include opacity when saving (src/interface/dialogs/settings.py). - State: added properties for image_opacity and image_enabled with change notifications; renamed image_width setter param for clarity (src/utils/data/state.py). - Config: switch from config.yml to config.ini, implement one-time migration, typed read/write of values, validation/error handling, automatic backups of corrupted files and user notification (src/utils/config/config.py). - Settings save: accept and persist image_opacity (src/utils/config/settings.py). - Startup: initialize QApplication earlier and pass app to run_gui (src/main.py). - Minor: removed an extra blank line in log handler and small import cleanups. These changes enable adjustable overlay transparency, improve config reliability, and surface errors to users while preserving/backuping old configs.
This commit is contained in:
+27
-4
@@ -29,9 +29,12 @@ class AppState(QObject):
|
||||
self.interfaces: List = []
|
||||
self.active_interfaces: List = []
|
||||
self.bound_interface: Any = None
|
||||
|
||||
# Image
|
||||
self._image_enabled: bool = False
|
||||
self._image_width: int = 300 # Default to 300px
|
||||
self._image_offset: int = 50
|
||||
self.image_enabled: bool = False
|
||||
self._image_opacity: int = 100
|
||||
|
||||
# Trackers / Scraping
|
||||
self.posts: list[Dict[str,str]] | None = None # titles, urls, author, seeders, leechers
|
||||
@@ -76,9 +79,29 @@ class AppState(QObject):
|
||||
return self._image_width
|
||||
|
||||
@image_width.setter
|
||||
def image_width(self, new_offset: int):
|
||||
if new_offset != self._image_width:
|
||||
self._image_width = new_offset
|
||||
def image_width(self, new_width: int):
|
||||
if new_width != self._image_width:
|
||||
self._image_width = new_width
|
||||
self.image_changed.emit(self._image_path)
|
||||
|
||||
@property
|
||||
def image_opacity(self) -> int:
|
||||
return self._image_opacity
|
||||
|
||||
@image_opacity.setter
|
||||
def image_opacity(self, new_opacity: int):
|
||||
if new_opacity != self._image_opacity:
|
||||
self._image_opacity = new_opacity
|
||||
self.image_changed.emit(self._image_path)
|
||||
|
||||
@property
|
||||
def image_enabled(self) -> bool:
|
||||
return self._image_enabled
|
||||
|
||||
@image_enabled.setter
|
||||
def image_enabled(self, new_state: bool):
|
||||
if new_state != self._image_enabled:
|
||||
self._image_enabled = new_state
|
||||
self.image_changed.emit(self._image_path)
|
||||
|
||||
state = AppState()
|
||||
|
||||
Reference in New Issue
Block a user