swift
presentweather.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 
7 
8 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::weather, CPresentWeather)
9 
10 namespace swift::misc::weather
11 {
12 
14  {
16  qRegisterMetaType<Intensity>();
17  qRegisterMetaType<Descriptor>();
18  }
19 
20  CPresentWeather::CPresentWeather(Intensity intensity, Descriptor descriptor, int weatherPhenomena)
21  : m_intensity(intensity), m_descriptor(descriptor), m_weatherPhenomena(weatherPhenomena)
22  {}
23 
25  {
26  if (index.isMyself()) { return QVariant::fromValue(*this); }
27  ColumnIndex i = index.frontCasted<ColumnIndex>();
28  switch (i)
29  {
30  case IndexIntensity: return QVariant::fromValue(m_intensity);
31  case IndexDescriptor: return QVariant::fromValue(m_descriptor);
32  case IndexWeatherPhenomena: return QVariant::fromValue(m_weatherPhenomena);
33  default: return CValueObject::propertyByIndex(index);
34  }
35  }
36 
37  void CPresentWeather::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
38  {
39  if (index.isMyself())
40  {
41  (*this) = variant.value<CPresentWeather>();
42  return;
43  }
44  ColumnIndex i = index.frontCasted<ColumnIndex>();
45  switch (i)
46  {
47  case IndexIntensity: setIntensity(variant.value<Intensity>()); break;
48  case IndexDescriptor: setDescriptor(variant.value<Descriptor>()); break;
49  case IndexWeatherPhenomena: setWeatherPhenomena(variant.toInt()); break;
50  default: CValueObject::setPropertyByIndex(index, variant); break;
51  }
52  }
53 
54  QString CPresentWeather::convertToQString(bool ) const
55  {
56  static const QHash<Intensity, QString> intensityHash = {
57  { Moderate, "moderate" },
58  { Light, "light" },
59  { Heavy, "heavy" },
60  { InVincinity, "in vincinity" },
61  };
62 
63  static const QHash<Descriptor, QString> descriptorHash = {
64  { None, "" }, { Shallow, "shallow" }, { Patches, "patches" },
65  { Partial, "partial" }, { Drifting, "drifting" }, { Blowing, "blowing" },
66  { Showers, "showers" }, { Thunderstorm, "thunderstorm" }, { Freezing, "freezing" },
67  };
68 
69  static const QHash<WeatherPhenomenon, QString> weatherPhenomenaHash = { { Drizzle, "drizzle" },
70  { Rain, "rain" },
71  { Snow, "snow" },
72  { SnowGrains, "snow srains" },
73  { IceCrystals, "ice crystals" },
74  { IcePellets, "ice pellets" },
75  { Hail, "hail" },
76  { SnowPellets, "snow pellets" },
77  { Unknown, "unknown" },
78  { Mist, "mist" },
79  { Fog, "fog" },
80  { Smoke, "smoke" },
81  { VolcanicAsh, "volcanic ash" },
82  { Dust, "dust" },
83  { Sand, "sand" },
84  { Haze, "haze" },
85  { DustSandWhirls, "dustSand whirls" },
86  { Squalls, "squalls" },
87  { TornadoOrWaterspout,
88  "tornado or waterspout" },
89  { FunnelCloud, "funnel cloud" },
90  { Sandstorm, "sandstorm" },
91  { Duststorm, "duststorm" } };
92 
93  QString weatherPhenomenaAsString;
94  for (const WeatherPhenomenon &wp : makeKeysRange(weatherPhenomenaHash))
95  {
96  if (m_weatherPhenomena & wp)
97  {
98  if (!weatherPhenomenaAsString.isEmpty()) weatherPhenomenaAsString += " and ";
99  weatherPhenomenaAsString += weatherPhenomenaHash.value(wp);
100  }
101  }
102 
103  QString str;
104  str += intensityHash.value(m_intensity);
105  str += " ";
106  str += descriptorHash.value(m_descriptor);
107  str += " ";
108  str += weatherPhenomenaAsString;
109  return str;
110  }
111 
112 } // namespace swift::misc::weather
Non-owning reference to a CPropertyIndex with a subset of its features.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
ColumnIndex
Base class enums.
Definition: mixinindex.h:44
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: mixinindex.h:160
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:167
static void registerMetadata()
Register metadata.
Definition: mixinmetatype.h:56
Value object for present weather flags.
static void registerMetadata()
Register metadata.
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QString convertToQString(bool i18n=false) const
Cast as QString.
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
void setIntensity(Intensity intensity)
Set intensity.
void setDescriptor(Descriptor descriptor)
Set descriptor.
CPresentWeather()=default
Default constructor.
void setWeatherPhenomena(int phenomena)
Set weather phenomena.
auto makeKeysRange(const T &container)
Returns a const CRange for iterating over the keys of a Qt associative container.
Definition: range.h:353
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67