chore: переработан контроллер
This commit is contained in:
parent
16910133ac
commit
2ca5034c45
@ -365,8 +365,10 @@ class BasePlotWidget:
|
||||
class BaseController(QObject):
|
||||
|
||||
def __init__(self,
|
||||
mediator: Optional[BaseMediator] = None):
|
||||
self._mediator = mediator
|
||||
mediator: Optional[BaseMediator] = None,
|
||||
file_manager: Optional[BaseFileManager] = None):
|
||||
self._mediator = mediator
|
||||
self._file_manager = file_manager
|
||||
|
||||
def send_widgets(self, widgets: list[QWidget]) -> None:
|
||||
...
|
||||
@ -374,12 +376,7 @@ class BaseController(QObject):
|
||||
def update_settings(self, settings: list[dict]) -> None:
|
||||
...
|
||||
|
||||
def raport_mode (self) -> None:
|
||||
# TODO: обычно в названиях методов должен присутствовать глагол.
|
||||
...
|
||||
|
||||
def seeking_mode(self) -> None:
|
||||
# TODO: обычно в названиях методов должен присутствовать глагол.
|
||||
def set_working_mode(self, mode:int) -> None:
|
||||
...
|
||||
|
||||
def open_file(self, filepath: str) -> None:
|
||||
@ -388,9 +385,12 @@ class BaseController(QObject):
|
||||
def update_plots(self) -> None:
|
||||
...
|
||||
|
||||
def update_status(self, msg: Union[str, float]) -> None:
|
||||
def update_status(self, msg:str) -> None:
|
||||
...
|
||||
|
||||
def update_progress(self, progress:int) -> None:
|
||||
...
|
||||
|
||||
@property
|
||||
def mediator(self) -> BaseMediator:
|
||||
return self._mediator
|
||||
@ -398,6 +398,14 @@ class BaseController(QObject):
|
||||
@mediator.setter
|
||||
def mediator(self, mediator: BaseMediator) -> None:
|
||||
self._mediator = mediator
|
||||
|
||||
@property
|
||||
def file_manager(self) -> BaseFileManager:
|
||||
return self._file_manager
|
||||
|
||||
@file_manager.setter
|
||||
def file_manager(self, file_manager: BaseFileManager) -> None:
|
||||
self._file_manager = file_manager
|
||||
|
||||
|
||||
class BaseFileManager:
|
||||
@ -429,6 +437,18 @@ class BaseFileManager:
|
||||
def monitor(self, monitor: BaseDirectoryMonitor) -> None:
|
||||
self._monitor = monitor
|
||||
|
||||
def replot_all(self) -> None:
|
||||
...
|
||||
|
||||
def open_custom_file(self, path:str) -> None:
|
||||
...
|
||||
|
||||
def set_mode(self, num:int) -> None:
|
||||
...
|
||||
|
||||
def update_monitor_settings(self, settings:list[dict]) -> None:
|
||||
...
|
||||
|
||||
def add_new_paths(self, paths:list[str]):
|
||||
...
|
||||
|
||||
|
||||
@ -7,47 +7,31 @@ from base.base import BaseController
|
||||
|
||||
|
||||
class Controller(BaseController):
|
||||
|
||||
signal_widgets = pyqtSignal(list)
|
||||
signal_settings = pyqtSignal(list)
|
||||
signal_open_file = pyqtSignal(str)
|
||||
signal_statusBar = pyqtSignal(int)
|
||||
signal_statusText = pyqtSignal(str)
|
||||
signal_raport_mode = pyqtSignal()
|
||||
signal_seeking_mode = pyqtSignal()
|
||||
signal_update_plots = pyqtSignal()
|
||||
signal_progress_bar = pyqtSignal(int)
|
||||
signal_status_text = pyqtSignal(str)
|
||||
|
||||
def update_settings(self, settings: list[dict]) -> None:
|
||||
self.mediator.notify(settings)
|
||||
|
||||
# TODO: Объедини переключение режимов в один метод, и по входному аргументу (например 1 и 2) переключай их.
|
||||
def set_working_mode(self, mode:int) -> None:
|
||||
self._file_manager.set_mode(mode)
|
||||
|
||||
def open_file(self, filepath: str) -> None:
|
||||
self._file_manager.open_custom_file(filepath)
|
||||
|
||||
def update_plots(self) -> None:
|
||||
self._file_manager.replot_all()
|
||||
|
||||
def send_widgets(self, widgets: list[QWidget]) -> None:
|
||||
self.signal_widgets.emit(widgets)
|
||||
|
||||
def update_settings(self, settings: list[dict]) -> None:
|
||||
# TODO: Почему контроллеру просто не сообщить о медиаторе, и ему сообщать что-то через notify? Тем более, что
|
||||
# медиатор уже знает про контроллер...
|
||||
self.signal_settings.emit(settings)
|
||||
|
||||
# TODO: Объедини переключение режимов в один метод, и по входному аргументу (например 1 и 2) переключай их.
|
||||
def raport_mode(self) -> None:
|
||||
self.signal_raport_mode.emit()
|
||||
|
||||
def seeking_mode(self) -> None:
|
||||
self.signal_seeking_mode.emit()
|
||||
def update_status(self, msg:str) -> None:
|
||||
self.signal_status_text.emit(msg)
|
||||
|
||||
def open_file(self, filepath: str) -> None:
|
||||
# TODO: Где тут открытие файла?
|
||||
self.signal_open_file.emit(filepath)
|
||||
def update_progress(self, progress:int) -> None:
|
||||
self.signal_progress_bar.emit(progress)
|
||||
|
||||
def update_plots(self) -> None:
|
||||
self.signal_update_plots.emit()
|
||||
|
||||
def update_status(self, msg: Union[str, float, int]) -> None:
|
||||
# TODO: Довольно странный набор возможных типов входных аргументов.
|
||||
# TODO: Для чего сюда принимается float, если он все равно приводится к int?
|
||||
# TODO: Из медиатора сюда приходит статус 0.5, который становится нулем.
|
||||
# Это точно ожидаемое и корректное поведение? Сомнительно...
|
||||
# TODO: if isinstance(msg, float): ...
|
||||
if type(msg) == float or type(msg) == int:
|
||||
self.signal_statusBar.emit(int(msg))
|
||||
else:
|
||||
self.signal_statusText.emit(msg)
|
||||
|
||||
|
||||
@ -38,24 +38,26 @@ class DirectoryMonitor(BaseDirectoryMonitor):
|
||||
|
||||
class FileManager(BaseFileManager):
|
||||
|
||||
def update_plots(self):
|
||||
def replot_all(self) -> None:
|
||||
if self._paths_library is not None:
|
||||
self._mediator.notify(self, list(self._paths_library))
|
||||
|
||||
def open_custom_file(self, path:str):
|
||||
def open_custom_file(self, path:str) -> None:
|
||||
self._paths_library.add(path)
|
||||
self._mediator.notify(self, [path if path else ''])
|
||||
|
||||
def start_raport_mode(self) -> None:
|
||||
self._monitor.stop()
|
||||
self._paths_library.clear()
|
||||
self._paths_library.add('')
|
||||
self._mediator.notify(self, list(self._paths_library))
|
||||
|
||||
def start_seeking_mode(self) -> None:
|
||||
self._monitor.init_state()
|
||||
self._monitor.start()
|
||||
def set_mode(self, num:int) -> None:
|
||||
match num:
|
||||
case 1: # Режим создания отчета
|
||||
self._monitor.stop()
|
||||
self._paths_library.clear()
|
||||
self._paths_library.add('')
|
||||
self._mediator.notify(self, list(self._paths_library))
|
||||
|
||||
case 2: # Режим онлайн-мониторинга папки
|
||||
self._monitor.init_state()
|
||||
self._monitor.start()
|
||||
|
||||
def update_monitor_settings(self, settings:list[dict]) -> None:
|
||||
_, system_params = settings
|
||||
directory_path = system_params['trace_storage_path'][0]
|
||||
@ -5,38 +5,35 @@ from PyQt5.QtWidgets import QWidget
|
||||
|
||||
from base.base import (BaseMediator, BaseDirectoryMonitor,
|
||||
BaseDataConverter, BasePlotWidget,
|
||||
BasePointPassportFormer)
|
||||
BasePointPassportFormer,
|
||||
BaseController)
|
||||
|
||||
|
||||
class Mediator(BaseMediator):
|
||||
|
||||
def notify(self,
|
||||
source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget],
|
||||
data: Union[list[str], list[pd.DataFrame], list[list], list[QWidget]]):
|
||||
source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget, BaseController],
|
||||
data: Union[list[str], list[pd.DataFrame], list[list], list[QWidget], list[dict]]):
|
||||
|
||||
if issubclass(source.__class__, BaseDirectoryMonitor):
|
||||
self._controller.update_status("CSV found! Calculating...")
|
||||
self._converter.convert_data(data)
|
||||
|
||||
if issubclass(source.__class__, BaseDataConverter):
|
||||
self._controller.update_status(1)
|
||||
self._controller.update_progress(1)
|
||||
self._passportFormer.form_passports(data)
|
||||
|
||||
if issubclass(source.__class__, BasePointPassportFormer):
|
||||
self._controller.update_status(2)
|
||||
self._controller.update_progress(2)
|
||||
self._plot.build(data)
|
||||
|
||||
if issubclass(source.__class__, BasePlotWidget):
|
||||
self._controller.update_status(100)
|
||||
self._controller.update_progress(100)
|
||||
self._controller.send_widgets(data)
|
||||
|
||||
def update_settings(self, settings: list[dict]):
|
||||
# TODO: А дописать self.notify не?
|
||||
# if issubclass(source.__class__, BaseController):
|
||||
# self._monitor.update_settings(data)
|
||||
# self._passportFormer.update_settings(data)
|
||||
self._monitor.update_settings(settings)
|
||||
self._passportFormer.update_settings(settings)
|
||||
|
||||
if issubclass(source.__class__, BaseController):
|
||||
self._file_manager.update_monitor_settings(data)
|
||||
self._passportFormer.update_settings(data)
|
||||
|
||||
|
||||
|
||||
|
||||
17
src/main.py
17
src/main.py
@ -4,14 +4,13 @@ import pyqtgraph as pg
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
from gui.mainGui import MainWindow
|
||||
from controller.monitor import DirectoryMonitor
|
||||
from src.controller.file_manager import DirectoryMonitor
|
||||
from controller.mediator import Mediator
|
||||
from controller.converter import DataConverter
|
||||
from gui.plotter import PlotWidget
|
||||
from controller.controller import Controller
|
||||
from controller.passportFormer import PassportFormer
|
||||
|
||||
# TODO: Актуализировать requirements.txt!!! Делать это регулярно после добавления новых библиотек!
|
||||
# TODO: Именование модулей: lowercase / snake_case.
|
||||
|
||||
def main():
|
||||
@ -27,13 +26,13 @@ def main():
|
||||
window.show()
|
||||
|
||||
controller.signal_widgets.connect(window.show_plot_tabs)
|
||||
controller.signal_statusBar.connect(window.update_progressBar)
|
||||
controller.signal_statusText.connect(window.update_stateLabel)
|
||||
controller.signal_settings.connect(mediator.update_settings)
|
||||
controller.signal_open_file.connect(monitor.custom_csv_extract_only)
|
||||
controller.signal_raport_mode.connect(monitor.start_raport)
|
||||
controller.signal_seeking_mode.connect(monitor.start_seeking)
|
||||
controller.signal_update_plots.connect(monitor.update_plots)
|
||||
controller.signal_progress_bar.connect(window.update_progressBar)
|
||||
controller.signal_status_text.connect(window.update_stateLabel)
|
||||
#controller.signal_settings.connect(mediator.update_settings)
|
||||
#controller.signal_open_file.connect(monitor.custom_csv_extract_only)
|
||||
#controller.signal_raport_mode.connect(monitor.start_raport)
|
||||
#controller.signal_seeking_mode.connect(monitor.start_seeking)
|
||||
#controller.signal_update_plots.connect(monitor.update_plots)
|
||||
|
||||
sys.exit(app.exec_())
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user