swift
atcstationtreemodel.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QDateTime>
7 #include <QList>
8 #include <QMap>
9 #include <QModelIndex>
10 #include <QStandardItem>
11 #include <QStandardItemModel>
12 #include <QString>
13 #include <Qt>
14 #include <QtDebug>
15 #include <QtGlobal>
16 
18 #include "gui/models/columns.h"
19 #include "misc/aviation/callsign.h"
20 #include "misc/icon.h"
22 #include "misc/network/user.h"
23 #include "misc/pq/frequency.h"
24 #include "misc/pq/length.h"
25 #include "misc/pq/units.h"
26 #include "misc/propertyindex.h"
27 #include "misc/variant.h"
28 
29 using namespace swift::misc;
30 using namespace swift::misc::physical_quantities;
31 using namespace swift::misc::aviation;
32 using namespace swift::misc::network;
33 
34 namespace swift::gui::models
35 {
36  CAtcStationTreeModel::CAtcStationTreeModel(QObject *parent) : QStandardItemModel(parent) {}
37 
39  {
40  this->clear();
41  if (stations.isEmpty()) { return; }
42 
43  m_stations = stations.sortedByAtcSuffixSortOrderAndDistance();
44  m_stationsBySuffix = m_stations.splitPerSuffix();
45  m_suffixes = m_stations.getSuffixes();
46  QStandardItemModel::clear();
47 
48  int visibleColumns = 0;
49  for (const QString &suffix : std::as_const(m_suffixes))
50  {
51  // ownership of QStandardItem is taken by model
52  QStandardItem *typeFolderFirstColumn =
53  new QStandardItem(CCallsign::atcSuffixToIcon(suffix).toQIcon(), suffix);
54  typeFolderFirstColumn->setEditable(false);
55  this->invisibleRootItem()->appendRow(typeFolderFirstColumn);
56 
57  for (const CAtcStation &station : m_stationsBySuffix[suffix])
58  {
59  int colCount = 0;
60  QList<QStandardItem *> stationRow;
61  for (const CColumn &column : m_columns.columns())
62  {
63  const CPropertyIndex i(column.getPropertyIndex());
64  const CVariant v(station.propertyByIndex(i));
65 
66  QStandardItem *si = nullptr;
67  if (column.getFormatter()->supportsRole(Qt::DecorationRole))
68  {
69  const QIcon icon = column.getFormatter()->decorationRole(v).toPixmap();
70  si = new QStandardItem(icon, QString());
71  }
72  else if (column.getFormatter()->supportsRole(Qt::DisplayRole))
73  {
74  const CVariant f = column.getFormatter()->displayRole(v);
75  si = new QStandardItem(f.toQString(true));
76  }
77  if (!si) { continue; }
78  colCount++;
79  si->setEditable(false); // make not editable
80  stationRow.push_back(si);
81  }
82 
83  // add all items
84  if (stationRow.isEmpty()) { continue; }
85  typeFolderFirstColumn->appendRow(stationRow);
86  visibleColumns = qMax(visibleColumns, colCount);
87  }
88  }
89  this->setColumnCount(visibleColumns);
90  }
91 
93  {
94  m_stations.clear();
95  m_stationsBySuffix.clear();
96  m_suffixes.clear();
97  QStandardItemModel::clear();
98  }
99 
101  {
102  Q_UNUSED(station)
103  Q_UNUSED(added)
104  }
105 } // namespace swift::gui::models
void updateContainer(const swift::misc::aviation::CAtcStationList &stations)
Update container.
void changedAtcStationConnectionStatus(const swift::misc::aviation::CAtcStation &station, bool added)
Used to quickly update single station (better response for the user)
Single column.
Definition: columns.h:26
const QList< CColumn > & columns() const
Columns.
Definition: columns.h:238
void clear()
Removes all elements in the sequence.
Definition: sequence.h:288
bool isEmpty() const
Synonym for empty.
Definition: sequence.h:285
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition: variant.h:66
Value object encapsulating information about an ATC station.
Definition: atcstation.h:38
Value object for a list of ATC stations.
QHash< QString, CAtcStationList > splitPerSuffix(bool sort=true) const
Split per suffix.
CAtcStationList sortedByAtcSuffixSortOrderAndDistance() const
Sorted by ATC suffix sort order and distance.
QStringList getSuffixes() const
All suffixes, in the order of the list.
QString toQString(bool i18n=false) const
Cast as QString.
Definition: mixinstring.h:76
Models to be used with views, mainly QTableView.
Free functions in swift::misc.