Initial commit
Dieser Commit ist enthalten in:
121
views/components/platform_grid_view.py
Normale Datei
121
views/components/platform_grid_view.py
Normale Datei
@ -0,0 +1,121 @@
|
||||
"""
|
||||
Platform Grid View - Zeigt die Plattform-Kacheln in einem Grid
|
||||
"""
|
||||
|
||||
import os
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QLabel
|
||||
from PyQt5.QtCore import pyqtSignal, Qt
|
||||
from PyQt5.QtGui import QFont
|
||||
|
||||
from views.widgets.platform_button import PlatformButton
|
||||
|
||||
|
||||
class PlatformGridView(QWidget):
|
||||
"""
|
||||
Grid-Ansicht der Plattform-Kacheln
|
||||
Wiederverwendung der existierenden PlatformButton-Komponente
|
||||
"""
|
||||
|
||||
# Signal wird ausgelöst, wenn eine Plattform ausgewählt wird
|
||||
platform_selected = pyqtSignal(str)
|
||||
|
||||
def __init__(self, language_manager=None):
|
||||
super().__init__()
|
||||
self.language_manager = language_manager
|
||||
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 UI nach Styleguide"""
|
||||
# Hauptlayout mit Container-Padding
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setContentsMargins(40, 40, 40, 40)
|
||||
layout.setSpacing(32)
|
||||
|
||||
# Titel
|
||||
self.title_label = QLabel("AccountForger")
|
||||
self.title_label.setAlignment(Qt.AlignCenter)
|
||||
self.title_label.setObjectName("platform_title")
|
||||
|
||||
# Poppins Font für Titel
|
||||
title_font = QFont("Poppins", 32)
|
||||
title_font.setBold(True)
|
||||
self.title_label.setFont(title_font)
|
||||
|
||||
self.title_label.setStyleSheet("""
|
||||
QLabel {
|
||||
color: #1A365D;
|
||||
font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
""")
|
||||
|
||||
layout.addWidget(self.title_label)
|
||||
|
||||
# Container für Plattform-Grid
|
||||
platforms_container = QWidget()
|
||||
platforms_container.setStyleSheet("background: transparent;")
|
||||
grid_layout = QGridLayout(platforms_container)
|
||||
grid_layout.setSpacing(24) # Styleguide Grid-Gap
|
||||
|
||||
# Definiere verfügbare Plattformen
|
||||
platforms = [
|
||||
{"name": "Instagram", "enabled": True},
|
||||
{"name": "Facebook", "enabled": True},
|
||||
{"name": "TikTok", "enabled": True},
|
||||
{"name": "X", "enabled": True},
|
||||
{"name": "VK", "enabled": True},
|
||||
{"name": "OK.ru", "enabled": True},
|
||||
{"name": "Gmail", "enabled": True}
|
||||
]
|
||||
|
||||
# Icon-Pfade
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
parent_dir = os.path.dirname(os.path.dirname(current_dir))
|
||||
icons_dir = os.path.join(parent_dir, "resources", "icons")
|
||||
|
||||
# Platziere Buttons in einem 2x4 Grid
|
||||
for i, platform in enumerate(platforms):
|
||||
row = i // 4
|
||||
col = i % 4
|
||||
|
||||
# Icon-Pfad erstellen
|
||||
platform_icon_name = platform['name'].lower()
|
||||
if platform['name'] == "X":
|
||||
platform_icon_name = "twitter"
|
||||
elif platform['name'] == "OK.ru":
|
||||
platform_icon_name = "ok"
|
||||
icon_path = os.path.join(icons_dir, f"{platform_icon_name}.svg")
|
||||
|
||||
if not os.path.exists(icon_path):
|
||||
icon_path = None
|
||||
|
||||
# Platform Button erstellen
|
||||
button = PlatformButton(
|
||||
platform["name"],
|
||||
icon_path,
|
||||
platform["enabled"]
|
||||
)
|
||||
|
||||
# Signal verbinden
|
||||
platform_signal_name = "x" if platform["name"] == "X" else platform["name"]
|
||||
button.clicked.connect(
|
||||
lambda checked=False, p=platform_signal_name: self.platform_selected.emit(p.lower())
|
||||
)
|
||||
|
||||
grid_layout.addWidget(button, row, col, Qt.AlignCenter)
|
||||
|
||||
layout.addWidget(platforms_container)
|
||||
layout.addStretch()
|
||||
|
||||
def update_texts(self):
|
||||
"""Aktualisiert die Texte gemäß der aktuellen Sprache"""
|
||||
if not self.language_manager:
|
||||
return
|
||||
|
||||
self.title_label.setText(
|
||||
self.language_manager.get_text("main.title", "AccountForger")
|
||||
)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren