1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-13 12:12:57 +01:00

feat: add tools to procedure log panel

This commit is contained in:
2025-12-04 10:53:24 +01:00
parent 15a9967cab
commit 0452a9c605
3 changed files with 57 additions and 4 deletions

View File

@@ -220,6 +220,8 @@ class CategoryItem(QTreeWidgetItem):
class ProcedureControl(BECWidget, QWidget):
RPC = False
queue_selected = Signal(str)
def __init__(self, parent=None, client=None, config=None, gui_id: str | None = None, **kwargs):

View File

@@ -1,9 +1,18 @@
from bec_lib.endpoints import MessageEndpoints
from bec_lib.logger import bec_logger
from bec_qthemes import material_icon
from bec_server.scan_server.procedures.helper import FrontendProcedureHelper
from PySide6.QtWidgets import QLabel
from qtpy.QtGui import QFont
from qtpy.QtWidgets import QSizePolicy, QTextEdit, QVBoxLayout, QWidget
from qtpy.QtWidgets import (
QComboBox,
QHBoxLayout,
QLabel,
QSizePolicy,
QTextEdit,
QToolButton,
QVBoxLayout,
QWidget,
)
from bec_widgets.utils.bec_connector import ConnectionConfig
from bec_widgets.utils.bec_widget import BECWidget
@@ -14,16 +23,46 @@ logger = bec_logger.logger
class ProcedureLogs(BECWidget, QWidget):
RPC = False
def __init__(self, parent=None, client=None, config=None, gui_id: str | None = None, **kwargs):
config = config or ConnectionConfig()
super().__init__(parent=parent, client=client, config=config, gui_id=gui_id, **kwargs)
self._conn = self.bec_dispatcher.client.connector
self._queue: str | None = None
self._helper = FrontendProcedureHelper(self._conn)
self._setup_ui()
@SafeSlot()
def _update_selection_box(self):
self._selection_box.clear()
self._available_streams = self._helper.get.log_queue_names()
self._selection_box.addItems(self._available_streams)
def _setup_ui(self):
self._layout = QVBoxLayout()
self.setLayout(self._layout)
self._setup_tools()
self._setup_display()
def _setup_tools(self):
self.tools = QWidget(self)
self._tools_layout = QHBoxLayout()
self._tools_layout.setContentsMargins(0, 0, 0, 0)
self.tools.setLayout(self._tools_layout)
self._selection_box = QComboBox()
self._update_selection_box()
self._selection_box.setCurrentIndex(-1)
self._selection_box.currentTextChanged.connect(self.set_queue)
self._refresh_button = QToolButton()
self._refresh_button.setIcon(material_icon("refresh", convert_to_pixmap=False))
self._tools_layout.addWidget(QLabel("Select logs stream: "))
self._tools_layout.addWidget(self._selection_box)
self._tools_layout.addWidget(self._refresh_button)
self._refresh_button.clicked.connect(self._update_selection_box)
self._layout.addWidget(self.tools)
def _setup_display(self):
self.widget = QTextEdit(lineWrapMode=QTextEdit.LineWrapMode.NoWrap, readOnly=True)
font = QFont("Courier New")
font.setStyleHint(QFont.StyleHint.Monospace)
@@ -36,16 +75,23 @@ class ProcedureLogs(BECWidget, QWidget):
self.widget.append(msg.get("data").strip())
def _init_content(self):
self.widget.setText("")
if self._queue is None:
self.widget.setText("")
return
if msgs := self._conn.xread(MessageEndpoints.procedure_logs(self._queue), from_start=True):
self.widget.append("\n".join(msg.get("data").data.strip() for msg in msgs))
@SafeSlot()
def clear_selection_box(self, *_, **__):
self._selection_box.setCurrentIndex(-1)
@SafeSlot(None)
@SafeSlot(str)
def set_queue(self, queue: str | None):
if queue == "":
return
self.queue = queue
self._selection_box.setCurrentIndex(-1)
@SafeProperty(str)
def queue(self) -> str | None:

View File

@@ -12,7 +12,12 @@ class ProcedurePanel(DockAreaWidget):
self.procedure_logs = ProcedureLogs(parent=self)
self.procedure_logs.setObjectName("Procedure Logs")
_dock_kwargs = {"closable": False, "movable": False, "floatable": False}
_dock_kwargs = {
"closable": False,
"movable": False,
"floatable": False,
"title_buttons": {"float": False, "close": False, "menu": False},
}
self.new(self.procedure_control, **_dock_kwargs)
self.new(self.procedure_logs, where="bottom", **_dock_kwargs)