Initial commit
Dieser Commit ist enthalten in:
130
views/components/tab_navigation.py
Normale Datei
130
views/components/tab_navigation.py
Normale Datei
@ -0,0 +1,130 @@
|
||||
"""
|
||||
Tab Navigation Component nach Styleguide
|
||||
"""
|
||||
|
||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QPushButton, QLabel
|
||||
from PyQt5.QtCore import pyqtSignal, Qt
|
||||
from PyQt5.QtGui import QFont
|
||||
|
||||
|
||||
class TabNavigation(QWidget):
|
||||
"""
|
||||
Tab-Navigation nach Styleguide mit zwei Modi:
|
||||
- Plattformen (Standard)
|
||||
- Accounts
|
||||
"""
|
||||
|
||||
# Signal wird ausgelöst wenn Tab gewechselt wird (0=Plattformen, 1=Accounts)
|
||||
tab_changed = pyqtSignal(int)
|
||||
|
||||
def __init__(self, language_manager=None):
|
||||
super().__init__()
|
||||
self.language_manager = language_manager
|
||||
self.current_tab = 0
|
||||
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"""
|
||||
# Feste Höhe nach Styleguide
|
||||
self.setFixedHeight(48)
|
||||
|
||||
# Basis-Styling
|
||||
self.setStyleSheet("""
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border-bottom: 1px solid #E2E8F0;
|
||||
}
|
||||
""")
|
||||
|
||||
# Layout
|
||||
layout = QHBoxLayout(self)
|
||||
layout.setContentsMargins(40, 0, 40, 0)
|
||||
layout.setSpacing(24)
|
||||
|
||||
# Tab Buttons erstellen
|
||||
self.platform_tab = self._create_tab_button("Plattformen", True)
|
||||
self.platform_tab.clicked.connect(lambda: self._on_tab_clicked(0))
|
||||
layout.addWidget(self.platform_tab)
|
||||
|
||||
# Accounts Tab (ohne Badge)
|
||||
self.accounts_tab = self._create_tab_button("Accounts", False)
|
||||
self.accounts_tab.clicked.connect(lambda: self._on_tab_clicked(1))
|
||||
layout.addWidget(self.accounts_tab)
|
||||
|
||||
# Spacer
|
||||
layout.addStretch()
|
||||
|
||||
def _create_tab_button(self, text, active=False):
|
||||
"""Erstellt einen Tab-Button nach Styleguide"""
|
||||
btn = QPushButton(text)
|
||||
btn.setCheckable(True)
|
||||
btn.setChecked(active)
|
||||
btn.setCursor(Qt.PointingHandCursor)
|
||||
|
||||
# Poppins Font
|
||||
font = QFont("Poppins", 15)
|
||||
font.setWeight(QFont.Medium)
|
||||
btn.setFont(font)
|
||||
|
||||
btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
padding: 12px 24px;
|
||||
font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
color: #4A5568;
|
||||
min-width: 100px;
|
||||
}
|
||||
QPushButton:checked {
|
||||
color: #1A365D;
|
||||
border-bottom-color: #3182CE;
|
||||
}
|
||||
QPushButton:hover:!checked {
|
||||
color: #2D3748;
|
||||
background-color: #F7FAFC;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
color: #1A365D;
|
||||
}
|
||||
""")
|
||||
|
||||
return btn
|
||||
|
||||
def _on_tab_clicked(self, index):
|
||||
"""Behandelt Tab-Klicks"""
|
||||
if self.current_tab != index:
|
||||
self.current_tab = index
|
||||
|
||||
# Update button states
|
||||
self.platform_tab.setChecked(index == 0)
|
||||
self.accounts_tab.setChecked(index == 1)
|
||||
|
||||
# Emit signal
|
||||
self.tab_changed.emit(index)
|
||||
|
||||
def set_active_tab(self, index):
|
||||
"""Setzt den aktiven Tab programmatisch"""
|
||||
self._on_tab_clicked(index)
|
||||
|
||||
def update_account_count(self, count):
|
||||
"""Deprecated: Account-Anzahl wird nicht mehr im Tab angezeigt"""
|
||||
pass
|
||||
|
||||
def update_texts(self):
|
||||
"""Aktualisiert die Texte gemäß der aktuellen Sprache"""
|
||||
if not self.language_manager:
|
||||
return
|
||||
|
||||
self.platform_tab.setText(
|
||||
self.language_manager.get_text("platform_selector.platforms_tab", "Plattformen")
|
||||
)
|
||||
self.accounts_tab.setText(
|
||||
self.language_manager.get_text("platform_selector.accounts_tab", "Accounts")
|
||||
)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren