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