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();
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  auto *typeFolderFirstColumn = new QStandardItem(CCallsign::atcSuffixToIcon(suffix).toQIcon(), suffix);
53  typeFolderFirstColumn->setEditable(false);
54  this->invisibleRootItem()->appendRow(typeFolderFirstColumn);
55 
56  for (const CAtcStation &station : m_stationsBySuffix[suffix])
57  {
58  int colCount = 0;
59  QList<QStandardItem *> stationRow;
60  for (const CColumn &column : m_columns.columns())
61  {
62  const CPropertyIndex i(column.getPropertyIndex());
63  const CVariant v(station.propertyByIndex(i));
64 
65  QStandardItem *si = nullptr;
66  if (column.getFormatter()->supportsRole(Qt::DecorationRole))
67  {
68  const QIcon icon = column.getFormatter()->decorationRole(v).toPixmap();
69  si = new QStandardItem(icon, QString());
70  }
71  else if (column.getFormatter()->supportsRole(Qt::DisplayRole))
72  {
73  const CVariant f = column.getFormatter()->displayRole(v);
74  si = new QStandardItem(f.toQString(true));
75  }
76  if (!si) { continue; }
77  colCount++;
78  si->setEditable(false); // make not editable
79  stationRow.push_back(si);
80  }
81 
82  // add all items
83  if (stationRow.isEmpty()) { continue; }
84  typeFolderFirstColumn->appendRow(stationRow);
85  visibleColumns = qMax(visibleColumns, colCount);
86  }
87  }
88  this->setColumnCount(visibleColumns);
89  }
90 
92  {
93  m_stations.clear();
94  m_stationsBySuffix.clear();
95  m_suffixes.clear();
97  }
98 
100  {
101  Q_UNUSED(station)
102  Q_UNUSED(added)
103  }
104 } // 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:74
Models to be used with views, mainly QTableView.
Free functions in swift::misc.
void clear()
void clear()
bool isEmpty() const const
void push_back(QList< T >::parameter_type value)
void appendRow(QStandardItem *item)
void setEditable(bool editable)
QStandardItem * invisibleRootItem() const const
void setColumnCount(int columns)
DecorationRole