Initial commit
Dieser Commit ist enthalten in:
129
views/platform_selector.py
Normale Datei
129
views/platform_selector.py
Normale Datei
@ -0,0 +1,129 @@
|
||||
# Path: views/platform_selector.py
|
||||
|
||||
"""
|
||||
Plattformauswahl-Widget mit Tab-Navigation für die Social Media Account Generator Anwendung.
|
||||
"""
|
||||
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QStackedWidget
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
|
||||
from views.components.tab_navigation import TabNavigation
|
||||
from views.components.platform_grid_view import PlatformGridView
|
||||
from views.components.accounts_overview_view import AccountsOverviewView
|
||||
from views.widgets.language_dropdown import LanguageDropdown
|
||||
|
||||
|
||||
class PlatformSelector(QWidget):
|
||||
"""Widget zur Auswahl der Plattform mit Tab-Navigation."""
|
||||
|
||||
# Signal wird ausgelöst, wenn eine Plattform ausgewählt wird
|
||||
platform_selected = pyqtSignal(str)
|
||||
|
||||
# Neue Signals für Account-Aktionen
|
||||
login_requested = pyqtSignal(dict)
|
||||
export_requested = pyqtSignal(dict)
|
||||
|
||||
def __init__(self, language_manager=None, db_manager=None):
|
||||
super().__init__()
|
||||
self.language_manager = language_manager
|
||||
self.db_manager = db_manager
|
||||
self.accounts_tab = None # Für Kompatibilität
|
||||
self.init_ui()
|
||||
|
||||
if self.language_manager:
|
||||
self.language_manager.language_changed.connect(self.update_texts)
|
||||
self.update_texts()
|
||||
|
||||
def init_ui(self):
|
||||
"""Initialisiert die Benutzeroberfläche mit Tab-Navigation."""
|
||||
# Hauptlayout
|
||||
main_layout = QVBoxLayout(self)
|
||||
main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
main_layout.setSpacing(0)
|
||||
|
||||
# Tab Navigation
|
||||
self.tab_navigation = TabNavigation(self.language_manager)
|
||||
self.tab_navigation.tab_changed.connect(self._on_tab_changed)
|
||||
main_layout.addWidget(self.tab_navigation)
|
||||
|
||||
# Content Container mit gestapelten Widgets
|
||||
self.content_stack = QStackedWidget()
|
||||
self.content_stack.setStyleSheet("background-color: #F8FAFC;")
|
||||
|
||||
# Platform Grid View (Tab 0)
|
||||
self.platform_grid = PlatformGridView(self.language_manager)
|
||||
self.platform_grid.platform_selected.connect(self.platform_selected.emit)
|
||||
self.content_stack.addWidget(self.platform_grid)
|
||||
|
||||
# Accounts Overview View (Tab 1)
|
||||
self.accounts_overview = AccountsOverviewView(self.db_manager, self.language_manager)
|
||||
self.accounts_overview.account_login_requested.connect(self._on_login_requested)
|
||||
self.accounts_overview.account_export_requested.connect(self._on_export_requested)
|
||||
self.accounts_overview.account_delete_requested.connect(self._on_delete_requested)
|
||||
self.content_stack.addWidget(self.accounts_overview)
|
||||
|
||||
# Für Kompatibilität mit MainController - accounts_tab Referenz
|
||||
self.accounts_tab = self.accounts_overview
|
||||
|
||||
main_layout.addWidget(self.content_stack)
|
||||
|
||||
# Initial Tab setzen
|
||||
self.content_stack.setCurrentIndex(0)
|
||||
|
||||
# Account-Anzahl initial laden
|
||||
self._update_account_count()
|
||||
|
||||
def _on_tab_changed(self, index):
|
||||
"""Behandelt Tab-Wechsel."""
|
||||
self.content_stack.setCurrentIndex(index)
|
||||
|
||||
# Lade Accounts neu wenn Accounts-Tab ausgewählt wird
|
||||
if index == 1:
|
||||
self.load_accounts()
|
||||
|
||||
def load_accounts(self):
|
||||
"""Lädt die Konten in der Übersicht neu."""
|
||||
self.accounts_overview.load_accounts()
|
||||
self._update_account_count()
|
||||
|
||||
def _update_account_count(self):
|
||||
"""Aktualisiert die Account-Anzahl im Tab-Badge."""
|
||||
if self.db_manager:
|
||||
try:
|
||||
accounts = self.db_manager.get_all_accounts()
|
||||
self.tab_navigation.update_account_count(len(accounts))
|
||||
except:
|
||||
self.tab_navigation.update_account_count(0)
|
||||
|
||||
def _on_login_requested(self, account_data):
|
||||
"""Behandelt Login-Anfragen von Account-Karten."""
|
||||
self.login_requested.emit(account_data)
|
||||
|
||||
def _on_export_requested(self, account_data):
|
||||
"""Behandelt Export-Anfragen von Account-Karten."""
|
||||
# Für einzelne Account-Exports
|
||||
if hasattr(self, 'export_requested'):
|
||||
self.export_requested.emit([account_data])
|
||||
else:
|
||||
# Fallback: Direkter Export
|
||||
from controllers.account_controller import AccountController
|
||||
if self.db_manager:
|
||||
controller = AccountController(self.db_manager)
|
||||
controller.set_parent_view(self)
|
||||
controller.export_accounts(None, [account_data])
|
||||
|
||||
def _on_delete_requested(self, account_data):
|
||||
"""Behandelt Delete-Anfragen von Account-Karten."""
|
||||
if self.db_manager:
|
||||
try:
|
||||
# Lösche den Account aus der Datenbank
|
||||
self.db_manager.delete_account(account_data.get("id"))
|
||||
# Lade die Accounts neu
|
||||
self.load_accounts()
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Löschen des Accounts: {e}")
|
||||
|
||||
def update_texts(self):
|
||||
"""Aktualisiert die Texte gemäß der aktuellen Sprache."""
|
||||
# Die Komponenten aktualisieren ihre Texte selbst
|
||||
pass
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren