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)