diff --git a/bec_widgets/applications/main_app.py b/bec_widgets/applications/main_app.py index 2eccb700..faa10ef7 100644 --- a/bec_widgets/applications/main_app.py +++ b/bec_widgets/applications/main_app.py @@ -7,6 +7,7 @@ from bec_widgets.applications.views.developer_view.developer_view import Develop from bec_widgets.applications.views.device_manager_view.device_manager_widget import ( DeviceManagerWidget, ) +from bec_widgets.applications.views.diagnostic_view.diagnostic_view import DiagnosticView from bec_widgets.applications.views.view import ViewBase, WaveformViewInline, WaveformViewPopup from bec_widgets.utils.colors import apply_theme from bec_widgets.widgets.containers.advanced_dock_area.advanced_dock_area import AdvancedDockArea @@ -53,6 +54,7 @@ class BECMainApp(BECMainWindow): self.ads.setObjectName("MainWorkspace") self.device_manager = DeviceManagerWidget(self) self.developer_view = DeveloperView(self) + self.diagnostics = DiagnosticView(self) self.add_view( icon="widgets", title="Dock Area", id="dock_area", widget=self.ads, mini_text="Docks" @@ -71,6 +73,13 @@ class BECMainApp(BECMainWindow): id="developer_view", exclusive=True, ) + self.add_view( + icon="code_blocks", + title="Diagnostics", + widget=self.diagnostics, + id="diagnostic_view", + exclusive=True, + ) if self._show_examples: self.add_section("Examples", "examples") diff --git a/bec_widgets/applications/views/diagnostic_view/__init__.py b/bec_widgets/applications/views/diagnostic_view/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/bec_widgets/applications/views/diagnostic_view/diagnostic_view.py b/bec_widgets/applications/views/diagnostic_view/diagnostic_view.py new file mode 100644 index 00000000..ffa5bffd --- /dev/null +++ b/bec_widgets/applications/views/diagnostic_view/diagnostic_view.py @@ -0,0 +1,88 @@ +from qtpy.QtWidgets import QWidget + +from bec_widgets.applications.views.view import ViewBase +from bec_widgets.widgets.containers.advanced_dock_area.basic_dock_area import DockAreaWidget +from bec_widgets.widgets.services.bec_status_box.bec_status_box import BECStatusBox +from bec_widgets.widgets.utility.logpanel.logpanel import LogPanel + + +class DiagnosticWidget(DockAreaWidget): + + def __init__(self, parent=None, **kwargs): + super().__init__(parent=parent, variant="compact", **kwargs) + + logs_dock_kwargs = { + "closable": False, + "floatable": False, + "movable": False, + "return_dock": True, + "show_settings_action": False, + "title_buttons": {"float": False, "close": False, "menu": False}, + } + + self.device_logs = LogPanel(show_toolbar=False, service_filter={"DeviceServer"}) + self.device_logs.setObjectName("Device Server logs") + self.device_logs_dock = self.new(self.device_logs, **logs_dock_kwargs) + + self.scihub_logs = LogPanel(show_toolbar=False, service_filter={"SciHub"}) + self.scihub_logs.setObjectName("SciHub logs") + self.scihub_logs_dock = self.new( + self.scihub_logs, relative_to=self.device_logs_dock, where="right", **logs_dock_kwargs + ) + + self.service_status = BECStatusBox() + self.service_status.setObjectName("Service Status") + self.service_status_dock = self.new( + self.service_status, + relative_to=self.scihub_logs_dock, + where="right", + **logs_dock_kwargs, + ) + + self.scan_logs = LogPanel(show_toolbar=False, service_filter={"ScanServer"}) + self.scan_logs.setObjectName("Scan Server logs") + self.scan_logs_dock = self.new( + self.scan_logs, relative_to=self.device_logs_dock, where="bottom", **logs_dock_kwargs + ) + + self.dap_logs = LogPanel(show_toolbar=False, service_filter={"DAPServer"}) + self.dap_logs.setObjectName("DAP Server logs") + self.dap_logs_dock = self.new( + self.dap_logs, relative_to=self.scan_logs_dock, where="bottom", **logs_dock_kwargs + ) + + self.scanbundler_logs = LogPanel(show_toolbar=False, service_filter={"ScanBundler"}) + self.scanbundler_logs.setObjectName("ScanBundler logs") + self.scanbundler_logs_dock = self.new( + self.scanbundler_logs, + relative_to=self.scihub_logs_dock, + where="bottom", + **logs_dock_kwargs, + ) + + self.filewriter_logs = LogPanel(show_toolbar=False, service_filter={"FileWriter"}) + self.filewriter_logs.setObjectName("FileWriter logs") + self.filewriter_logs_dock = self.new( + self.filewriter_logs, + relative_to=self.scanbundler_logs_dock, + where="bottom", + **logs_dock_kwargs, + ) + + +class DiagnosticView(ViewBase): + """ + A view for users to write scripts and macros and execute them within the application. + """ + + def __init__( + self, + parent: QWidget | None = None, + content: QWidget | None = None, + *, + id: str | None = None, + title: str | None = None, + ): + super().__init__(parent=parent, content=content, id=id, title=title) + self.developer_widget = DiagnosticWidget(parent=self) + self.set_content(self.developer_widget)