swift
icon.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 
4 #include "misc/icon.h"
5 
6 #include <QDir>
7 #include <QStringBuilder>
8 #include <QtGlobal>
9 
10 #include "misc/sequence.h"
11 
12 namespace swift::misc
13 {
14  CIcon::CIcon(CIcons::IconIndex index) : CIcon(iconByIndex(index)) {}
15 
16  CIcon::CIcon(CIcons::IconIndex index, const QString &descriptiveText)
17  : m_index(index), m_descriptiveText(descriptiveText)
18  {}
19 
20  // CIcon::CIcon(const QPixmap &pixmap, const QString &descriptiveText) :
21  // m_index(CIcons::IconIsGenerated), m_descriptiveText(descriptiveText), m_pixmap(pixmap)
22  //{ }
23 
24  CIcons::IconIndex CIcon::getIndex() const { return m_index; }
25 
26  bool CIcon::isIndexBased() const { return m_index < CIcons::IconIsGenerated; }
27 
28  bool CIcon::isGenerated() const { return this->getIndex() == CIcons::IconIsGenerated; }
29 
30  bool CIcon::isFileBased() const { return this->getIndex() == CIcons::IconIsFile; }
31 
32  bool CIcon::isSet() const { return (m_index != CIcons::NotSet); }
33 
34  QPixmap CIcon::toPixmap() const
35  {
36  if (this->isSet())
37  {
38  if (this->isGenerated()) { return m_pixmap; }
39  if (this->isFileBased()) { return m_pixmap; }
40  return CIcons::pixmapByIndex(this->getIndex(), m_rotateDegrees);
41  }
42  else { return CIcons::pixmapByIndex(this->getIndex()); }
43  }
44 
45  QIcon CIcon::toQIcon() const { return QIcon(toPixmap()); }
46 
47  QString CIcon::convertToQString(bool i18n) const
48  {
49  Q_UNUSED(i18n);
50  const QString s = m_descriptiveText % u' ' % QString::number(m_index);
51  return s;
52  }
53 
54  const CIcon &CIcon::iconByIndex(CIcons::IconIndex index) { return iconByIndex(static_cast<int>(index)); }
55 
56  const CIcon &CIcon::iconByIndex(int index)
57  {
58  // changed to index / at based approach during #322 (after Sleepy profiling)
59  // this seems to be faster as the findBy approach previously used, but required synced indexes
60  Q_ASSERT_X(index >= 0 && index < CIcon::allIcons().size(), "iconForIndex", "wrong index");
61  return CIcon::allIcons()[index];
62  }
63 
65  {
66  // keep indexes alphabetically sorted and in sync with CIcons
67  // req. for "iconByIndex"
68  static const CSequence<CIcon> icons(
69  { CIcon(CIcons::ApplicationAircraft, "aircraft"),
70  CIcon(CIcons::ApplicationAircraftCategories, "categories"),
71  CIcon(CIcons::ApplicationAircraftIcao, "ICAO aircraft"),
72  CIcon(CIcons::ApplicationAirlineIcao, "ICAO airlines"),
73  CIcon(CIcons::ApplicationAtc, "ATC"),
74  CIcon(CIcons::ApplicationAudio, "audio"),
75  CIcon(CIcons::ApplicationCockpit, "cockpit"),
76  CIcon(CIcons::ApplicationCountries, "countries"),
77  CIcon(CIcons::ApplicationDatabase, "database"),
78  CIcon(CIcons::ApplicationDbStash, "DB stash"),
79  CIcon(CIcons::ApplicationDistributors, "distributors"),
80  CIcon(CIcons::ApplicationFlightPlan, "flightplan"),
81  CIcon(CIcons::ApplicationLiveries, "liveries"),
82  CIcon(CIcons::ApplicationLog, "log"),
83  CIcon(CIcons::ApplicationMappings, "mappings"),
84  CIcon(CIcons::ApplicationModels, "models"),
85  CIcon(CIcons::ApplicationSettings, "settings"),
86  CIcon(CIcons::ApplicationSimulator, "simulator"),
87  CIcon(CIcons::ApplicationTerminal, "terminal"),
88  CIcon(CIcons::ApplicationTextMessages, "text messages"),
89  CIcon(CIcons::ApplicationWeather, "weather"),
90  CIcon(CIcons::ApplicationRadar, "radar"),
91  CIcon(CIcons::AviationAtis, "ATIS"),
92  CIcon(CIcons::AviationAttitudeIndicator, "attitude indicator"),
93  CIcon(CIcons::AviationMetar, "METAR"),
94  CIcon(CIcons::GeoPosition, "geo position"),
95  CIcon(CIcons::ModelExclude, "exclude model"),
96  CIcon(CIcons::ModelInclude, "include model"),
97  CIcon(CIcons::NetworkCapabilityTextOnly, "text only"),
98  CIcon(CIcons::NetworkCapabilityUnknown, "unknown"),
99  CIcon(CIcons::NetworkCapabilityVoice, "voice"),
100  CIcon(CIcons::NetworkCapabilityVoiceBackground, "voice"),
101  CIcon(CIcons::NetworkCapabilityVoiceReceiveOnly, "voice receive"),
102  CIcon(CIcons::NetworkCapabilityVoiceReceiveOnlyBackground, "voice receive"),
103  CIcon(CIcons::NetworkRoleApproach, "ATC approach"),
104  CIcon(CIcons::NetworkRoleC1, "C1"),
105  CIcon(CIcons::NetworkRoleC3, "C3"),
106  CIcon(CIcons::NetworkRoleCenter, "ATC center"),
107  CIcon(CIcons::NetworkRoleDelivery, "ATC delivery"),
108  CIcon(CIcons::NetworkRoleDeparture, "ATC departure"),
109  CIcon(CIcons::NetworkRoleFss, "FSS"),
110  CIcon(CIcons::NetworkRoleGround, "ATC ground"),
111  CIcon(CIcons::NetworkRoleI1, "I1 (instructor)"),
112  CIcon(CIcons::NetworkRoleI3, "I3 (instructor)"),
113  CIcon(CIcons::NetworkRoleMnt, "Mentor"),
114  CIcon(CIcons::NetworkRoleObs, "observer"),
115  CIcon(CIcons::NetworkRolePilot, "pilot"),
116  CIcon(CIcons::NetworkRoleS1, "S1"),
117  CIcon(CIcons::NetworkRoleS2, "S2"),
118  CIcon(CIcons::NetworkRoleS3, "S3"),
119  CIcon(CIcons::NetworkRoleSup, "supervisor"),
120  CIcon(CIcons::NetworkRoleTower, "ATC tower"),
121  CIcon(CIcons::NetworkRoleUnknown, "unknown"),
122  CIcon(CIcons::NotSet, "?"),
123  CIcon(CIcons::StandardIconAppAircraft16, "aircraft"),
124  CIcon(CIcons::StandardIconAppAtc16, "ATC"),
125  CIcon(CIcons::StandardIconAppFlightPlan16, "flight plan"),
126  CIcon(CIcons::StandardIconAppLog16, "log"),
127  CIcon(CIcons::StandardIconAppMappings16, "mappings"),
128  CIcon(CIcons::StandardIconAppSettings16, "settings"),
129  CIcon(CIcons::StandardIconAppSimulator16, "simulator"),
130  CIcon(CIcons::StandardIconAppTextMessages16, "text messages"),
131  CIcon(CIcons::StandardIconAppUsers16, "users"),
132  CIcon(CIcons::StandardIconAppWeather16, "weather"),
133  CIcon(CIcons::StandardIconArrowMediumEast16, "arrow east"),
134  CIcon(CIcons::StandardIconArrowMediumNorth16, "arrow north"),
135  CIcon(CIcons::StandardIconArrowMediumSouth16, "arrow south"),
136  CIcon(CIcons::StandardIconArrowMediumWest16, "arrow west"),
137  CIcon(CIcons::StandardIconClose16, "close"),
138  CIcon(CIcons::StandardIconColor16, "color"),
139  CIcon(CIcons::StandardIconColorPicker16, "color picker"),
140  CIcon(CIcons::StandardIconColorSwatch16, "color swatch"),
141  CIcon(CIcons::StandardIconCopy16, "copy"),
142  CIcon(CIcons::StandardIconCross16, "cross"),
143  CIcon(CIcons::StandardIconCrossCircle16, "cross circle"),
144  CIcon(CIcons::StandardIconCrossSmall16, "cross (small)"),
145  CIcon(CIcons::StandardIconCrossWhite16, "cross white"),
146  CIcon(CIcons::StandardIconCut16, "cut"),
147  CIcon(CIcons::StandardIconDatabase16, "database"),
148  CIcon(CIcons::StandardIconDatabaseAdd16, "add to database"),
149  CIcon(CIcons::StandardIconDatabaseConnect16, "connect database"),
150  CIcon(CIcons::StandardIconDatabaseDelete16, "delete from database"),
151  CIcon(CIcons::StandardIconDatabaseEdit16, "edit database"),
152  CIcon(CIcons::StandardIconDatabaseError16, "error"),
153  CIcon(CIcons::StandardIconDatabaseKey16, "key"),
154  CIcon(CIcons::StandardIconDatabaseTable16, "table"),
155  CIcon(CIcons::StandardIconDelete16, "delete"),
156  CIcon(CIcons::StandardIconDockBottom16, "dock bottom"),
157  CIcon(CIcons::StandardIconDockTop16, "dock top"),
158  CIcon(CIcons::StandardIconDragAndDrop16, "drag and drop"),
159  CIcon(CIcons::StandardIconEmpty, "empty"),
160  CIcon(CIcons::StandardIconEmpty16, "empty"),
161  CIcon(CIcons::StandardIconError16, "error"),
162  CIcon(CIcons::StandardIconFilter16, "filter"),
163  CIcon(CIcons::StandardIconFloatAll16, "float all"),
164  CIcon(CIcons::StandardIconFloatOne16, "float one"),
165  CIcon(CIcons::StandardIconFont16, "font"),
166  CIcon(CIcons::StandardIconGlobe16, "globe"),
167  CIcon(CIcons::StandardIconHeadingOne16, "heading"),
168  CIcon(CIcons::StandardIconInfo16, "info"),
169  CIcon(CIcons::StandardIconJoystick16, "joystick"),
170  CIcon(CIcons::StandardIconLoad16, "load open"),
171  CIcon(CIcons::StandardIconLockClosed16, "lock"),
172  CIcon(CIcons::StandardIconLockOpen16, "lock open"),
173  CIcon(CIcons::StandardIconMonitorError16, "monitor error"),
174  CIcon(CIcons::StandardIconPaintCan16, "paint can"),
175  CIcon(CIcons::StandardIconPaperPlane16, "plane"),
176  CIcon(CIcons::StandardIconPaste16, "paste"),
177  CIcon(CIcons::StandardIconPlugin16, "plugin"),
178  CIcon(CIcons::StandardIconRadar16, "radar"),
179  CIcon(CIcons::StandardIconRadio16, "radio"),
180  CIcon(CIcons::StandardIconRefresh16, "refresh"),
181  CIcon(CIcons::StandardIconResize16, "resize"),
182  CIcon(CIcons::StandardIconResizeHorizontal16, "resize (horizontal)"),
183  CIcon(CIcons::StandardIconResizeVertical16, "resize (vertical)"),
184  CIcon(CIcons::StandardIconSave16, "save"),
185  CIcon(CIcons::StandardIconSpeakerNetwork16, "speaker (network)"),
186  CIcon(CIcons::StandardIconStatusBar16, "status bar"),
187  CIcon(CIcons::StandardIconTableRelationship16, "relationship"),
188  CIcon(CIcons::StandardIconTableSheet16, "table sheet"),
189  CIcon(CIcons::StandardIconText16, "text"),
190  CIcon(CIcons::StandardIconTick16, "tick"),
191  CIcon(CIcons::StandardIconTickRed16, "tick red"),
192  CIcon(CIcons::StandardIconTickSmall16, "tick (small)"),
193  CIcon(CIcons::StandardIconTickWhite16, "tick white"),
194  CIcon(CIcons::StandardIconUnknown16, "unknwon"),
195  CIcon(CIcons::StandardIconUser16, "user"),
196  CIcon(CIcons::StandardIconUsers16, "users"),
197  CIcon(CIcons::StandardIconViewMulticolumn16, "view multicolumn"),
198  CIcon(CIcons::StandardIconViewTile16, "view tile"),
199  CIcon(CIcons::StandardIconVolumeHigh16, "volume hight"),
200  CIcon(CIcons::StandardIconVolumeLow16, "volume low"),
201  CIcon(CIcons::StandardIconVolumeMuted16, "muted"),
202  CIcon(CIcons::StandardIconWarning16, "warning"),
203  CIcon(CIcons::StandardIconWeatherCloudy16, "cloudy"),
204  CIcon(CIcons::StandardIconWrench16, "wrench"),
205  CIcon(CIcons::StandardIconZoomIn16, "zoom in"),
206  CIcon(CIcons::StandardIconZoomOut16, "zoom out"),
207  CIcon(CIcons::StandardIconBuilding16, "building"),
208  CIcon(CIcons::Swift16, "swift"),
209  CIcon(CIcons::Swift24, "swift"),
210  CIcon(CIcons::Swift48, "swift"),
211  CIcon(CIcons::Swift64, "swift"),
212  CIcon(CIcons::Swift128, "swift"),
213  CIcon(CIcons::Swift256, "swift"),
214  CIcon(CIcons::Swift1024, "swift"),
215  CIcon(CIcons::SwiftDatabase16, "swift DB"),
216  CIcon(CIcons::SwiftDatabase24, "swift DB"),
217  CIcon(CIcons::SwiftDatabase48, "swift DB"),
218  CIcon(CIcons::SwiftDatabase64, "swift DB"),
219  CIcon(CIcons::SwiftDatabase128, "swift DB"),
220  CIcon(CIcons::SwiftDatabase256, "swift DB"),
221  CIcon(CIcons::SwiftDatabase1024, "swift DB"),
222  CIcon(CIcons::SwiftCore16, "swift core"),
223  CIcon(CIcons::SwiftCore24, "swift core"),
224  CIcon(CIcons::SwiftCore48, "swift core"),
225  CIcon(CIcons::SwiftCore64, "swift core"),
226  CIcon(CIcons::SwiftCore128, "swift core"),
227  CIcon(CIcons::SwiftCore256, "swift core"),
228  CIcon(CIcons::SwiftCore512, "swift core"),
229  CIcon(CIcons::SwiftCore1024, "swift core"),
230  CIcon(CIcons::SwiftLauncher16, "swift launcher"),
231  CIcon(CIcons::SwiftLauncher24, "swift launcher"),
232  CIcon(CIcons::SwiftLauncher48, "swift launcher"),
233  CIcon(CIcons::SwiftLauncher64, "swift launcher"),
234  CIcon(CIcons::SwiftLauncher128, "swift launcher"),
235  CIcon(CIcons::SwiftLauncher256, "swift launcher"),
236  CIcon(CIcons::SwiftLauncher512, "swift launcher"),
237  CIcon(CIcons::SwiftLauncher1024, "swift launcher") });
238  return icons;
239  }
240 
241  // CIcons methods defined here to circumvent cyclic dependency
242  QVariant CIcons::toVariant(IconIndex icon) { return QVariant::fromValue(CIcon(icon)); }
243  QVariant CIcons::toVariantPixmap(IconIndex icon) { return QVariant::fromValue(CIcon(icon).toPixmap()); }
244 } // namespace swift::misc
Value object for icons. An icon is stored in the global icon repository and identified by its index....
Definition: icon.h:39
CIcons::IconIndex getIndex() const
Index.
Definition: icon.cpp:24
CIcon()
Default constructor.
Definition: icon.h:42
static const CSequence< CIcon > & allIcons()
All icons.
Definition: icon.cpp:64
bool isSet() const
Icon set?
Definition: icon.cpp:32
static const CIcon & iconByIndex(CIcons::IconIndex index)
Icon for given index.
Definition: icon.cpp:54
bool isFileBased() const
File based?
Definition: icon.cpp:30
QIcon toQIcon() const
A QIcon.
Definition: icon.cpp:45
bool isIndexBased() const
Index based.
Definition: icon.cpp:26
QPixmap toPixmap() const
Corresponding pixmap.
Definition: icon.cpp:34
bool isGenerated() const
Generated icon.
Definition: icon.cpp:28
QString convertToQString(bool i18n=false) const
Cast as QString.
Definition: icon.cpp:47
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Definition: icons.h:32
@ NetworkRoleMnt
Mentor.
Definition: icons.h:78
static const QPixmap & pixmapByIndex(IconIndex index)
Pixmap by given index.
static QVariant toVariant(IconIndex icon)
Variant containing CIcon.
Definition: icon.cpp:242
static QVariant toVariantPixmap(IconIndex icon)
Variant containing QPixmap.
Definition: icon.cpp:243
Free functions in swift::misc.