AI_MMI_Analyser/app/core/sync_controller.py

39 lines
1.5 KiB
Python

from PySide6.QtCore import QObject, Signal
class SyncController(QObject):
# 시점 변경 시그널 (인덱스, 데이터행, 보낸사람ID)
time_changed = Signal(int, object, str)
# X축 범위 변경 시그널 (min_ms, max_ms, 보낸사람ID)
# 밀리초(ms)는 1.7e12 수준이라 32-bit int를 초과할 수 있어 object로 받음(오버플로우 방지)
x_range_changed = Signal(object, object, object)
# 동기화 활성화 여부
is_sync_enabled = True
def __init__(self):
super().__init__()
self._total_records = 0
def request_sync(self, index, data_row, source_id):
"""
특정 패널에서 시간 변경 요청이 오면,
동기화가 켜져 있을 때만 다른 패널들에게 전파
"""
if self.is_sync_enabled:
# Sync가 켜져있으면 모두에게 알림 (source_id 포함)
self.time_changed.emit(index, data_row, source_id)
else:
# Sync가 꺼져있으면 아무것도 안 함 (각자 놈)
pass
def request_x_range_sync(self, min_ms: int, max_ms: int, source_id):
"""
특정 패널에서 X축(시간축) 범위 변경 요청이 오면,
동기화가 켜져 있을 때만 다른 패널들에게 전파
"""
if self.is_sync_enabled:
# int 캐스팅은 유지하되 시그널 타입은 object라 안전(파이썬 int 그대로 전달)
self.x_range_changed.emit(int(min_ms), int(max_ms), source_id)
sync_manager = SyncController()