Import USB + éditeur complet + widgets
- Service USB watcher (polling montages, scan photos récursif) - Écran accueil avec détection USB live (bouton vert + compteur) - Éditeur : crop interactif avec overlay/grille des tiers - Éditeur : filtres Pillow (N&B, sépia, vintage, contraste) - Éditeur : stickers/goodies draggable + cadres overlay - Éditeur : multi-pose (5 templates, remplissage auto) - Éditeur : texte éditable draggable - Éditeur : rotation, annulation, export scène PNG - Widget CropOverlay avec poignées tactiles - Widget GoodiesPanel (stickers + cadres depuis assets/) - Widget MultiposeDialog (prévisualisation templates) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,12 +6,15 @@ from PyQt6.QtWidgets import (
|
||||
from PyQt6.QtCore import Qt
|
||||
from PyQt6.QtGui import QFont
|
||||
|
||||
from services.usb_watcher import UsbWatcher
|
||||
|
||||
|
||||
class HomeScreen(QWidget):
|
||||
def __init__(self, main_window):
|
||||
super().__init__()
|
||||
self.main_window = main_window
|
||||
self._setup_ui()
|
||||
self._setup_usb_watcher()
|
||||
|
||||
def _setup_ui(self):
|
||||
layout = QVBoxLayout(self)
|
||||
@@ -29,6 +32,13 @@ class HomeScreen(QWidget):
|
||||
subtitle.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
layout.addWidget(subtitle)
|
||||
|
||||
# Status USB
|
||||
self.usb_status = QLabel("")
|
||||
self.usb_status.setFont(QFont("", 14))
|
||||
self.usb_status.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
self.usb_status.setStyleSheet("color: #4CAF50;")
|
||||
layout.addWidget(self.usb_status)
|
||||
|
||||
# Boutons d'import
|
||||
buttons_layout = QHBoxLayout()
|
||||
buttons_layout.setSpacing(20)
|
||||
@@ -40,10 +50,12 @@ class HomeScreen(QWidget):
|
||||
("Email", "Recevoir par mail", self._import_email),
|
||||
]
|
||||
|
||||
self.buttons = {}
|
||||
for label, desc, callback in modes:
|
||||
btn = self._create_mode_button(label, desc)
|
||||
btn.clicked.connect(callback)
|
||||
buttons_layout.addWidget(btn)
|
||||
self.buttons[label] = btn
|
||||
|
||||
layout.addLayout(buttons_layout)
|
||||
|
||||
@@ -61,11 +73,54 @@ class HomeScreen(QWidget):
|
||||
QPushButton:pressed {
|
||||
background-color: #1976D2;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #9E9E9E;
|
||||
}
|
||||
""")
|
||||
return btn
|
||||
|
||||
def _setup_usb_watcher(self):
|
||||
self.usb_watcher = UsbWatcher(self)
|
||||
self.usb_watcher.usb_inserted.connect(self._on_usb_inserted)
|
||||
self.usb_watcher.usb_removed.connect(self._on_usb_removed)
|
||||
self.usb_watcher.start()
|
||||
self._usb_photos = []
|
||||
self._usb_mount = None
|
||||
|
||||
def _on_usb_inserted(self, mount_path, photos):
|
||||
self._usb_mount = mount_path
|
||||
self._usb_photos = photos
|
||||
count = len(photos)
|
||||
self.usb_status.setText(f"Clé USB détectée — {count} photo{'s' if count != 1 else ''}")
|
||||
self.buttons["USB"].setStyleSheet("""
|
||||
QPushButton {
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
border-radius: 15px;
|
||||
padding: 20px;
|
||||
}
|
||||
QPushButton:pressed { background-color: #388E3C; }
|
||||
""")
|
||||
|
||||
def _on_usb_removed(self, mount_path):
|
||||
if mount_path == self._usb_mount:
|
||||
self._usb_mount = None
|
||||
self._usb_photos = []
|
||||
self.usb_status.setText("")
|
||||
self.buttons["USB"].setStyleSheet("""
|
||||
QPushButton {
|
||||
background-color: #2196F3;
|
||||
color: white;
|
||||
border-radius: 15px;
|
||||
padding: 20px;
|
||||
}
|
||||
QPushButton:pressed { background-color: #1976D2; }
|
||||
""")
|
||||
|
||||
def _import_usb(self):
|
||||
self.main_window.show_import()
|
||||
if self._usb_photos:
|
||||
self.main_window.import_screen.set_photos(self._usb_photos)
|
||||
self.main_window.show_import()
|
||||
|
||||
def _import_wifi(self):
|
||||
self.main_window.show_import()
|
||||
|
||||
Reference in New Issue
Block a user