# -*- coding: utf-8 -*- """ 전역 시그널 모듈 애플리케이션 전역에서 사용되는 시그널들을 정의합니다. Qt 시그널/슬롯 메커니즘을 사용하여 모듈 간 느슨한 결합을 유지합니다. 이 모듈을 통해 서로 다른 모듈 간에 이벤트를 전파할 수 있습니다. """ from PySide6.QtCore import QObject, Signal from typing import Optional class GlobalSignals(QObject): """ 전역 시그널 클래스 싱글톤 패턴을 사용하여 애플리케이션 전역에서 하나의 인스턴스만 사용합니다. 다양한 모듈 간 통신에 사용되는 시그널들을 정의합니다. Attributes: data_changed: 데이터 변경 시그널 user_logged_in: 사용자 로그인 시그널 theme_changed: 테마 변경 시그널 team_changed: 팀 변경 시그널 ... Examples: >>> signals = GlobalSignals() >>> signals.data_changed.emit("instructions") >>> signals.user_logged_in.connect(self.on_user_login) """ _instance: Optional['GlobalSignals'] = None # ======================================================================== # 데이터 관련 시그널 # ======================================================================== # 데이터 변경 시그널 (테이블명: str) data_changed = Signal(str) # 레코드 생성 시그널 (테이블명: str, 레코드 ID: int) record_created = Signal(str, int) # 레코드 업데이트 시그널 (테이블명: str, 레코드 ID: int) record_updated = Signal(str, int) # 레코드 삭제 시그널 (테이블명: str, 레코드 ID: int) record_deleted = Signal(str, int) # 데이터 동기화 완료 시그널 sync_completed = Signal() # 데이터 동기화 오류 시그널 (오류 메시지: str) sync_error = Signal(str) # ======================================================================== # 사용자/인증 관련 시그널 # ======================================================================== # 사용자 로그인 시그널 (사용자 ID: int, 사용자명: str) user_logged_in = Signal(int, str) # 사용자 로그아웃 시그널 user_logged_out = Signal() # 권한 변경 시그널 (새 권한: str) permission_changed = Signal(str) # ======================================================================== # 팀/근무 관련 시그널 # ======================================================================== # 팀 변경 시그널 (새 팀명: str) team_changed = Signal(str) # 근무 유형 변경 시그널 (새 근무 유형: str - "주간" 또는 "야간") shift_changed = Signal(str) # ======================================================================== # UI 관련 시그널 # ======================================================================== # 테마 변경 시그널 (테마명: str) theme_changed = Signal(str) # 레이아웃 변경 시그널 layout_changed = Signal() # 섹션 탭 변경 시그널 (섹션명: str) section_tab_changed = Signal(str) # 상태바 메시지 시그널 (메시지: str, 타임아웃: int) status_message = Signal(str, int) # 알림 시그널 (제목: str, 메시지: str, 유형: str) notification = Signal(str, str, str) # ======================================================================== # 날씨 관련 시그널 # ======================================================================== # 날씨 정보 업데이트 시그널 (날씨 데이터: dict를 JSON 문자열로) weather_updated = Signal(str) # 날씨 업데이트 오류 시그널 (오류 메시지: str) weather_error = Signal(str) # 날씨 지역 변경 시그널 weather_location_changed = Signal() # 날씨 새로고침 요청 시그널 weather_refresh_requested = Signal() # ======================================================================== # 업데이트 관련 시그널 # ======================================================================== # 업데이트 가능 시그널 (새 버전: str) update_available = Signal(str) # 업데이트 진행 시그널 (진행률: int) update_progress = Signal(int) # 업데이트 완료 시그널 update_completed = Signal() # 업데이트 오류 시그널 (오류 메시지: str) update_error = Signal(str) # ======================================================================== # 편성 관련 시그널 # ======================================================================== # 편성 선택 시그널 (편성번호: str) train_selected = Signal(str) # 편성 정보 팝업 요청 시그널 (편성번호: str, x 위치: int, y 위치: int) show_train_popup = Signal(str, int, int) # 편성 정보 팝업 숨김 시그널 hide_train_popup = Signal() # ======================================================================== # 일상검수 관련 시그널 # ======================================================================== # 일상검수 편성 변경 시그널 (근무 유형: str, 슬롯 번호: int, 편성번호: str) daily_inspection_changed = Signal(str, int, str) # ======================================================================== # Todo/메모 관련 시그널 # ======================================================================== # Todo 추가 시그널 (Todo ID: int) todo_added = Signal(int) # Todo 완료 상태 변경 시그널 (Todo ID: int, 완료 여부: bool) todo_status_changed = Signal(int, bool) # 메모 변경 시그널 (메모 ID: int) memo_changed = Signal(int) # ======================================================================== # 시스템 시그널 # ======================================================================== # 애플리케이션 종료 요청 시그널 app_quit_requested = Signal() # 에러 발생 시그널 (에러 타입: str, 에러 메시지: str) error_occurred = Signal(str, str) # 디버그 메시지 시그널 (메시지: str) debug_message = Signal(str) def __new__(cls): """싱글톤 패턴 구현""" if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self): """초기화""" # QObject 초기화는 한 번만 수행 if not hasattr(self, '_initialized'): super().__init__() self._initialized = True # ============================================================================ # 모듈 레벨 편의 함수 # ============================================================================ def get_signals() -> GlobalSignals: """ 전역 시그널 인스턴스를 반환합니다. Returns: GlobalSignals 인스턴스 Examples: >>> signals = get_signals() >>> signals.data_changed.emit("instructions") """ return GlobalSignals()