From 32985c78da943b8abef661ae9acaa7c6cb1dfcea Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 4 Feb 2019 19:23:48 +0100 Subject: [PATCH] Ref T529, allow to set mode in view/model The version with the container allows to auto-detect if order is available --- .../models/statusmessagelistmodel.cpp | 26 ++++++++++++++++++- src/blackgui/models/statusmessagelistmodel.h | 7 ++++- src/blackgui/views/statusmessageview.cpp | 5 ++++ src/blackgui/views/statusmessageview.h | 3 +++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/blackgui/models/statusmessagelistmodel.cpp b/src/blackgui/models/statusmessagelistmodel.cpp index e7f8d3efa..1e20e1e18 100644 --- a/src/blackgui/models/statusmessagelistmodel.cpp +++ b/src/blackgui/models/statusmessagelistmodel.cpp @@ -37,11 +37,32 @@ namespace BlackGui (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "all categories"); } + void CStatusMessageListModel::setMode(CStatusMessageListModel::Mode mode, const CStatusMessageList &messages) + { + switch (mode) + { + case DetailedWithOrder: + case Detailed: + this->setMode(messages.needsOrder() ? Detailed : DetailedWithOrder); + break; + case SimplifiedWithOrder: + case Simplified: + this->setMode(messages.needsOrder() ? Simplified : SimplifiedWithOrder); + break; + } + } + void CStatusMessageListModel::setMode(CStatusMessageListModel::Mode mode) { m_columns.clear(); + m_sortColumn = CStatusMessage::IndexUtcTimestamp; + switch (mode) { + case DetailedWithOrder: + m_columns.addColumn(CColumn::orderColumn()); + m_sortColumn = CStatusMessage::IndexOrder; + Q_FALLTHROUGH(); case Detailed: { m_columns.addColumn(CColumn("time", CStatusMessage::IndexUtcTimestamp, new CDateTimeFormatter(CDateTimeFormatter::formatHmsz()))); @@ -51,10 +72,13 @@ namespace BlackGui m_columns.addColumn(CColumn::standardString("message", CStatusMessage::IndexMessage)); m_columns.addColumn(CColumn::standardString("category", CStatusMessage::IndexCategoryHumanReadableOrTechnicalAsString)); - m_sortColumn = CStatusMessage::IndexUtcTimestamp; m_sortOrder = Qt::DescendingOrder; } break; + case SimplifiedWithOrder: + m_columns.addColumn(CColumn::orderColumn()); + m_sortColumn = CStatusMessage::IndexOrder; + Q_FALLTHROUGH(); case Simplified: { m_columns.addColumn(CColumn("time", CStatusMessage::IndexUtcTimestamp, new CDateTimeFormatter(CDateTimeFormatter::formatHmsz()))); diff --git a/src/blackgui/models/statusmessagelistmodel.h b/src/blackgui/models/statusmessagelistmodel.h index 12cbd42d0..a82a87067 100644 --- a/src/blackgui/models/statusmessagelistmodel.h +++ b/src/blackgui/models/statusmessagelistmodel.h @@ -33,7 +33,9 @@ namespace BlackGui enum Mode { Detailed, - Simplified + DetailedWithOrder, + Simplified, + SimplifiedWithOrder }; //! Constructor @@ -45,6 +47,9 @@ namespace BlackGui //! Set mode void setMode(Mode mode); + //! Set mode and adjust order/no order + void setMode(Mode mode, const BlackMisc::CStatusMessageList &messages); + //! \copydoc QAbstractItemModel::data virtual QVariant data(const QModelIndex &index, int role) const override; }; diff --git a/src/blackgui/views/statusmessageview.cpp b/src/blackgui/views/statusmessageview.cpp index 99aab2f6a..e0de111ae 100644 --- a/src/blackgui/views/statusmessageview.cpp +++ b/src/blackgui/views/statusmessageview.cpp @@ -33,6 +33,11 @@ namespace BlackGui this->derivedModel()->setMode(mode); } + void CStatusMessageView::setMode(CStatusMessageListModel::Mode mode, const CStatusMessageList &messages) + { + this->derivedModel()->setMode(mode, messages); + } + void CStatusMessageView::addFilterDialog() { if (this->getFilterDialog()) { return; } // already existing diff --git a/src/blackgui/views/statusmessageview.h b/src/blackgui/views/statusmessageview.h index e52167cbd..667adb5ee 100644 --- a/src/blackgui/views/statusmessageview.h +++ b/src/blackgui/views/statusmessageview.h @@ -37,6 +37,9 @@ namespace BlackGui //! Set mode void setMode(Models::CStatusMessageListModel::Mode mode); + //! Set mode and adjust order/no order + void setMode(Models::CStatusMessageListModel::Mode mode, const BlackMisc::CStatusMessageList &messages); + //! Add my own filter dialog void addFilterDialog();