handOver2/core/signals.py

210 lines
7.2 KiB
Python

# -*- 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()