# -*- coding: utf-8 -*- """ 팀 확인 위젯 모듈 각 팀의 확인 상태를 토글 방식으로 표시하는 위젯입니다. """ from typing import Dict, List from PySide6.QtWidgets import QWidget, QGridLayout, QLabel from PySide6.QtCore import Qt, Signal from ui.components.toggle_switch import ToggleSwitch from ui.styles.style_manager import StyleManager from core.constants import TEAMS from core.logger import get_logger logger = get_logger(__name__) class TeamConfirmationWidget(QWidget): """ 팀 확인 위젯 각 팀의 확인 상태를 토글 스위치로 표시합니다. 확인한 팀만 표시되며, 2열로 배치됩니다. """ confirmation_changed = Signal(str, bool) # 팀명, 확인여부 def __init__(self, confirmations: Dict[str, bool] = None, parent=None): super().__init__(parent) self.style_manager = StyleManager() self.confirmations = confirmations or {team: False for team in TEAMS} self.toggles: Dict[str, ToggleSwitch] = {} self._setup_ui() def _setup_ui(self): """UI 설정""" layout = QGridLayout(self) layout.setContentsMargins(4, 4, 4, 4) layout.setSpacing(8) colors = self.style_manager.get_colors() # 2열로 배치: 1열에 1팀,2팀, 2열에 3팀,4팀 for idx, team in enumerate(TEAMS): row = idx // 2 # 0 또는 1 col = idx % 2 # 0 또는 1 # 팀명 레이블 team_label = QLabel(team) team_font = self.style_manager.get_font("section", "content") team_label.setFont(team_font) team_label.setStyleSheet(f"color: {colors['text_secondary']};") team_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) # 토글 스위치 toggle = ToggleSwitch( initial_state=self.confirmations.get(team, False), width=45, height=24 ) toggle.toggled.connect(lambda checked, t=team: self._on_toggle_changed(t, checked)) self.toggles[team] = toggle # 레이아웃에 추가 layout.addWidget(team_label, row, col * 2) # 팀명은 0, 2 열 layout.addWidget(toggle, row, col * 2 + 1) # 토글은 1, 3 열 # 열 비율 설정 layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 0) layout.setColumnStretch(2, 1) layout.setColumnStretch(3, 0) def _on_toggle_changed(self, team: str, checked: bool): """토글 변경 이벤트""" self.confirmations[team] = checked self.confirmation_changed.emit(team, checked) logger.debug(f"팀 확인 상태 변경: {team} = {checked}") def set_confirmations(self, confirmations: Dict[str, bool]): """확인 상태 설정""" self.confirmations = confirmations for team, toggle in self.toggles.items(): toggle.blockSignals(True) toggle.set_state(confirmations.get(team, False), animate=False) toggle.blockSignals(False) def get_confirmations(self) -> Dict[str, bool]: """확인 상태 반환""" return self.confirmations.copy() def get_confirmed_teams(self) -> List[str]: """확인한 팀 목록 반환""" return [team for team, confirmed in self.confirmations.items() if confirmed] def all_confirmed(self) -> bool: """모든 팀 확인 여부""" return all(self.confirmations.values()) def update_display(self): """표시 업데이트 (확인한 팀만 표시)""" # 현재는 모든 팀을 표시하되, 확인한 팀은 토글이 켜진 상태로 표시 # 필요시 확인한 팀만 표시하도록 변경 가능 pass