39 lines
1.5 KiB
Python
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() |