WeldingSpotPerformance/src/controller/mediator.py

128 lines
5.6 KiB
Python
Raw Normal View History

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)