mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-03-04 16:02:51 +01:00
feat: add button/slot to pause/unpause logs
This commit is contained in:
@@ -12,6 +12,7 @@ from bec_lib.client import BECClient
|
||||
from bec_lib.endpoints import MessageEndpoints
|
||||
from bec_lib.logger import LogLevel, bec_logger
|
||||
from bec_lib.messages import LogMessage, StatusMessage
|
||||
from bec_qthemes import material_icon
|
||||
from qtpy.QtCore import Signal # type: ignore
|
||||
from qtpy.QtCore import (
|
||||
QAbstractTableModel,
|
||||
@@ -40,6 +41,7 @@ from qtpy.QtWidgets import (
|
||||
QPushButton,
|
||||
QSizePolicy,
|
||||
QTableView,
|
||||
QToolButton,
|
||||
QVBoxLayout,
|
||||
QWidget,
|
||||
)
|
||||
@@ -84,6 +86,7 @@ class BecLogsQueue(BECConnector, QObject):
|
||||
|
||||
RPC = False
|
||||
new_messages = Signal()
|
||||
paused = Signal(bool)
|
||||
_instance: BecLogsQueue | None = None
|
||||
|
||||
@classmethod
|
||||
@@ -97,6 +100,7 @@ class BecLogsQueue(BECConnector, QObject):
|
||||
raise RuntimeError("Create no more than one BecLogsQueue - use BecLogsQueue.instance()")
|
||||
super().__init__(parent=parent, **kwargs)
|
||||
self._max_length = maxlen
|
||||
self._paused = False
|
||||
self._data = deque(
|
||||
(
|
||||
item["data"]
|
||||
@@ -117,6 +121,11 @@ class BecLogsQueue(BECConnector, QObject):
|
||||
def __len__(self):
|
||||
return len(self._data)
|
||||
|
||||
@SafeSlot()
|
||||
def toggle_pause(self):
|
||||
self._paused = not self._paused
|
||||
self.paused.emit(self._paused)
|
||||
|
||||
def row_data(self, index: int) -> LogMessage | None:
|
||||
if index < 0 or index > (len(self._data) - 1):
|
||||
return None
|
||||
@@ -162,7 +171,7 @@ class BecLogsQueue(BECConnector, QObject):
|
||||
|
||||
@SafeSlot(verify_sender=True)
|
||||
def _proc_update(self):
|
||||
if len(self._incoming) == 0:
|
||||
if self._paused or len(self._incoming) == 0:
|
||||
return
|
||||
self._data.extend(self._incoming)
|
||||
self._incoming.clear()
|
||||
@@ -411,6 +420,8 @@ class LogPanel(BECWidget, QWidget):
|
||||
self._toolbar.level_changed.connect(self._proxy.update_level_filter)
|
||||
self._toolbar.fuzzy_changed.connect(self._proxy.update_fuzzy)
|
||||
self._toolbar.timestamp_update.connect(self._proxy.update_timestamp)
|
||||
self._toolbar.pause_button.clicked.connect(self._model.log_queue.toggle_pause)
|
||||
self._model.log_queue.paused.connect(self._toolbar._update_pause_button_icon)
|
||||
|
||||
def _update_service_filter(self, filter: set[str]):
|
||||
self._service_filter = filter
|
||||
@@ -463,6 +474,18 @@ class LogPanelToolbar(QWidget):
|
||||
self._layout.addWidget(self.timerange_button)
|
||||
self.timerange_button.clicked.connect(self._open_datetime_dialog)
|
||||
|
||||
self.pause_button = QToolButton()
|
||||
self.pause_button.setIcon(material_icon("pause", size=(20, 20), convert_to_pixmap=False))
|
||||
self._layout.addWidget(self.pause_button)
|
||||
|
||||
@SafeSlot(bool)
|
||||
def _update_pause_button_icon(self, paused):
|
||||
self.pause_button.setIcon(
|
||||
material_icon(
|
||||
"play_arrow" if paused else "pause", size=(20, 20), convert_to_pixmap=False
|
||||
)
|
||||
)
|
||||
|
||||
def _string_search_box(self):
|
||||
self._layout.addWidget(QLabel("Search: "))
|
||||
self.search_textbox = QLineEdit()
|
||||
|
||||
Reference in New Issue
Block a user