From 9327d512a9548eaf9a40899cdfdf2d4d18dac83c Mon Sep 17 00:00:00 2001 From: mgrojo Date: Sun, 4 Aug 2019 18:00:31 +0200 Subject: [PATCH] Avoid displaying sort indicators in plot dock and "Copy with headers" headerData() now returns column name plus sort indicator in the display role and only the column name in the edit role. This allows to use the edit role for the plot and the copy-with-headers features, so they do not show the sort indicator as part of the column name. See related issue #1409 and PR #1810 --- src/ExtendedTableWidget.cpp | 2 +- src/PlotDock.cpp | 6 +++--- src/sqlitetablemodel.cpp | 28 +++++++++++++++++----------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/ExtendedTableWidget.cpp b/src/ExtendedTableWidget.cpp index 36bd532a..5b99c904 100644 --- a/src/ExtendedTableWidget.cpp +++ b/src/ExtendedTableWidget.cpp @@ -482,7 +482,7 @@ void ExtendedTableWidget::copyMimeData(const QModelIndexList& fromIndices, QMime htmlResult.append(""); int firstColumn = indices.front().column(); for(int i = firstColumn; i <= indices.back().column(); i++) { - QByteArray headerText = model()->headerData(i, Qt::Horizontal, Qt::DisplayRole).toByteArray(); + QByteArray headerText = model()->headerData(i, Qt::Horizontal, Qt::EditRole).toByteArray(); if (i != firstColumn) { result.append(fieldSepText); htmlResult.append(""); diff --git a/src/PlotDock.cpp b/src/PlotDock.cpp index edb36f1b..6f5912ff 100644 --- a/src/PlotDock.cpp +++ b/src/PlotDock.cpp @@ -193,7 +193,7 @@ void PlotDock::updatePlot(SqliteTableModel* model, BrowseDataTableSettings* sett // in the PlotColumnType, both using the User Role. columnitem->setData(PlotColumnField, Qt::UserRole, i); columnitem->setData(PlotColumnType, Qt::UserRole, static_cast(columntype)); - columnitem->setText(PlotColumnField, model->headerData(i, Qt::Horizontal).toString()); + columnitem->setText(PlotColumnField, model->headerData(i, Qt::Horizontal, Qt::EditRole).toString()); // restore previous check state if(mapItemsY.contains(columnitem->text(PlotColumnField))) @@ -435,7 +435,7 @@ void PlotDock::updatePlot(SqliteTableModel* model, BrowseDataTableSettings* sett if(column == RowNumId) yAxisLabels << tr("Row #"); else - yAxisLabels << model->headerData(column, Qt::Horizontal).toString(); + yAxisLabels << model->headerData(column, Qt::Horizontal, Qt::EditRole).toString(); } } @@ -448,7 +448,7 @@ void PlotDock::updatePlot(SqliteTableModel* model, BrowseDataTableSettings* sett if(x == RowNumId) ui->plotWidget->xAxis->setLabel(tr("Row #")); else - ui->plotWidget->xAxis->setLabel(model->headerData(x, Qt::Horizontal).toString()); + ui->plotWidget->xAxis->setLabel(model->headerData(x, Qt::Horizontal, Qt::EditRole).toString()); ui->plotWidget->yAxis->setLabel(yAxisLabels.join("|")); } diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index a98bc857..b3d33dc8 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -243,24 +243,30 @@ static QString toSuperScript(T number) QVariant SqliteTableModel::headerData(int section, Qt::Orientation orientation, int role) const { - if (role != Qt::DisplayRole) + if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant(); if (orientation == Qt::Horizontal) { // if we have a VIRTUAL table the model will not be valid, with no header data if(static_cast(section) < m_headers.size()) { - QString sortIndicator; - for(size_t i = 0; i < m_query.orderBy().size(); i++) { - const sqlb::SortedColumn sortedColumn = m_query.orderBy()[i]; - // Append sort indicator with direction and ordinal number in superscript style - if (sortedColumn.column == static_cast(section)) { - sortIndicator = sortedColumn.direction == sqlb::Ascending ? " ▾" : " ▴"; - sortIndicator.append(toSuperScript(i+1)); - break; + const QString plainHeader = QString::fromStdString(m_headers.at(static_cast(section))); + // In the edit role, return a plain column name, but in the display role, add the sort indicator. + if (role == Qt::EditRole) + return plainHeader; + else { + QString sortIndicator; + for(size_t i = 0; i < m_query.orderBy().size(); i++) { + const sqlb::SortedColumn sortedColumn = m_query.orderBy()[i]; + // Append sort indicator with direction and ordinal number in superscript style + if (sortedColumn.column == static_cast(section)) { + sortIndicator = sortedColumn.direction == sqlb::Ascending ? " ▾" : " ▴"; + sortIndicator.append(toSuperScript(i+1)); + break; + } } + return plainHeader + sortIndicator; } - return QString::fromStdString(m_headers.at(static_cast(section))) + sortIndicator; } return QString("%1").arg(section + 1); } @@ -538,7 +544,7 @@ Qt::ItemFlags SqliteTableModel::flags(const QModelIndex& index) const if(m_query.selectedColumns().size()) { if(index.column() > 0) - custom_display_format = QString::fromStdString(m_query.selectedColumns().at(static_cast(index.column())-1).selector) != sqlb::escapeIdentifier(headerData(index.column(), Qt::Horizontal).toString()); + custom_display_format = QString::fromStdString(m_query.selectedColumns().at(static_cast(index.column())-1).selector) != sqlb::escapeIdentifier(headerData(index.column(), Qt::Horizontal, Qt::EditRole).toString()); } if(!isBinary(index) && !custom_display_format)