Ref T529, automatically setting/restoring sorting for status messages

This commit is contained in:
Klaus Basan
2019-02-05 15:52:29 +01:00
committed by Mat Sutcliffe
parent 4d0f8b9fa0
commit 728a76fc2c
3 changed files with 50 additions and 18 deletions

View File

@@ -25,9 +25,10 @@ namespace BlackGui
CStatusMessageListModel::CStatusMessageListModel(QObject *parent) :
CListModelTimestampObjects<CStatusMessageList, true>("ViewStatusMessageList", parent)
{
this->setMode(Detailed);
this->setSorting(CStatusMessage::IndexUtcTimestamp, Qt::DescendingOrder);
m_sortTieBreakers.push_front(CStatusMessage::IndexMessage);
m_sortTieBreakers.push_front(CStatusMessage::IndexSeverity);
this->setMode(Detailed);
// force strings for translation in resource files
(void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "time");
@@ -57,18 +58,30 @@ namespace BlackGui
this->setMode(m_mode, messages);
}
bool CStatusMessageListModel::isSortedByTimestampOrOrder() const
{
const CPropertyIndex p = this->getSortProperty();
return sortedByTimestampOrOrder(p);
}
bool CStatusMessageListModel::sortedByTimestampOrOrder(const CPropertyIndex &p)
{
if (p.isEmpty()) { return false; }
const int last = p.indexVector().last();
return IOrderable::isAnyOrderIndex(last) || ITimestampBased::isAnyTimestampIndex(last);
}
void CStatusMessageListModel::setMode(CStatusMessageListModel::Mode mode)
{
const Qt::SortOrder oldOrder = this->getSortOrder();
const CPropertyIndex oldIndex = this->getSortProperty();
m_columns.clear();
m_sortColumn = CStatusMessage::IndexUtcTimestamp;
m_mode = mode;
switch (mode)
{
case DetailedWithOrder:
m_columns.addColumn(CColumn::orderColumn());
m_sortColumn = CStatusMessage::IndexOrder;
m_sortOrder = Qt::DescendingOrder;
Q_FALLTHROUGH();
case Detailed:
{
@@ -82,7 +95,6 @@ namespace BlackGui
break;
case SimplifiedWithOrder:
m_columns.addColumn(CColumn::orderColumn());
m_sortColumn = CStatusMessage::IndexOrder;
Q_FALLTHROUGH();
case Simplified:
{
@@ -94,6 +106,24 @@ namespace BlackGui
}
break;
}
// sorting
if (CStatusMessageListModel::sortedByTimestampOrOrder(oldIndex))
{
if (mode == DetailedWithOrder || mode == SimplifiedWithOrder)
{
this->setSorting(CStatusMessage::IndexOrder, oldOrder);
}
else
{
this->setSorting(CStatusMessage::IndexUtcTimestamp, oldOrder);
}
}
else
{
// restore sorting
this->setSorting(oldIndex, oldOrder);
}
}
QVariant CStatusMessageListModel::data(const QModelIndex &index, int role) const

View File

@@ -56,6 +56,12 @@ namespace BlackGui
//! \copydoc QAbstractItemModel::data
virtual QVariant data(const QModelIndex &index, int role) const override;
//! Currently sorted by timestamp or by order
bool isSortedByTimestampOrOrder() const;
//! Sorted by timestamp or order
static bool sortedByTimestampOrOrder(const BlackMisc::CPropertyIndex &p);
private:
Mode m_mode; //!< used mode
};