swift
textmessagelistmodel.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 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 <QtDebug>
8 #include <QtGlobal>
9 
11 #include "gui/models/columns.h"
12 #include "misc/aviation/callsign.h"
15 #include "misc/timestampbased.h"
16 
17 using namespace swift::misc::physical_quantities;
18 using namespace swift::misc::network;
19 using namespace swift::misc::aviation;
20 
21 namespace swift::gui::models
22 {
23  CTextMessageListModel::CTextMessageListModel(TextMessageMode mode, QObject *parent)
24  : CListModelTimestampObjects("ModelTextMessageList", parent), m_textMessageMode(NotSet)
25  {
26  this->setTextMessageMode(mode);
27 
28  // force strings for translation in resource files
29  (void)QT_TRANSLATE_NOOP("ModelTextMessageList", "time");
30  (void)QT_TRANSLATE_NOOP("ModelTextMessageList", "from");
31  (void)QT_TRANSLATE_NOOP("ModelTextMessageList", "to");
32  (void)QT_TRANSLATE_NOOP("ModelTextMessageList", "message");
33  }
34 
36  {
37  if (m_textMessageMode == mode) return;
38  m_textMessageMode = mode;
39  m_columns.clear();
40  switch (mode)
41  {
42  case NotSet:
43  case FromTo:
44  {
45  CColumn col = CColumn("type", CTextMessage::IndexIcon);
46  col.setSortPropertyIndex({ CTextMessage::IndexSenderCallsign, CCallsign::IndexSuffix });
47  m_columns.addColumn(col);
48  m_columns.addColumn(CColumn("time", "received", CTextMessage::IndexUtcTimestamp,
51  CColumn::standardString("from", { CTextMessage::IndexSenderCallsign, CCallsign::IndexCallsignString }));
52  m_columns.addColumn(CColumn::standardString("to", CTextMessage::IndexRecipientCallsignOrFrequency));
53  m_columns.addColumn(CColumn::standardString("message", CTextMessage::IndexMessage));
54 
55  // default sort order
56  this->setSortColumnByPropertyIndex(CTextMessage::IndexUtcTimestamp);
57  m_sortOrder = Qt::DescendingOrder;
58  }
59  break;
60 
61  case From:
62  {
63  m_columns.addColumn(CColumn("time", "received", CTextMessage::IndexUtcTimestamp,
66  CColumn::standardString("from", { CTextMessage::IndexSenderCallsign, CCallsign::IndexCallsignString }));
67  m_columns.addColumn(CColumn::standardString("message", CTextMessage::IndexMessage));
68 
69  // default sort order
70  this->setSortColumnByPropertyIndex(CTextMessage::IndexUtcTimestamp);
71  m_sortOrder = Qt::DescendingOrder;
72  }
73  break;
74 
75  default: qFatal("Wrong mode"); break;
76  }
77  }
78 
79  QVariant CTextMessageListModel::data(const QModelIndex &index, int role) const
80  {
81  if (role == Qt::ToolTipRole)
82  {
83  // the underlying model object as summary
84  const CTextMessage model(this->at(index));
85  return model.asHtmlSummary("<br>");
86  }
87  return CListModelBase::data(index, role);
88  }
89 } // 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
void addColumn(const CColumn &column)
Add a column.
Definition: columns.cpp:100
Formatter when column contains QDateTime, QDate or QTime.
static const QString & formatHms()
Hour minute second.
virtual const ObjectType & at(const QModelIndex &index) const
Object at row position.
QVariant data(const QModelIndex &index, int role) const
virtual bool setSortColumnByPropertyIndex(const swift::misc::CPropertyIndex &propertyIndex)
Set column for sorting.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const final
List model for timestamp based objects with offset.
void setTextMessageMode(TextMessageMode mode)
Set mode.
virtual QVariant data(const QModelIndex &index, int role) const
Value object encapsulating information of a text message.
Definition: textmessage.h:31
QString asHtmlSummary(const QString &separator="<br>") const
Summary HTML code.
Models to be used with views, mainly QTableView.