mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-23 07:15:35 +08:00
Ref T529, automatically setting/restoring sorting for status messages
This commit is contained in:
committed by
Mat Sutcliffe
parent
4d0f8b9fa0
commit
728a76fc2c
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -170,22 +170,18 @@ namespace BlackGui
|
||||
return;
|
||||
}
|
||||
|
||||
//! \fixme KB 2017-09 a possible alternative maybe is to resize rows always to content -> performance?
|
||||
CStatusMessageList newMsgs(messages);
|
||||
if (appendOldMessages && !ui->tvp_StatusMessages->isEmpty())
|
||||
{
|
||||
CStatusMessageList messagesWithOld(messages);
|
||||
messagesWithOld.push_back(ui->tvp_StatusMessages->container());
|
||||
ui->tvp_StatusMessages->rowsResizeModeBasedOnThreshold(messages.size());
|
||||
ui->tvp_StatusMessages->updateContainerMaybeAsync(messagesWithOld);
|
||||
this->setModeToMessages(messagesWithOld.hasErrorMessages());
|
||||
newMsgs.push_back(ui->tvp_StatusMessages->container());
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->tvp_StatusMessages->rowsResizeModeBasedOnThreshold(messages.size());
|
||||
ui->tvp_StatusMessages->updateContainerMaybeAsync(messages);
|
||||
this->setModeToMessages(messages.hasErrorMessages());
|
||||
}
|
||||
this->showKill(false);
|
||||
|
||||
//! \fixme KB 2017-09 a possible alternative maybe is to resize rows always to content -> performance?
|
||||
ui->tvp_StatusMessages->adjustOrderColumn(newMsgs);
|
||||
ui->tvp_StatusMessages->rowsResizeModeBasedOnThreshold(newMsgs.size());
|
||||
ui->tvp_StatusMessages->updateContainerMaybeAsync(newMsgs);
|
||||
|
||||
this->setModeToMessages(false);
|
||||
this->display(timeOutMs);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user