diff --git a/src/pyqt_reactive/widgets/log_viewer.py b/src/pyqt_reactive/widgets/log_viewer.py index eba7206..9ba24fd 100644 --- a/src/pyqt_reactive/widgets/log_viewer.py +++ b/src/pyqt_reactive/widgets/log_viewer.py @@ -613,7 +613,7 @@ def _precompute_search_matches(self, model) -> None: needle = self._search_text if self._case_sensitive else self._search_text.lower() for row in range(model.rowCount()): index = model.index(row, 0) - text = index.data(Qt.DisplayRole) + text = index.data(Qt.ItemDataRole.DisplayRole) if text: haystack = text if self._case_sensitive else text.lower() if needle in haystack: @@ -912,7 +912,7 @@ def sizeHint(self, option, index): # type: ignore[override] width = metrics.horizontalAdvance("M") * max_chars + 8 return QSize(width, self._fixed_row_height) - text = index.data(Qt.DisplayRole) + text = index.data(Qt.ItemDataRole.DisplayRole) if text is None: return super().sizeHint(option, index) diff --git a/tests/test_log_viewer_lifecycle.py b/tests/test_log_viewer_lifecycle.py index 6342172..29b71ac 100644 --- a/tests/test_log_viewer_lifecycle.py +++ b/tests/test_log_viewer_lifecycle.py @@ -4,17 +4,39 @@ from pathlib import Path -from PyQt6.QtCore import qInstallMessageHandler +from PyQt6.QtCore import Qt, qInstallMessageHandler +from PyQt6.QtWidgets import QStyleOptionViewItem from pyqt_reactive.protocols import register_log_discovery_provider from pyqt_reactive.utils.log_highlighter import build_log_line_html from pyqt_reactive.widgets.log_viewer import ( LogFileInfo, LogFileLoader, + LogItemDelegate, + LogListModel, LogViewerWindow, ) +def test_log_delegate_uses_pyqt6_item_data_role(qtbot) -> None: + """Search and sizing must use PyQt6's scoped item-data enum.""" + + model = LogListModel() + model.append_lines(["alpha", "matching line"]) + delegate = LogItemDelegate() + delegate.set_search_state("matching", case_sensitive=False) + + delegate._precompute_search_matches(model) + hint = delegate.sizeHint(QStyleOptionViewItem(), model.index(1, 0)) + + assert delegate._search_match_rows == {1} + assert ( + model.data(model.index(1, 0), Qt.ItemDataRole.DisplayRole) + == "matching line" + ) + assert hint.isValid() + + def test_log_line_html_uses_authoritative_highlight_segments() -> None: rendered = build_log_line_html( "2026-07-29 20:00:00,000 - worker - ERROR - value < 2"