128 lines
5.6 KiB
Python
128 lines
5.6 KiB
Python
from typing import Union
|
||
|
||
import pandas as pd
|
||
from PyQt5.QtWidgets import QWidget
|
||
|
||
from base.base import (
|
||
BaseMediator,
|
||
BaseFileManager,
|
||
BaseDataConverter,
|
||
BasePlotWidget,
|
||
BasePointPassportFormer,
|
||
BaseController,
|
||
GraphicPassport,
|
||
Settings,
|
||
BaseRawTraceProcessor
|
||
)
|
||
|
||
|
||
class Mediator(BaseMediator):
|
||
"""
|
||
Медиатор для организации взаимодействия между различными компонентами приложения.
|
||
|
||
Компоненты (менеджеры, конвертеры, контроллер, виджеты, процессоры) регистрируются
|
||
и вызываются через медиатора, который распределяет уведомления и передаваемые данные.
|
||
"""
|
||
|
||
def notify(
|
||
self,
|
||
source: Union[
|
||
BaseFileManager,
|
||
BaseDataConverter,
|
||
BasePointPassportFormer,
|
||
BasePlotWidget,
|
||
BaseController,
|
||
BaseRawTraceProcessor
|
||
],
|
||
data: Union[
|
||
list[str],
|
||
list[pd.DataFrame],
|
||
list[GraphicPassport],
|
||
list[QWidget],
|
||
Settings,
|
||
pd.DataFrame
|
||
]
|
||
) -> None:
|
||
"""
|
||
Принимает уведомление от компонента-источника и направляет данные в соответствующий модуль.
|
||
|
||
:param source: Компонент, вызвавший уведомление.
|
||
:param data: Передаваемые данные (могут быть строками, DataFrame, графическими паспортами, виджетами, Settings).
|
||
"""
|
||
# Если источник – менеджер файлов: обновляем статус и запускаем конвертацию CSV
|
||
if isinstance(source, BaseFileManager):
|
||
self._controller.update_status("CSV found! Calculating...")
|
||
self._converter.convert_data(data)
|
||
|
||
# Если источник – конвертер данных: обновляем прогресс и формируем паспорта
|
||
if isinstance(source, BaseDataConverter):
|
||
self._controller.update_progress(1)
|
||
self._passport_former.form_passports(data)
|
||
|
||
# Если источник – формирователь паспортов точек: обновляем прогресс и строим графический паспорт
|
||
if isinstance(source, BasePointPassportFormer):
|
||
self._controller.update_progress(10)
|
||
self._plot.build(data)
|
||
|
||
# Если источник – виджет для построения графиков: завершаем построение и передаём виджеты контроллеру
|
||
if isinstance(source, BasePlotWidget):
|
||
self._controller.update_progress(100)
|
||
self._controller.send_widgets(data)
|
||
|
||
# Если источник – контроллер: обновляем настройки у различных модулей
|
||
if isinstance(source, BaseController):
|
||
self._file_manager.update_monitor_settings(data)
|
||
self._passport_former.update_settings(data)
|
||
self._trace_processor.update_settings(data)
|
||
|
||
def prerender_TCW(
|
||
self,
|
||
source: Union[BaseController, BaseFileManager, BaseRawTraceProcessor],
|
||
data: Union[str, list[str], list[pd.DataFrame], dict]
|
||
) -> None:
|
||
"""
|
||
Выполняет предварительный рендеринг TCW (trace control widget) в зависимости от источника уведомления.
|
||
|
||
:param source: Компонент, инициирующий предварительный рендеринг.
|
||
:param data: Передаваемые данные, могут быть строкой или списком путей/DataFrame и словарём.
|
||
"""
|
||
if isinstance(source, BaseController):
|
||
self._controller.update_progress(5)
|
||
self._file_manager.open_raw_traces_dir(data)
|
||
|
||
if isinstance(source, BaseFileManager):
|
||
self._controller.update_progress(15)
|
||
self._trace_processor.prerender(data)
|
||
|
||
if isinstance(source, BaseRawTraceProcessor):
|
||
self._controller.update_progress(40)
|
||
self._plot.build_raw_trace(data)
|
||
|
||
def render_TCW(
|
||
self,
|
||
source: Union[BaseController, BaseRawTraceProcessor],
|
||
data: Union[str, list[pd.DataFrame], dict] = None
|
||
) -> None:
|
||
"""
|
||
Выполняет финальный рендеринг TCW.
|
||
|
||
:param source: Компонент, инициирующий финальный рендеринг.
|
||
:param data: Передаваемые данные (опционально).
|
||
"""
|
||
if isinstance(source, BaseController):
|
||
self._controller.update_progress(5)
|
||
self._trace_processor.final_render()
|
||
|
||
if isinstance(source, BaseRawTraceProcessor):
|
||
self._controller.update_progress(5)
|
||
self._passport_former.form_customer_passport(data)
|
||
|
||
def set_mode(self, mode: int) -> None:
|
||
"""
|
||
Устанавливает режим работы для графиков и файлового менеджера.
|
||
|
||
:param mode: Целое число, определяющее режим работы.
|
||
"""
|
||
self._plot.set_mode(mode)
|
||
self._file_manager.set_mode(mode)
|