Batch-Export geht jetzt
Dieser Commit ist enthalten in:
@ -4,7 +4,7 @@ Account Card Widget - Kompakte Account-Karte nach Styleguide
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QFrame, QVBoxLayout, QHBoxLayout, QLabel, QPushButton,
|
||||
QGridLayout, QWidget, QApplication
|
||||
QGridLayout, QWidget, QApplication, QCheckBox
|
||||
)
|
||||
from PyQt5.QtCore import Qt, pyqtSignal, QSize, QTimer
|
||||
from PyQt5.QtGui import QFont, QPixmap
|
||||
@ -17,17 +17,20 @@ class AccountCard(QFrame):
|
||||
"""
|
||||
Kompakte Account-Karte nach Styleguide für Light Mode
|
||||
"""
|
||||
|
||||
|
||||
# Signals
|
||||
login_requested = pyqtSignal(dict) # Account-Daten
|
||||
export_requested = pyqtSignal(dict) # Account-Daten
|
||||
delete_requested = pyqtSignal(dict) # Account-Daten
|
||||
|
||||
selection_changed = pyqtSignal(int, bool) # account_id, selected
|
||||
|
||||
def __init__(self, account_data, language_manager=None):
|
||||
super().__init__()
|
||||
self.account_data = account_data
|
||||
self.language_manager = language_manager
|
||||
self.password_visible = False
|
||||
self.selection_mode = False
|
||||
self.is_selected_state = False
|
||||
|
||||
# Timer für Icon-Animation
|
||||
self.email_copy_timer = QTimer()
|
||||
@ -136,16 +139,34 @@ class AccountCard(QFrame):
|
||||
|
||||
# Header Zeile
|
||||
header_layout = QHBoxLayout()
|
||||
|
||||
|
||||
# Platform Icon + Username
|
||||
info_layout = QHBoxLayout()
|
||||
info_layout.setSpacing(8)
|
||||
|
||||
|
||||
# Status wird jetzt über Karten-Hintergrund und Umrandung angezeigt
|
||||
|
||||
|
||||
# Selection Checkbox (hidden by default)
|
||||
self.selection_checkbox = QCheckBox()
|
||||
self.selection_checkbox.setVisible(False)
|
||||
self.selection_checkbox.stateChanged.connect(self._on_selection_changed)
|
||||
self.selection_checkbox.setStyleSheet("""
|
||||
QCheckBox::indicator {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 4px;
|
||||
border: 2px solid #D1D5DB;
|
||||
}
|
||||
QCheckBox::indicator:checked {
|
||||
background-color: #0099CC;
|
||||
border-color: #0099CC;
|
||||
}
|
||||
""")
|
||||
info_layout.addWidget(self.selection_checkbox)
|
||||
|
||||
# Platform Icon
|
||||
platform_icon = IconFactory.create_icon_label(
|
||||
self.account_data.get("platform", "").lower(),
|
||||
self.account_data.get("platform", "").lower(),
|
||||
size=18
|
||||
)
|
||||
info_layout.addWidget(platform_icon)
|
||||
@ -378,4 +399,46 @@ class AccountCard(QFrame):
|
||||
def update_status(self, new_status: str):
|
||||
"""Aktualisiert den Status der Account-Karte und das Styling"""
|
||||
self.account_data["status"] = new_status
|
||||
self._apply_status_styling()
|
||||
self._apply_status_styling()
|
||||
|
||||
# ========== Selection Mode Methods ==========
|
||||
|
||||
def set_selection_mode(self, enabled: bool):
|
||||
"""
|
||||
Aktiviert/Deaktiviert den Selection-Modus.
|
||||
|
||||
Args:
|
||||
enabled: True = Checkbox anzeigen, False = Checkbox verstecken
|
||||
"""
|
||||
self.selection_mode = enabled
|
||||
self.selection_checkbox.setVisible(enabled)
|
||||
|
||||
if not enabled:
|
||||
# Reset selection when mode is disabled
|
||||
self.set_selected(False)
|
||||
|
||||
def _on_selection_changed(self, state):
|
||||
"""Handler für Checkbox state change"""
|
||||
self.is_selected_state = (state == Qt.Checked)
|
||||
account_id = self.account_data.get("id")
|
||||
if account_id:
|
||||
self.selection_changed.emit(account_id, self.is_selected_state)
|
||||
|
||||
def is_selected(self) -> bool:
|
||||
"""
|
||||
Gibt zurück ob die Card ausgewählt ist.
|
||||
|
||||
Returns:
|
||||
True wenn ausgewählt, sonst False
|
||||
"""
|
||||
return self.is_selected_state
|
||||
|
||||
def set_selected(self, selected: bool):
|
||||
"""
|
||||
Setzt den Auswahl-Status.
|
||||
|
||||
Args:
|
||||
selected: True = auswählen, False = Auswahl aufheben
|
||||
"""
|
||||
self.is_selected_state = selected
|
||||
self.selection_checkbox.setChecked(selected)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren