swift
viewupdatesettings.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "viewupdatesettings.h"
5 
6 #include <QStringList>
7 
8 #include "gui/guiutility.h"
9 #include "misc/stringutils.h"
10 
11 using namespace swift::misc;
12 using namespace swift::misc::physical_quantities;
13 using namespace swift::gui;
14 
15 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::gui::settings, CViewUpdateSettings)
16 
17 namespace swift::gui::settings
18 {
19  CViewUpdateSettings::CViewUpdateSettings() {}
20 
21  void CViewUpdateSettings::reset()
22  {
23  this->m_updateAircraft = CTime(10.0, CTimeUnit::s());
24  this->m_updateAtc = CTime(10.0, CTimeUnit::s());
25  this->m_updateRendering = CTime(10.0, CTimeUnit::s());
26  this->m_updateUser = CTime(10.0, CTimeUnit::s());
27  }
28 
29  bool CViewUpdateSettings::isValid() const
30  {
31  // too fast updates cause CPU overload
32  static const CTime min(5.0, CTimeUnit::s());
33  return this->m_updateAircraft >= min && this->m_updateAtc >= min && this->m_updateRendering >= min &&
34  this->m_updateUser >= min;
35  }
36 
37  QString CViewUpdateSettings::convertToQString(bool i18n) const
38  {
39  Q_UNUSED(i18n);
40  const QString s("Atc: %1 Aircraft: %2 User: %3 Rendering %4");
41  return s.arg(m_updateAtc.valueRounded(CTimeUnit::s(), 2))
42  .arg(m_updateAircraft.valueRounded(CTimeUnit::s(), 2))
43  .arg(m_updateUser.valueRounded(CTimeUnit::s(), 2))
44  .arg(m_updateRendering.valueRounded(CTimeUnit::s(), 2));
45  }
46 
47  QVariant CViewUpdateSettings::propertyByIndex(CPropertyIndexRef index) const
48  {
49  if (index.isMyself()) { return QVariant::fromValue(*this); }
50  ColumnIndex i = index.frontCasted<ColumnIndex>();
51  switch (i)
52  {
53  case IndexAircraft: return QVariant::fromValue(this->m_updateAircraft);
54  case IndexAtc: return QVariant::fromValue(this->m_updateAtc);
55  case IndexRendering: return QVariant::fromValue(this->m_updateRendering);
56  case IndexUser: return QVariant::fromValue(this->m_updateUser);
57  default: return CValueObject::propertyByIndex(index);
58  }
59  }
60 
61  void CViewUpdateSettings::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
62  {
63  if (index.isMyself())
64  {
65  (*this) = variant.value<CViewUpdateSettings>();
66  return;
67  }
68 
69  ColumnIndex i = index.frontCasted<ColumnIndex>();
70  switch (i)
71  {
72  case IndexAircraft: this->m_updateAircraft = variant.value<CTime>(); break;
73  case IndexAtc: this->m_updateAtc = variant.value<CTime>(); break;
74  case IndexRendering: this->m_updateRendering = variant.value<CTime>(); break;
75  case IndexUser: this->m_updateUser = variant.value<CTime>(); break;
76  default: CValueObject::setPropertyByIndex(index, variant); break;
77  }
78  }
79 } // namespace swift::gui::settings
Settings about view update rates.
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.
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
double value(MU unit) const
Value in given unit.
static CTimeUnit s()
Second s.
Definition: units.h:954
GUI related classes.
Free functions in swift::misc.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67