Skip to content

Commit 9b806a2

Browse files
committed
feat: add button/slot to pause/unpause logs
1 parent 93ae6a4 commit 9b806a2

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

bec_widgets/widgets/utility/logpanel/logpanel.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from bec_lib.endpoints import MessageEndpoints
1313
from bec_lib.logger import LogLevel, bec_logger
1414
from bec_lib.messages import LogMessage, StatusMessage
15+
from bec_qthemes import material_icon
1516
from qtpy.QtCore import Signal # type: ignore
1617
from qtpy.QtCore import (
1718
QAbstractTableModel,
@@ -40,6 +41,7 @@
4041
QPushButton,
4142
QSizePolicy,
4243
QTableView,
44+
QToolButton,
4345
QVBoxLayout,
4446
QWidget,
4547
)
@@ -84,6 +86,7 @@ class BecLogsQueue(BECConnector, QObject):
8486

8587
RPC = False
8688
new_messages = Signal()
89+
paused = Signal(bool)
8790
_instance: BecLogsQueue | None = None
8891

8992
@classmethod
@@ -97,6 +100,7 @@ def __init__(self, parent: QObject | None, maxlen: int = 2500, **kwargs) -> None
97100
raise RuntimeError("Create no more than one BecLogsQueue - use BecLogsQueue.instance()")
98101
super().__init__(parent=parent, **kwargs)
99102
self._max_length = maxlen
103+
self._paused = False
100104
self._data = deque(
101105
(
102106
item["data"]
@@ -117,6 +121,11 @@ def __init__(self, parent: QObject | None, maxlen: int = 2500, **kwargs) -> None
117121
def __len__(self):
118122
return len(self._data)
119123

124+
@SafeSlot()
125+
def toggle_pause(self):
126+
self._paused = not self._paused
127+
self.paused.emit(self._paused)
128+
120129
def row_data(self, index: int) -> LogMessage | None:
121130
if index < 0 or index > (len(self._data) - 1):
122131
return None
@@ -162,7 +171,7 @@ def _process_incoming_log_msg(self, msg: dict, _metadata: dict):
162171

163172
@SafeSlot(verify_sender=True)
164173
def _proc_update(self):
165-
if len(self._incoming) == 0:
174+
if self._paused or len(self._incoming) == 0:
166175
return
167176
self._data.extend(self._incoming)
168177
self._incoming.clear()
@@ -411,6 +420,8 @@ def _connect_toolbar(self):
411420
self._toolbar.level_changed.connect(self._proxy.update_level_filter)
412421
self._toolbar.fuzzy_changed.connect(self._proxy.update_fuzzy)
413422
self._toolbar.timestamp_update.connect(self._proxy.update_timestamp)
423+
self._toolbar.pause_button.clicked.connect(self._model.log_queue.toggle_pause)
424+
self._model.log_queue.paused.connect(self._toolbar._update_pause_button_icon)
414425

415426
def _update_service_filter(self, filter: set[str]):
416427
self._service_filter = filter
@@ -463,6 +474,18 @@ def __init__(self, parent: QWidget | None = None, client: BECClient | None = Non
463474
self._layout.addWidget(self.timerange_button)
464475
self.timerange_button.clicked.connect(self._open_datetime_dialog)
465476

477+
self.pause_button = QToolButton()
478+
self.pause_button.setIcon(material_icon("pause", size=(20, 20), convert_to_pixmap=False))
479+
self._layout.addWidget(self.pause_button)
480+
481+
@SafeSlot(bool)
482+
def _update_pause_button_icon(self, paused):
483+
self.pause_button.setIcon(
484+
material_icon(
485+
"play_arrow" if paused else "pause", size=(20, 20), convert_to_pixmap=False
486+
)
487+
)
488+
466489
def _string_search_box(self):
467490
self._layout.addWidget(QLabel("Search: "))
468491
self.search_textbox = QLineEdit()

0 commit comments

Comments
 (0)