diff options
author | Benjamin ROBIN <dev@benjarobin.fr> | 2024-01-14 18:17:21 +0100 |
---|---|---|
committer | Yordan Karadzhov <y.karadz@gmail.com> | 2024-01-21 21:07:45 +0200 |
commit | 1245304316d8637beab3277f0941bf1c5f24b1e2 (patch) | |
tree | e2ca3cd7e961b74395ee3c0df0e68568653d5ddc | |
parent | 4babc5f2f96b6756ae75595365dd5956373c9909 (diff) | |
download | kernel-shark-1245304316d8637beab3277f0941bf1c5f24b1e2.tar.gz |
kernelshark: Fix KsTableView columns width, and KsTraceViewer size
- Use QSizePolicy::Expanding for KsTraceViewer object to use full height
- Do not use StyleSheet for KsTableView. When the StyleSheet is updated Qt6
redraw the whole table but with default column width without querying items
sizeHint(). So instead use QPalette::Highlight.
- Simplify _resizeToContents() since the columns have a proper width with Qt6
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=218351
Signed-off-by: Benjamin ROBIN <dev@benjarobin.fr>
Signed-off-by: Yordan Karadzhov <y.karadz@gmail.com>
-rw-r--r-- | src/KsTraceViewer.cpp | 67 | ||||
-rw-r--r-- | src/KsTraceViewer.hpp | 2 |
2 files changed, 20 insertions, 49 deletions
diff --git a/src/KsTraceViewer.cpp b/src/KsTraceViewer.cpp index 86e9185a..93535a41 100644 --- a/src/KsTraceViewer.cpp +++ b/src/KsTraceViewer.cpp @@ -83,7 +83,7 @@ KsTraceViewer::KsTraceViewer(QWidget *parent) _mState(nullptr), _data(nullptr) { - this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); /* Make a search toolbar. */ _toolbar.setOrientation(Qt::Horizontal); @@ -125,6 +125,7 @@ KsTraceViewer::KsTraceViewer(QWidget *parent) int defaultRowHeight = FONT_HEIGHT * 1.25; auto lamSelectionChanged = [this, defaultRowHeight] (const QItemSelection &selected, const QItemSelection &deselected) { + if (deselected.count()) { _view.verticalHeader()->resizeSection(deselected.indexes().first().row(), defaultRowHeight); @@ -208,33 +209,13 @@ void KsTraceViewer::loadData(KsDataStore *data) /** Connect the QTableView widget and the State machine of the Dual marker. */ void KsTraceViewer::setMarkerSM(KsDualMarkerSM *m) { - QString styleSheetA, styleSheetB; - _mState = m; _model.setMarkerColors(_mState->markerA()._color, _mState->markerB()._color); - /* - * Assign a property to State A of the Dual marker state machine. When - * the marker is in State A the background color of the selected row - * will be the same as the color of Marker A. - */ - styleSheetA = "selection-background-color : " + - _mState->markerA()._color.name() + ";"; - - _mState->stateAPtr()->assignProperty(&_view, "styleSheet", - styleSheetA); - - /* - * Assign a property to State B. When the marker is in State B the - * background color of the selected row will be the same as the color - * of Marker B. - */ - styleSheetB = "selection-background-color : " + - _mState->markerB()._color.name() + ";"; - - _mState->stateBPtr()->assignProperty(&_view, "styleSheet", - styleSheetB); + _viewPalette = _view.palette(); + _viewPalette.setColor(QPalette::Highlight, _mState->activeMarker()._color); + _view.setPalette(_viewPalette); } /** Reset (empty) the table. */ @@ -502,35 +483,38 @@ void KsTraceViewer::markSwitch() ssize_t row; /* The state of the Dual marker has changed. Get the new active marker. */ - DualMarkerState state = _mState->getState(); + DualMarkerState actState = _mState->getState(); + DualMarkerState pasState = !actState; /* First deal with the passive marker. */ - if (_mState->getMarker(!state)._isSet) { + KsGraphMark &pasMark = _mState->getMarker(pasState); + if (pasMark._isSet) { /* * The passive marker is set. Use the model to color the row of * the passive marker. */ - _model.selectRow(!state, _mState->getMarker(!state)._pos); + _model.selectRow(pasState, pasMark._pos); } else { /* * The passive marker is not set. * Make sure that the model colors nothing. */ - _model.selectRow(!state, KS_NO_ROW_SELECTED); + _model.selectRow(pasState, KS_NO_ROW_SELECTED); } /* * Now deal with the active marker. This has to be done after dealing * with the model, because changing the model clears the selection. */ - if (_mState->getMarker(state)._isSet) { + KsGraphMark &actMark = _mState->getMarker(actState); + if (actMark._isSet) { /* * The active marker is set. Use QTableView to select its row. * The index in the source model is used to retrieve the value * of the row number in the proxy model. */ - row =_mState->getMarker(state)._pos; + row = actMark._pos; QModelIndex index = _proxyModel.mapFromSource(_model.index(row, 0)); @@ -552,6 +536,9 @@ void KsTraceViewer::markSwitch() _view.clearSelection(); } + _viewPalette.setColor(QPalette::Highlight, actMark._color); + _view.setPalette(_viewPalette); + row = selectedRow(); if (row >= 0) { _setSearchIterator(row); @@ -604,7 +591,7 @@ void KsTraceViewer::keyReleaseEvent(QKeyEvent *event) void KsTraceViewer::_resizeToContents() { - int col, rows, columnSize, markRow = selectedRow(); + int markRow = selectedRow(); _view.setVisible(false); _view.resizeColumnsToContents(); @@ -617,24 +604,6 @@ void KsTraceViewer::_resizeToContents() */ if (markRow == KS_NO_ROW_SELECTED) _view.clearSelection(); - - /* - * Because of some unknown reason some of the columns doesn't get - * resized properly by the code above. We will resize this - * column by hand. - */ - col = KsViewModel::TRACE_VIEW_COL_STREAM; - columnSize = STRING_WIDTH(_model.header().at(col)) + FONT_WIDTH; - _view.setColumnWidth(col, columnSize); - - col = KsViewModel::TRACE_VIEW_COL_CPU; - columnSize = STRING_WIDTH(_model.header().at(col)) + FONT_WIDTH * 2; - _view.setColumnWidth(col, columnSize); - - col = KsViewModel::TRACE_VIEW_COL_INDEX; - rows = _model.rowCount({}); - columnSize = STRING_WIDTH(QString("%1").arg(rows)) + FONT_WIDTH; - _view.setColumnWidth(col, columnSize); } //! @cond Doxygen_Suppress diff --git a/src/KsTraceViewer.hpp b/src/KsTraceViewer.hpp index 7cc57516..98157870 100644 --- a/src/KsTraceViewer.hpp +++ b/src/KsTraceViewer.hpp @@ -123,6 +123,8 @@ private: KsTableView _view; + QPalette _viewPalette; + KsViewModel _model; KsFilterProxyModel _proxyModel; |