From 99c6a03b6f45ab5bea6aa0ca2995820883ea4c37 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 26 Apr 2019 01:16:39 +0200 Subject: [PATCH] Support for an empty column --- src/blackgui/models/columnformatters.cpp | 8 ++++++++ src/blackgui/models/columnformatters.h | 11 ++++++++++ src/blackgui/models/columns.cpp | 20 +++++++++++++++++++ src/blackgui/models/columns.h | 9 +++++++++ src/blackgui/models/listmodelbase.cpp | 9 +++++++-- .../models/listmodelbasenontemplate.h | 3 +++ .../models/statusmessagelistmodel.cpp | 1 + src/blackgui/views/viewbase.h | 4 ++++ src/blackmisc/propertyindex.h | 1 + 9 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/blackgui/models/columnformatters.cpp b/src/blackgui/models/columnformatters.cpp index e4784dfb3..736bd6dde 100644 --- a/src/blackgui/models/columnformatters.cpp +++ b/src/blackgui/models/columnformatters.cpp @@ -421,5 +421,13 @@ namespace BlackGui if (ok) { return QString::number(i); } return CVariant(); } + + CVariant CEmptyFormatter::displayRole(const CVariant &dataCVariant) const + { + Q_UNUSED(dataCVariant); + static const CVariant empty(""); + return empty; + } + } // namespace } // namespace diff --git a/src/blackgui/models/columnformatters.h b/src/blackgui/models/columnformatters.h index 8ccd8d7f1..796167c83 100644 --- a/src/blackgui/models/columnformatters.h +++ b/src/blackgui/models/columnformatters.h @@ -154,6 +154,17 @@ namespace BlackGui virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override; }; + //! Just returns a empty "" value + class CEmptyFormatter : public CDefaultFormatter + { + public: + //! Constructor + CEmptyFormatter(int alignment = alignDefault()) : CDefaultFormatter(alignment, false, roleDisplay()) {} + + //! \copydoc CDefaultFormatter::displayRole + virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override; + }; + //! Layout will be defined by a delegate class CDelegateFormatter : public CDefaultFormatter { diff --git a/src/blackgui/models/columns.cpp b/src/blackgui/models/columns.cpp index ea4e934d8..297f5d406 100644 --- a/src/blackgui/models/columns.cpp +++ b/src/blackgui/models/columns.cpp @@ -73,6 +73,13 @@ namespace BlackGui return CColumn(headerName, toolTip, propertyIndex, new CIntegerFormatter(alignment)); } + CColumn CColumn::emptyColumn() + { + CColumn col = CColumn("", "", CPropertyIndex::GlobalIndexEmpty, new CEmptyFormatter()); + col.setWidthPercentage(1); + return col; + } + // --------------- columns ---------------------------------------------- CColumns::CColumns(const QString &translationContext, QObject *parent) : @@ -236,6 +243,19 @@ namespace BlackGui return widths; } + void CColumns::insertEmptyColumn() + { + if (this->endsWithEmptyColumn()) { return; } + this->addColumn(CColumn::emptyColumn()); + } + + bool CColumns::endsWithEmptyColumn() const + { + if (m_columns.isEmpty()) { return false; } + const CColumn c = m_columns.last(); + return c.getPropertyIndex() == CPropertyIndex::GlobalIndexEmpty; + } + const CDefaultFormatter *CColumns::getFormatter(const QModelIndex &index) const { if (!isValidColumn(index)) { return nullptr; } diff --git a/src/blackgui/models/columns.h b/src/blackgui/models/columns.h index c99fa6c3a..ac4778448 100644 --- a/src/blackgui/models/columns.h +++ b/src/blackgui/models/columns.h @@ -118,6 +118,9 @@ namespace BlackGui //! Get a standard integer value formatted column static CColumn standardInteger(const QString &headerName, const QString &toolTip, const BlackMisc::CPropertyIndex &propertyIndex, int alignment = CDefaultFormatter::alignRightVCenter()); + //! An empty column + static CColumn emptyColumn(); + private: QString m_translationContext; QString m_columnName; @@ -220,6 +223,12 @@ namespace BlackGui //! Calculate the absolute width QList calculateWidths(int totalWidth) const; + //! Insert an empty column + void insertEmptyColumn(); + + //! Ending with an empty column + bool endsWithEmptyColumn() const; + private: QList m_columns; QString m_translationContext; //!< for future usage diff --git a/src/blackgui/models/listmodelbase.cpp b/src/blackgui/models/listmodelbase.cpp index e5fa8ef25..386813ea9 100644 --- a/src/blackgui/models/listmodelbase.cpp +++ b/src/blackgui/models/listmodelbase.cpp @@ -102,9 +102,14 @@ namespace BlackGui const int row = index.row(); const int col = index.column(); const CPropertyIndex propertyIndex = this->columnToPropertyIndex(col); - if (static_cast(CPropertyIndex::GlobalIndexLineNumber) == propertyIndex.frontCasted()) + const int propertyIndexFront = propertyIndex.frontCasted(); + + // special cases + switch (propertyIndexFront) { - return QVariant::fromValue(row + 1); + case CPropertyIndex::GlobalIndexLineNumber: return QVariant::fromValue(row + 1); + case CPropertyIndex::GlobalIndexEmpty: return {}; + default: break; // continue here } // Formatted data diff --git a/src/blackgui/models/listmodelbasenontemplate.h b/src/blackgui/models/listmodelbasenontemplate.h index f40428ed5..8a7390c54 100644 --- a/src/blackgui/models/listmodelbasenontemplate.h +++ b/src/blackgui/models/listmodelbasenontemplate.h @@ -129,6 +129,9 @@ namespace BlackGui //! The columns const CColumns &getColumns() const { return m_columns; } + //! Using void column at the end? + bool endsWithEmptyColumn() const { return m_columns.endsWithEmptyColumn(); } + signals: //! Asynchronous update finished void asyncUpdateFinished(); diff --git a/src/blackgui/models/statusmessagelistmodel.cpp b/src/blackgui/models/statusmessagelistmodel.cpp index 7064af5a4..4afc3c40f 100644 --- a/src/blackgui/models/statusmessagelistmodel.cpp +++ b/src/blackgui/models/statusmessagelistmodel.cpp @@ -105,6 +105,7 @@ namespace BlackGui } break; } + // m_columns.insertEmptyColumn(); // sorting if (CStatusMessageListModel::sortedByTimestampOrOrder(oldIndex)) diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 69ced3217..60bca363a 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -186,6 +186,9 @@ namespace BlackGui //! \copydoc BlackGui::Models::CListModelBaseNonTemplate::hasValidSortColumn virtual bool hasValidSortColumn() const = 0; + //! \copydoc BlackGui::Models::CListModelBaseNonTemplate::endsWithEmptyColumn + virtual bool endsWithEmptyColumn() const = 0; + //! \copydoc BlackGui::Models::CListModelBaseNonTemplate::getSortOrder virtual Qt::SortOrder getSortOrder() const = 0; @@ -736,6 +739,7 @@ namespace BlackGui virtual BlackMisc::CPropertyIndex getSortProperty() const override { return m_model->getSortProperty(); } virtual int getSortColumn() const override { return m_model->getSortColumn(); } virtual bool hasValidSortColumn() const override { return m_model->hasValidSortColumn(); } + virtual bool endsWithEmptyColumn() const override { return m_model->endsWithEmptyColumn(); } virtual Qt::SortOrder getSortOrder() const override { return m_model->getSortOrder(); } //! @} diff --git a/src/blackmisc/propertyindex.h b/src/blackmisc/propertyindex.h index 1d17623d2..ec8b14e83 100644 --- a/src/blackmisc/propertyindex.h +++ b/src/blackmisc/propertyindex.h @@ -176,6 +176,7 @@ namespace BlackMisc GlobalIndexSwiftCore = 17100, GlobalIndexSwiftLauncher = 17200, GlobalIndexLineNumber = 20000, //!< pseudo index for line numbers + GlobalIndexEmpty = 20001 }; //! Default constructor.