2024-11-25 14:01:09 +03:00
|
|
|
|
from typing import Union
|
2025-01-20 14:38:41 +03:00
|
|
|
|
|
|
|
|
|
|
import pandas as pd
|
2024-11-25 14:01:09 +03:00
|
|
|
|
from PyQt5.QtWidgets import QWidget
|
|
|
|
|
|
|
2025-01-23 18:13:44 +03:00
|
|
|
|
from base.base import (
|
|
|
|
|
|
BaseMediator,
|
|
|
|
|
|
BaseFileManager,
|
|
|
|
|
|
BaseDataConverter,
|
|
|
|
|
|
BasePlotWidget,
|
|
|
|
|
|
BasePointPassportFormer,
|
|
|
|
|
|
BaseController,
|
|
|
|
|
|
GraphicPassport,
|
2025-01-30 16:08:42 +03:00
|
|
|
|
Settings,
|
|
|
|
|
|
BaseRawTraceProcessor
|
2025-02-11 16:37:39 +03:00
|
|
|
|
)
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Mediator(BaseMediator):
|
2025-02-11 16:37:39 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Медиатор для организации взаимодействия между различными компонентами приложения.
|
|
|
|
|
|
|
|
|
|
|
|
Компоненты (менеджеры, конвертеры, контроллер, виджеты, процессоры) регистрируются
|
|
|
|
|
|
и вызываются через медиатора, который распределяет уведомления и передаваемые данные.
|
|
|
|
|
|
"""
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
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):
|
2025-01-20 14:38:41 +03:00
|
|
|
|
self._controller.update_status("CSV found! Calculating...")
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._converter.convert_data(data)
|
|
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
# Если источник – конвертер данных: обновляем прогресс и формируем паспорта
|
|
|
|
|
|
if isinstance(source, BaseDataConverter):
|
2025-01-21 16:45:53 +03:00
|
|
|
|
self._controller.update_progress(1)
|
2025-01-23 17:33:17 +03:00
|
|
|
|
self._passport_former.form_passports(data)
|
2024-12-04 20:01:30 +03:00
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
# Если источник – формирователь паспортов точек: обновляем прогресс и строим графический паспорт
|
|
|
|
|
|
if isinstance(source, BasePointPassportFormer):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(10)
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._plot.build(data)
|
|
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
# Если источник – виджет для построения графиков: завершаем построение и передаём виджеты контроллеру
|
|
|
|
|
|
if isinstance(source, BasePlotWidget):
|
2025-01-21 16:45:53 +03:00
|
|
|
|
self._controller.update_progress(100)
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._controller.send_widgets(data)
|
2025-02-11 16:37:39 +03:00
|
|
|
|
|
|
|
|
|
|
# Если источник – контроллер: обновляем настройки у различных модулей
|
|
|
|
|
|
if isinstance(source, BaseController):
|
2025-01-21 16:45:53 +03:00
|
|
|
|
self._file_manager.update_monitor_settings(data)
|
2025-01-23 17:33:17 +03:00
|
|
|
|
self._passport_former.update_settings(data)
|
2025-02-05 18:52:04 +03:00
|
|
|
|
self._trace_processor.update_settings(data)
|
2025-02-11 16:37:39 +03:00
|
|
|
|
|
|
|
|
|
|
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):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(5)
|
|
|
|
|
|
self._file_manager.open_raw_traces_dir(data)
|
|
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
if isinstance(source, BaseFileManager):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(15)
|
|
|
|
|
|
self._trace_processor.prerender(data)
|
|
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
if isinstance(source, BaseRawTraceProcessor):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(40)
|
|
|
|
|
|
self._plot.build_raw_trace(data)
|
|
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
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):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(5)
|
|
|
|
|
|
self._trace_processor.final_render()
|
2025-01-20 14:38:41 +03:00
|
|
|
|
|
2025-02-11 16:37:39 +03:00
|
|
|
|
if isinstance(source, BaseRawTraceProcessor):
|
2025-02-06 15:59:16 +03:00
|
|
|
|
self._controller.update_progress(5)
|
2025-02-05 18:52:04 +03:00
|
|
|
|
self._passport_former.form_customer_passport(data)
|
2025-02-11 16:37:39 +03:00
|
|
|
|
|
2025-02-06 13:57:51 +03:00
|
|
|
|
def set_mode(self, mode: int) -> None:
|
2025-02-11 16:37:39 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Устанавливает режим работы для графиков и файлового менеджера.
|
|
|
|
|
|
|
|
|
|
|
|
:param mode: Целое число, определяющее режим работы.
|
|
|
|
|
|
"""
|
2025-02-06 13:57:51 +03:00
|
|
|
|
self._plot.set_mode(mode)
|
|
|
|
|
|
self._file_manager.set_mode(mode)
|