[PATCH 32/34] kernelshark: Fix KsTableView columns width, and KsTraceViewer size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



- 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@xxxxxxxxxxxxx>
---
 src/KsTraceViewer.cpp | 67 ++++++++++++-------------------------------
 src/KsTraceViewer.hpp |  2 ++
 2 files changed, 20 insertions(+), 49 deletions(-)

diff --git a/src/KsTraceViewer.cpp b/src/KsTraceViewer.cpp
index 86e9185..93535a4 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 7cc5751..9815787 100644
--- a/src/KsTraceViewer.hpp
+++ b/src/KsTraceViewer.hpp
@@ -123,6 +123,8 @@ private:
 
 	KsTableView	_view;
 
+	QPalette	_viewPalette;
+
 	KsViewModel		_model;
 
 	KsFilterProxyModel	_proxyModel;
-- 
2.43.0





[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux