swift
statusmessagelistmodel.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <Qt>
7 #include <QtGlobal>
8 
10 #include "gui/models/columns.h"
12 #include "misc/timestampbased.h"
13 
14 using namespace swift::misc;
15 
16 namespace swift::gui::models
17 {
18  CStatusMessageListModel::CStatusMessageListModel(QObject *parent)
19  : CListModelTimestampObjects<CStatusMessageList, true>("ViewStatusMessageList", parent)
20  {
21  this->setSorting(CStatusMessage::IndexUtcTimestamp, Qt::DescendingOrder);
22  m_sortTieBreakers.push_front(CStatusMessage::IndexMessage);
23  m_sortTieBreakers.push_front(CStatusMessage::IndexSeverity);
24  this->setMode(Detailed);
25 
26  // force strings for translation in resource files
27  (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "time");
28  (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "severity");
29  (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "type");
30  (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "message");
31  (void)QT_TRANSLATE_NOOP("ViewStatusMessageList", "all categories");
32  }
33 
35  {
36  switch (mode)
37  {
38  case DetailedWithOrder:
39  case Detailed: this->setMode(messages.needsOrder() ? Detailed : DetailedWithOrder); break;
40  case SimplifiedWithOrder:
41  case Simplified: this->setMode(messages.needsOrder() ? Simplified : SimplifiedWithOrder); break;
42  }
43  }
44 
46  {
47  this->setMode(m_mode, messages);
48  }
49 
51  {
52  const CPropertyIndex p = this->getSortProperty();
53  return sortedByTimestampOrOrder(p);
54  }
55 
57  {
58  if (p.isEmpty()) { return false; }
59  const int last = p.indexList().last();
60  return IOrderable::isAnyOrderIndex(last) || ITimestampBased::isAnyTimestampIndex(last);
61  }
62 
64  {
65  const Qt::SortOrder oldOrder = this->getSortOrder();
66  const CPropertyIndex oldIndex = this->getSortProperty();
67  m_columns.clear();
68  m_mode = mode;
69 
70  switch (mode)
71  {
72  case DetailedWithOrder: m_columns.addColumn(CColumn::orderColumn()); [[fallthrough]];
73  case Detailed:
74  {
75  m_columns.addColumn(CColumn("time", CStatusMessage::IndexUtcTimestamp,
77  CColumn col = CColumn("severity", CStatusMessage::IndexSeverityAsIcon);
78  col.setSortPropertyIndex(CStatusMessage::IndexSeverityAsString);
79  m_columns.addColumn(col);
80  m_columns.addColumn(CColumn::standardString("message", CStatusMessage::IndexMessage));
81  m_columns.addColumn(CColumn::standardString("category", CStatusMessage::IndexCategoriesAsString));
82  }
83  break;
84  case SimplifiedWithOrder: m_columns.addColumn(CColumn::orderColumn()); [[fallthrough]];
85  case Simplified:
86  {
87  m_columns.addColumn(CColumn("time", CStatusMessage::IndexUtcTimestamp,
89  CColumn col = CColumn("severity", CStatusMessage::IndexSeverityAsIcon);
90  col.setSortPropertyIndex(CStatusMessage::IndexSeverityAsString);
91  m_columns.addColumn(col);
92  m_columns.addColumn(CColumn::standardString("message", CStatusMessage::IndexMessage));
93  }
94  break;
95  }
96  // m_columns.insertEmptyColumn();
97 
98  // sorting
100  {
101  if (mode == DetailedWithOrder || mode == SimplifiedWithOrder)
102  {
103  this->setSorting(CStatusMessage::IndexOrder, oldOrder);
104  }
105  else { this->setSorting(CStatusMessage::IndexUtcTimestamp, oldOrder); }
106  }
107  else
108  {
109  // restore sorting
110  this->setSorting(oldIndex, oldOrder);
111  }
112  }
113 
114  QVariant CStatusMessageListModel::data(const QModelIndex &index, int role) const
115  {
116  if (role == Qt::ToolTipRole)
117  {
118  // the underlying model object as summary
119  const CStatusMessage msg(this->at(index));
120  return msg.toHtml(false, false);
121  }
123  }
124 } // namespace swift::gui::models
Single column.
Definition: columns.h:26
static CColumn standardString(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex, int alignment=CDefaultFormatter::alignDefault())
Get a standard string object formatted column.
Definition: columns.cpp:57
void setSortPropertyIndex(const swift::misc::CPropertyIndex &propertyIndex)
Property index used when sorting, option alternative.
Definition: columns.cpp:30
static CColumn orderColumn(const swift::misc::CPropertyIndex &propertyIndex=swift::misc::CPropertyIndexRef::GlobalIndexIOrderable, int alignment=CDefaultFormatter::alignRightVCenter())
Get a standard string object formatted column.
Definition: columns.cpp:68
void addColumn(const CColumn &column)
Add a column.
Definition: columns.cpp:100
Formatter when column contains QDateTime, QDate or QTime.
static const QString & formatHmsz()
Hour minute second and milliseconds.
virtual const ObjectType & at(const QModelIndex &index) const
Object at row position.
QVariant data(const QModelIndex &index, int role) const
virtual Qt::SortOrder getSortOrder() const
Get sort order.
virtual bool setSorting(const swift::misc::CPropertyIndex &propertyIndex, Qt::SortOrder order=Qt::AscendingOrder)
Sorting.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const final
swift::misc::CPropertyIndexList m_sortTieBreakers
how column values are sorted if equal, if no value is given this is random
swift::misc::CPropertyIndex getSortProperty() const
Sorted by property.
List model for timestamp based objects with offset.
virtual QVariant data(const QModelIndex &index, int role) const
void adjustOrderColumn(const swift::misc::CStatusMessageList &messages)
Adjust order column depending on messages.
static bool sortedByTimestampOrOrder(const swift::misc::CPropertyIndex &p)
Sorted by timestamp or order.
bool isSortedByTimestampOrOrder() const
Currently sorted by timestamp or by order.
QList< int > indexList() const
Index list.
bool isEmpty() const
Empty?
void push_front(const T &value)
Insert as first element.
Definition: sequence.h:308
Streamable status message, e.g.
QString toHtml(bool withIcon, bool withColors) const
To HTML.
Status messages, e.g. from Core -> GUI.
bool needsOrder() const
All order values set or missing some?
Definition: orderablelist.h:41
Models to be used with views, mainly QTableView.
Free functions in swift::misc.