swift
simulatedaircraftlistmodel.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 <QtDebug>
8 #include <QtGlobal>
9 
11 #include "gui/models/columns.h"
13 #include "misc/aviation/callsign.h"
17 #include "misc/network/user.h"
20 
21 using namespace swift::misc;
22 using namespace swift::misc::aviation;
23 using namespace swift::misc::network;
24 using namespace swift::misc::physical_quantities;
25 using namespace swift::misc::simulation;
26 
27 namespace swift::gui::models
28 {
29  CSimulatedAircraftListModel::CSimulatedAircraftListModel(QObject *parent)
30  : CListModelCallsignObjects("ModelSimulatedAircraftList", parent)
31  {
33 
34  // force strings for translation in resource files
35  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "callsign");
36  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "pilotrealname");
37  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "latitude");
38  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "longitude");
39  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "altitude");
40  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "distance");
41  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "height");
42  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "transponder");
43  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "groundspeed");
44  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "icao");
45  (void)QT_TRANSLATE_NOOP("ModelSimulatedAircraftList", "model");
46  }
47 
49  {
50  if (m_mode == mode) { return; }
51  m_mode = mode;
52  m_columns.clear();
53  switch (mode)
54  {
55  case NotSet:
56  case NetworkMode:
57  {
58  m_columns.addColumn(CColumn::standardValueObject("cs.", "callsign", CSimulatedAircraft::IndexCallsign,
59  CCallsign::IndexCallsignString));
61  "realname", "pilot's real name", { CSimulatedAircraft::IndexPilot, CUser::IndexRealName }));
62  m_columns.addColumn(CColumn("dist.", "distance", CSimulatedAircraft::IndexRelativeDistance,
64  m_columns.addColumn(CColumn("altitude",
65  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexAltitude },
66  new CAltitudeFormatter()));
68  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundSpeed },
69  new CSpeedKtsFormatter()));
71  "icao", "icao and livery info", { CSimulatedAircraft::IndexCombinedIcaoLiveryStringNetworkModel }));
72 
73  // icon column for airline
75  pmf->setMaxHeight(25);
76  pmf->setMaxWidth(100);
77  CColumn col("airline",
78  { CSimulatedAircraft::IndexNetworkModel, CAircraftModel::IndexLivery,
79  CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexIcon },
80  pmf);
81  col.setSortPropertyIndex({ CSimulatedAircraft::IndexNetworkModel, CAircraftModel::IndexLivery,
82  CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexAirlineDesignator });
83  m_columns.addColumn(col);
84 
85  m_columns.addColumn(CColumn("frequency",
86  { CSimulatedAircraft::IndexCom1System, CComSystem::IndexActiveFrequency },
87  new CComFrequencyFormatter()));
89  CColumn::standardString("transponder", { CSimulatedAircraft::IndexTransponder,
90  CTransponder::IndexTransponderCodeAndModeFormatted }));
91  m_columns.addColumn(CColumn("latitude",
92  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexLatitude },
93  new CLatLonFormatter()));
94  m_columns.addColumn(CColumn("longitude",
95  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexLongitude },
96  new CLatLonFormatter()));
97 
98  // default sort order
99  this->setSortColumnByPropertyIndex(CSimulatedAircraft::IndexRelativeDistance);
100  m_sortOrder = Qt::AscendingOrder;
101  }
102  break;
103 
104  case RenderedMode:
105  {
106  m_columns.addColumn(CColumn("e.", "enabled", CSimulatedAircraft::IndexEnabled,
107  new CBoolIconFormatter("enabled", "disabled"), true));
108  m_columns.addColumn(CColumn("r.", "rendered", CSimulatedAircraft::IndexRendered,
109  new CBoolIconFormatter("rendered", "skipped"), true));
111  "cs.", "callsign", { CSimulatedAircraft::IndexCallsign, CCallsign::IndexCallsignString }));
112  m_columns.addColumn(CColumn("dist.", "distance", CSimulatedAircraft::IndexRelativeDistance,
114  m_columns.addColumn(CColumn("altitude",
115  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexAltitude },
116  new CAltitudeFormatter()));
117  m_columns.addColumn(CColumn("CG", { CSimulatedAircraft::IndexModel, CAircraftModel::IndexCG },
118  new CPhysiqalQuantiyFormatter<CLengthUnit, CLength>(CLengthUnit::ft(), 1)));
120  { CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundSpeed },
121  new CSpeedKtsFormatter()));
122  m_columns.addColumn(CColumn("p.", "parts", CSimulatedAircraft::IndexPartsSynchronized,
123  new CBoolIconFormatter("parts", "no parts"), true));
124  m_columns.addColumn(CColumn("fp.", "fast position updates", CSimulatedAircraft::IndexFastPositionUpdates,
125  new CBoolIconFormatter("enabled", "disabled"), true));
126  m_columns.addColumn(CColumn("gnd", "supports gnd.flag", CSimulatedAircraft::IndexSupportsGndFlag,
127  new CBoolIconFormatter("yes", "no"), true));
129  "realname", "pilot's real name", { CSimulatedAircraft::IndexPilot, CUser::IndexRealName }));
130  m_columns.addColumn(CColumn::standardString("icao", CSimulatedAircraft::IndexCombinedIcaoLiveryString));
132  CColumn::standardString("model", { CSimulatedAircraft::IndexModel, CAircraftModel::IndexModelString }));
134  "type", { CSimulatedAircraft::IndexModel, CAircraftModel::IndexModelTypeAsString }));
136  "desc.", "description", { CSimulatedAircraft::IndexModel, CAircraftModel::IndexDescription }));
137  m_columns.addColumn(CColumn::standardString("aircraft", "rendered vs. network aircraft ICAO",
138  CSimulatedAircraft::IndexNetworkModelAircraftIcaoDifference));
139  m_columns.addColumn(CColumn::standardString("livery", "rendered vs. network livery",
140  CSimulatedAircraft::IndexNetworkModelLiveryDifference));
141 
142  // default sort order
143  this->setSortColumnByPropertyIndex(CSimulatedAircraft::IndexRelativeDistance);
144  m_sortOrder = Qt::AscendingOrder;
145  }
146  break;
147 
148  default: qFatal("Wrong mode"); break;
149  }
150  }
151 } // namespace swift::gui::models
Airspace distance displayed in NM.
Formatter when column contains an altitude.
Single column.
Definition: columns.h:26
static CColumn standardValueObject(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex, int alignment=CDefaultFormatter::alignDefault())
Get a standard value object formatted column.
Definition: columns.cpp:46
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 addColumnIncognito(const CColumn &column)
Add a column as incognito enabled.
Definition: columns.cpp:108
void addColumn(const CColumn &column)
Add a column.
Definition: columns.cpp:100
Latitude or Longitude formatter.
virtual bool setSortColumnByPropertyIndex(const swift::misc::CPropertyIndex &propertyIndex)
Set column for sorting.
List model for callsign based objects (callsign is unique key)
Formatter for physical quantities.
void setMaxHeight(int h)
Width/height.
void setMaxWidth(int w)
Width/height.
Models to be used with views, mainly QTableView.
Free functions in swift::misc.