From 3c18e22d09481d093da5eb84c6ee33c0fe5ba6ac Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 18 Dec 2024 19:43:46 +0300 Subject: [PATCH] =?UTF-8?q?dev:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B0=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20+=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B6=D0=B8=D0=BC=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20rap?= =?UTF-8?q?ort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- params/operator_params.json | 2 +- pixmap.png | Bin 0 -> 66212 bytes .../__pycache__/controller.cpython-310.pyc | Bin 1086 -> 1271 bytes .../__pycache__/mediator.cpython-310.pyc | Bin 1346 -> 1337 bytes .../__pycache__/monitor.cpython-310.pyc | Bin 2543 -> 2967 bytes src/controller/controller.py | 15 +- src/controller/mediator.py | 4 +- src/controller/monitor.py | 44 +++-- src/gui/__pycache__/mainGui.cpython-310.pyc | Bin 4049 -> 6828 bytes src/gui/mainGui.py | 161 ++++++++++++++---- src/main.py | 7 +- .../base/__pycache__/base.cpython-310.pyc | Bin 20026 -> 20365 bytes src/utils/base/base.py | 19 ++- 13 files changed, 188 insertions(+), 64 deletions(-) create mode 100644 pixmap.png diff --git a/params/operator_params.json b/params/operator_params.json index 7be03f3..ed2d473 100644 --- a/params/operator_params.json +++ b/params/operator_params.json @@ -192,7 +192,7 @@ 0.0045 ], "force_target": [ - 5000.0, + 4000.0, 5000.0, 5000.0, 5000.0, diff --git a/pixmap.png b/pixmap.png new file mode 100644 index 0000000000000000000000000000000000000000..847987a8e3d170bed6c234711d2c65983a307d82 GIT binary patch literal 66212 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%0Dpw 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

%OqPQLenF0SC7hG}qFO0(h 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 literal 0 HcmV?d00001 diff --git a/src/controller/__pycache__/controller.cpython-310.pyc b/src/controller/__pycache__/controller.cpython-310.pyc index bab4ee2f2dbee4a544bbf001187bc79764878d80..8740ba907d678a6af15e84c44a1581badf42bb3f 100644 GIT binary patch delta 428 zcmYk0ze)o^5XN_Q&)ok@yl75S2*K(=ECsQQwN0$jgy^gx8gpUqv}GhT%6K-+a&3x9ums?=Y&TucO|_%zpqid)z#f;+nN>1ZhZT zogqhYVxWObQ={!-iKw@rCR#*&w52)MIp`7zFhCD|+R7+eEH3Lhyh5NqVY*em7-2V) zom6I7f7nZxDS)cb7}uN0FjL83Al3GtNZ<0^YMAzW!|tG?x}!v8o$~~xe&>xVw*Xca zCbfb|L2wMD_^*8D)J^I%pfO>m><;c3Fk~&JY(g=AtIi*%Ql3%L-_Od;Z=gJ;LnGYt zinl1Y%Y6eFM}-(gP0W=^ii5bKcf>wK`ciDbn!XW@)sVQwEN+1XC8+V52t}Y@#N-D> Cj%+^w delta 262 zcmey)xsQW4pO=@50SGMDC8kGBMGo+EsKv$*7H~As6%VaGUsmY!!vVwd-O&kmyOdO0HjABe; K%wm(PS!w_{L`U!d diff --git a/src/controller/__pycache__/mediator.cpython-310.pyc b/src/controller/__pycache__/mediator.cpython-310.pyc index f080cb28d39c95bef72a854d6d429c8623512b49..b9e2e28e0405344a48349832849278d8707a4407 100644 GIT binary patch delta 98 zcmX@awUdiCpO=@50SJCQOG@9kk#_+zFHdPfN@7WBd_hirN%7>}%+jhwvOonOT+9X} sco=yY`53Dtd{a|06HD@o^dRadGqaR1%1-8E6`$PCqQj^%c@Ik)07c;%r~m)} delta 103 zcmdnVb%={MpO=@50SNlblF~P9 z)RL0Sy!2vOp!#AqAi=}P!^p>2CFYx&l9^bNU!(_8Hu)EG38Vbvd=_U$)ybP#+5k`V BA5#DT diff --git a/src/controller/__pycache__/monitor.cpython-310.pyc b/src/controller/__pycache__/monitor.cpython-310.pyc index c222d517a446315976939b0096d526f70b071ccc..582c5847dd1bfe2e4a479f8a17fc169f6d33a953 100644 GIT binary patch literal 2967 zcma)8&2Jk;6rY*>@Y=ECG<6FpDKZogR>3NTN+_zrR|F@bN3eo^TJHmdELR((wO= zm1MU;ji035u8<(rzK@jHiKS@kR37}C_G9SVsCV*re0B@o3euvSv>2zHJtr-PJKTjH z&J&*SHwgE6q2uy^7oWSW0x$6um<@QDSD-KQRZ;3NUgc{ryTUK?OMD%qGB1FIHM6#4 z3q4^7%4mxNkJ^IfH`1ZjjzE(MeL?owl>^?anN3LP1GVUPKkBqyY#(h%_ z`8rve~{{XLUvNw zi~4P`r(}Dto%Xd%lSIh9UY?xh;J}pbCb81(v^UsB(7Z(BH_7PM+2A$97!n#P9cj_L zo22b1QQIKQ7mwCw8Ly*W3|jnyMo9wvh$)~JcqCVF@%S{VYWlu>o3 z3o~H}0c1hsUkoDYfjPO?1(eFzEFytHkn7N_p@66xeZK7WJm=@+?o=EQ$ry0lM8$wkw|2EjsF4XaIrW zTlL0@MUkw*hBE}IRKk>T5m&~C1zJdp5_t`jOfl>U4iHSG@%yQcI|sSZj>HHV&z{gK z_Qlg2ie~^NH$V%+t1zh7=r!unHM&ZD=u6anJ=(a?C*uO7BjZb&grr;f#|5A>))cd=td#yS9#>2q-!_9pv#Z&($n---8W|2ZcfE zhHE1%KgL%yG!=EAwCKS>GU};3%*Zimd0U+wri9i|vlND1VU~Rwz<(9~0WH%2c)U(W z^`)SnS-yl~47d&UXCPp(IT=z}(-h@HU?%iz0zt(wa&yi_iA5WHL8KdRAY&+;AA&4z zV6!0J!j*X~8ziY#pMaLa!dC*g)TsO4==w#rTm4gpBh~S-hL1qN+XxMv(lO0I3Y{*2 zLIan`4tY==J8-GE6Av{qXUfKI#wLE|V&Qqb3gzevU6=%%F3J&T7AGZe+Lj}9*=jJo zl0gxh7cGkzXLnS)2OeQ|>QR#9)ZD6%sy{|h!g+l#RF813Q9eUa8#;-_SYin=el!?} zK3{Nj5l`bNEgN1AoR2`cRfMBv#Jr9>*lldA7Xh!pT>wZ%O&-gepk|R%o{@A7aD${> zr|+`S`%BS3wb<@|imAxbWANO90q~CG9PMHTAP*KwS25}qK(q@N`Z9nTXg;E7;ckQF zo}TB_JMAHmtQWS`lTbWEuIe!DCkJ1{4z?5{Edqqp>(Qr6PF=A06uRcc-J%PrcI?@# z3Sr)J_%n&bwxK;2@)gVYPzmuXKwuk9#F!yt&x!acWrzWCWVca)OFryJJrRbc6vBPa zhY8B%Fnm0Wl6)q&1B-*KLjxr?Zfn`ZG3G{oiOp?n@N-t)!DfM$W5`If4zEvzmq0)Q z7Wh|7K_&23E33YpZTJ?(E&Qe(%3=Q9Q61_yQO$?&acdjt-~qVVd8fc7n0v8}p|({Z KAZ1!+HRpfL)2%B2 literal 2543 zcma)8&yU+g6rLG7j+4#qhOjN&7L}l02!&NCAf#2bRImahL{zB9mPub$UNBiv{&TNak^CX+1b<>A z>vp&e(rh?X8m+Cb;#}<~TJ=q)kAKL<37&oGckwz~`#XG9tj8tm3CX2+!Frzbq>m@o zQxz3#Ga1P0z?Y${z3_WgS(j_@hO(h*10mPt2ENv174dA^=E}a?VURuSrfV$*_Xx&RUB-wG(VDiH(x)cj{JTxvi#2 zZe*hEW&~RT5KUt9*ap!cNmXte(}~20$Rs1BZIvF`)Yxi28;{Z7hS8`5OjD@VPsW3+ zBdnjRbYLrPj#o@K;rr`LxqGmm#F18${2;!2@S{p)G9EshWafd=gG`U&abF$ex_^M# zjn2|k>4U}eJCkF(7SRTx+#sMD0TRMAc)*)tgU{Z56Udzl-TN0oB|vE?J@YXPf%h!YC!!E~$5iK`^b7GT`yC1440F`x^_Q#=ryyg2 zIit0L=bsPZiPk6`E+v)jrEn-TV%OUg4k2aO5uXc8hTNWthwK&ac6?od$NDZg{!x~U zH53Au<grdoRuUahmV#EXS<`NOQOV zNudSpl>G!jY5LaTn&8w|$y_5tyKs@{ZM57tnxM{RTV3_E?P$@K%78&i?zTG(w>urs zFxr+4@=U{JeIls!M)AZ37-f`pJk#scsTPft1fMf)gK=h(!Lf^@VR zmqEGk2qWEqp*V92yTP0Ig|B_lSxg;FOoi=^qkzLP^bE8I>UdN-n zgzPMtc5|^ru8e_l^BWkI6OJJd0ow*_gU{M4puI8d61j-hbUUzSXslMaA%onYhJE&E z^TdNX{CS0HVBwvL6UYy>&nNjk*?=fNaiZksqC`)KvRH_c;B-BNSt}srrF0$4UU#W%^zdqtAs5Du!ZpT6&M@DlZhJ3bF%82{NUT$=! za?Vj(!%_>5zC*p-G!FH1=+{vnk$&na6MYNaa_UCakGR?d@IGvdUlX&ND+#zX*w$py zH;zFov?c1gvbc*zSr&29px8+^<@&~XSuDgpLm8ygN6cX<7bRI2NM1@Zse#1pD#3L$ zhG71q+6iBlx`LmIU&Ip>JI6Ulm^e`)L4e{&5j%IRPn84Z?qhPEgHyjpWul*rCVQX4 z;|kt&Hv3`)hyE0r7!iVzdPagWsCZ|kZ#l=J*p}t!EN@GxxV5Ra=-X#e+@Y4MysgzG z$eB~wtV16y{QSRXxBf?Hoi&`U(KsHdD6;hk2d$i@)NVx4lWClm9!+X?#Y~eNQJ0Wh z{Q-Uah|Gs%?vinMof}sKDc@9ZOBJ(Fgw?BSVc1&NI9fGwDvE}^(-C$2W diff --git a/src/controller/controller.py b/src/controller/controller.py index 4d6362f..538e498 100644 --- a/src/controller/controller.py +++ b/src/controller/controller.py @@ -8,14 +8,21 @@ class Controller(BaseController): signal_widgets = pyqtSignal(list) signal_settings = pyqtSignal(list) - signal_monitor = pyqtSignal(str) + signal_raport_mode = pyqtSignal(str) + signal_seeking_mode = pyqtSignal() def send_widgets(self, widgets: list[QWidget]) -> None: self.signal_widgets.emit(widgets) - def push_settings(self, settings: list[dict]) -> None: + def update_settings(self, settings: list[dict]) -> None: self.signal_settings.emit(settings) - def open_custom_file (self, filepath: str) -> None: - self.signal_monitor.emit(filepath) + def raport_mode(self, filepath: str) -> None: + self.signal_raport_mode.emit(filepath) + + def seeking_mode(self) -> None: + self.signal_seeking_mode.emit() + + + \ No newline at end of file diff --git a/src/controller/mediator.py b/src/controller/mediator.py index eaae327..38e4657 100644 --- a/src/controller/mediator.py +++ b/src/controller/mediator.py @@ -26,9 +26,9 @@ class Mediator(BaseMediator): if issubclass(source.__class__, BasePlotWidget): self._controller.send_widgets(data) - def push_settings(self, settings: list[dict]): + def update_settings(self, settings: list[dict]): self._monitor.update_settings(settings) self._passportFormer.update_settings(settings) - self._monitor.force_all_dir() + self._monitor.update_plots() diff --git a/src/controller/monitor.py b/src/controller/monitor.py index 3ad8858..0a2dc6d 100644 --- a/src/controller/monitor.py +++ b/src/controller/monitor.py @@ -7,16 +7,14 @@ from utils.base.base import BaseDirectoryMonitor class DirectoryMonitor(BaseDirectoryMonitor): def _init_state(self): - files = os.listdir(self._directory_path) - self._files = files + self._files = [os.path.join(self._directory_path, file) for file in os.listdir(self._directory_path)] self.update_timer.timeout.connect(self._monitor) logger.info("Monitor initiated!") def _monitor(self): - files = os.listdir(self._directory_path) - new_files = sorted(list(map(lambda x: os.path.join(self._directory_path, x), - filter(lambda x: x not in self._files, files)))) + files = [os.path.join(self._directory_path, file) for file in os.listdir(self._directory_path)] + new_files = sorted(list(filter(lambda x: x not in self._files, files))) if new_files: logger.info(f"New files detected: {new_files}") self._mediator.notify(self, new_files) @@ -25,12 +23,22 @@ class DirectoryMonitor(BaseDirectoryMonitor): self._files = [] def update_settings(self, data: list[dict]) -> None: - self.stop() - _, system_params = data - self._directory_path = system_params['trace_storage_path'][0] - self._update_time = system_params['monitor_update_period'][0] - self._init_state() - self.start() + if self.isActive: + self.stop() + _, system_params = data + self._directory_path = system_params['trace_storage_path'][0] + self._update_time = system_params['monitor_update_period'][0] + self._init_state() + self.start() + else: + _, system_params = data + self._directory_path = system_params['trace_storage_path'][0] + self._update_time = system_params['monitor_update_period'][0] + + def update_plots(self): + if self._files is not None: + print(self._files) + self._mediator.notify(self, self._files) def force_all_dir(self): files = os.listdir(self._directory_path) @@ -45,9 +53,13 @@ class DirectoryMonitor(BaseDirectoryMonitor): else: logger.info(f"Failed pushing {str(all_files)}") - def custom_dir_extract(self, dict_path:str ): - files = os.listdir(dict_path) - if files is not None: - all_files = [os.path.join(dict_path, file) for file in files] - self._mediator.notify(self, all_files) + def custom_csv_extract_only(self, path: str): + self.stop() + self._files = [path] + if path is not None: + self._mediator.notify(self, [path]) + + def start_seeking(self) -> None: + self._init_state() + self.start() diff --git a/src/gui/__pycache__/mainGui.cpython-310.pyc b/src/gui/__pycache__/mainGui.cpython-310.pyc index 273f46fb5c3bf02b0438f351dabaf550a062bbd2..22bbd1a92ec0b3565da01979cc9a8e831122891e 100644 GIT binary patch literal 6828 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 F{TJEP@mc@? diff --git a/src/gui/mainGui.py b/src/gui/mainGui.py index 7597dde..d51484b 100644 --- a/src/gui/mainGui.py +++ b/src/gui/mainGui.py @@ -2,6 +2,7 @@ from datetime import datetime as dt from typing import Optional from PyQt5 import QtWidgets from PyQt5.QtCore import Qt +from PyQt5.QtGui import QPixmap from utils.base.base import BaseMainWindow, BaseController from gui.settings_window import settingsWindow @@ -12,36 +13,126 @@ class MainWindow(BaseMainWindow): controller: Optional[BaseController] = None) -> None: super().__init__() self._controller = controller - self.initUI() - self.set_style(self) - self.settings_button.clicked.connect(self._show_settings) - self.select_dir_button.clicked.connect(self._select_dir) - self.report_button.clicked.connect(self._report_window) - self.operSettings = settingsWindow("params/operator_params.json", 'Operator', self._updater_trigger) - self.sysSettings = settingsWindow("params/system_params.json", 'System', self._updater_trigger) - self.repSettings = ReportSettings() + self._init_startUI() + - def initUI(self) -> None: + def _init_startUI(self) -> None: + self.operSettings = settingsWindow("params/operator_params.json", 'Operator', self._transfer_settings) + self.sysSettings = settingsWindow("params/system_params.json", 'System', self._transfer_settings) + self.repSettings = ReportSettings() + self.tabWidget = QtWidgets.QTabWidget() + + self._clear() + seeking_mode_btn = QtWidgets.QPushButton("Real time folder scanning") + seeking_mode_btn.setFixedWidth(300) + seeking_mode_btn.clicked.connect(self._init_seekingUI) + raport_mode_btn = QtWidgets.QPushButton("Raport editor") + raport_mode_btn.setFixedWidth(300) + raport_mode_btn.clicked.connect(self._init_raportUI) + + button_layout = QtWidgets.QHBoxLayout() + button_layout.setSpacing(2) + button_layout.addWidget(seeking_mode_btn) + button_layout.addWidget(raport_mode_btn) + button_widget = QtWidgets.QWidget() + button_widget.setLayout(button_layout) + + mainLayout = self.layout() + label = QtWidgets.QLabel("Select work mode") + label.setStyleSheet( + """QLabel{ + color: #ffffff; + font-size: 40px; + font-weight: bold; + font-family: "Segoe UI", sans-serif; + }""" + ) + mainLayout.addWidget(label, alignment=Qt.AlignCenter) + mainLayout.addWidget(button_widget) + + def _clear(self) -> None: + main = self.layout() + if self.layout() is not None: + while main.count(): + child = main.takeAt(0) + if child.widget() is not None: + child.widget().deleteLater() + else: self.setLayout(QtWidgets.QVBoxLayout()) + + def _init_seekingUI(self) -> None: + self._clear() + self._transfer_settings() self.tabWidget = QtWidgets.QTabWidget() self.tabWidget.setTabsClosable(True) self.tabWidget.tabCloseRequested.connect(self._close_tab) - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.tabWidget) - self.settings_button = QtWidgets.QPushButton("Show settings") - self.settings_button.setFixedWidth(160) - self.select_dir_button = QtWidgets.QPushButton("Open directory") - self.select_dir_button.setFixedWidth(175) - self.report_button = QtWidgets.QPushButton("Customize view") - self.report_button.setFixedWidth(185) + sys_settings_btn = QtWidgets.QPushButton("System settings") + sys_settings_btn.setFixedWidth(200) + sys_settings_btn.clicked.connect(lambda: self.sysSettings.show()) + oper_settings_btn = QtWidgets.QPushButton("Operator settings") + oper_settings_btn.setFixedWidth(200) + oper_settings_btn.clicked.connect(lambda: self.operSettings.show()) + button_layout = QtWidgets.QHBoxLayout() button_layout.setSpacing(2) - button_layout.addWidget(self.settings_button) - button_layout.addWidget(self.select_dir_button) - button_layout.addWidget(self.report_button) + button_layout.addWidget(sys_settings_btn) + button_layout.addWidget(oper_settings_btn) + button_widget = QtWidgets.QWidget() + button_widget.setLayout(button_layout) + + title = QtWidgets.QLabel("online mode") + mainLayout = self.layout() + mainLayout.addWidget(self.tabWidget) + mainLayout.addWidget(button_widget) + mainLayout.addWidget(title, alignment=Qt.AlignRight) + self.resize(800,800) + self._controller.seeking_mode() + # TODO:push seeking to mediator + + def _init_raportUI(self) -> None: + self._clear() + self._transfer_settings() + path = self._select_csv() + if path is None: + self.layout().addWidget(QtWidgets.QLabel("Error. Please select correct path to csv")) + self._init_startUI() + return + self._transfer_settings() + self.tabWidget = QtWidgets.QTabWidget() + self.tabWidget.setTabsClosable(True) + self.tabWidget.tabCloseRequested.connect(self._close_tab) + + sys_settings_btn = QtWidgets.QPushButton("System settings") + sys_settings_btn.setFixedWidth(185) + sys_settings_btn.clicked.connect(lambda: self.sysSettings.show()) + oper_settings_btn = QtWidgets.QPushButton("Operator settings") + oper_settings_btn.setFixedWidth(185) + oper_settings_btn.clicked.connect(lambda: self.operSettings.show()) + view_settings_btn = QtWidgets.QPushButton("Customize view") + view_settings_btn.setFixedWidth(185) + view_settings_btn.clicked.connect(self._customization_window) + save_screen_btn = QtWidgets.QPushButton("Save state") + save_screen_btn.setFixedWidth(185) + save_screen_btn.clicked.connect(self._save_plots) + + button_layout = QtWidgets.QHBoxLayout() + button_layout.setSpacing(2) + button_layout.addWidget(sys_settings_btn) + button_layout.addWidget(oper_settings_btn) + button_layout.addWidget(view_settings_btn) + button_layout.addWidget(save_screen_btn) + button_widget = QtWidgets.QWidget() + button_widget.setLayout(button_layout) + + title = QtWidgets.QLabel("raport mode") + mainLayout = self.layout() + mainLayout.addWidget(self.tabWidget) + mainLayout.addWidget(button_widget) + mainLayout.addWidget(title, alignment=Qt.AlignRight) + self.resize(800,800) + self._controller.raport_mode(path) + # TODO: push only one dir to monitor - layout.addLayout(button_layout) - self.setLayout(layout) def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None: for plot_widget in plot_widgets: @@ -70,30 +161,36 @@ class MainWindow(BaseMainWindow): def _show_settings(self) -> None: self.operSettings.show() self.sysSettings.show() - - def push_settings(self) -> None: - self._updater_trigger() - def _updater_trigger(self) -> None: + def _transfer_settings(self) -> None: self.tabWidget.clear() operator_params = self.operSettings.getParams() system_params = self.sysSettings.getParams() - self._controller.push_settings([operator_params, system_params]) + self._controller.update_settings([operator_params, system_params]) def _close_tab(self, index:int) -> None: self.tabWidget.removeTab(index) - def _select_dir(self): - folder_path = QtWidgets.QFileDialog.getExistingDirectory(self, 'Select directory', "") - if folder_path: - self._controller.open_custom_file(folder_path) + def _select_csv(self) -> Optional[str]: + CSV_path, _ = QtWidgets.QFileDialog.getOpenFileName(self,"Select csv file", "", "CSV Files (*.csv)") + if CSV_path: + print(CSV_path) + return CSV_path + return None - def _report_window(self) -> None: + def _customization_window(self) -> None: tab = self.tabWidget.currentWidget() reg_items = tab.property("reg_items") curve_items = tab.property("curve_items") self.repSettings.build(reg_items, curve_items) + def _save_plots(self) -> None: + filepath, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save file", "", "Image Files (*.png *.jpeg)") + tab = self.tabWidget.currentWidget() + pixmap = QPixmap(tab.size()) + tab.render(pixmap) + pixmap.save(filepath) + diff --git a/src/main.py b/src/main.py index 06e1ba2..06e3e3a 100644 --- a/src/main.py +++ b/src/main.py @@ -24,10 +24,9 @@ def main(): window.show() controller.signal_widgets.connect(window.show_plot_tabs) - controller.signal_settings.connect(mediator.push_settings) - controller.signal_monitor.connect(monitor.custom_dir_extract) - - window.push_settings() + controller.signal_settings.connect(mediator.update_settings) + controller.signal_raport_mode.connect(monitor.custom_csv_extract_only) + controller.signal_seeking_mode.connect(monitor.start_seeking) sys.exit(app.exec_()) diff --git a/src/utils/base/__pycache__/base.cpython-310.pyc b/src/utils/base/__pycache__/base.cpython-310.pyc index 54561f9b269bec129c89501b7121f0c8574bd50c..c32ae3549bbb0f7f901341e6bfc58ab2b4a92f2c 100644 GIT binary patch delta 5049 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 Q+hZE{40)WMh2GZx1Fu8$VE_OC diff --git a/src/utils/base/base.py b/src/utils/base/base.py index 0860912..668bd96 100644 --- a/src/utils/base/base.py +++ b/src/utils/base/base.py @@ -35,7 +35,7 @@ class BaseMediator: source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget], data: Union[list[str], list[pd.DataFrame], list[list], list[QWidget]]): ... - def push_settings (self, data: list[dict]): + def update_settings (self, data: list[dict]): ... class BaseDirectoryMonitor: @@ -47,7 +47,8 @@ class BaseDirectoryMonitor: super().__init__() self._directory_path = None self._update_time = None - + self.isActive = False + self._files = None self._mediator = mediator @@ -76,14 +77,19 @@ class BaseDirectoryMonitor: self._files = files def start(self): + self.isActive = True self.update_timer.start(int(self._update_time)) def stop(self): + self.isActive = False self.update_timer.stop() def update_settings(self, data: list[dict]) -> None: ... + def update_plots(self) -> None: + ... + def force_all_dir(self): ... @@ -334,12 +340,14 @@ class BaseController(QObject): def send_widgets(self, widgets: list[QWidget]) -> None: ... - def push_settings(self, settings: list[dict]) -> None: + def update_settings(self, settings: list[dict]) -> None: ... - def open_custom_file (self, filepath: str) -> None: + def raport_mode (self, filepath: str) -> None: ... + def seeking_mode(self) -> None: + ... class BaseIdealDataBuilder(OptAlgorithm): @@ -387,7 +395,8 @@ class BaseMainWindow(QWidget): def __init__(self, controller: Optional[BaseController] = None): super().__init__() - self.resize(800,800) + self.set_style(self) + self.resize(200,200) self._controller = controller ...