210 lines
7.2 KiB
Python
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()
|
|
|
|
|