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  void CViewUpdateSettings::reset()
20  {
21  this->m_updateAircraft = CTime(10.0, CTimeUnit::s());
22  this->m_updateAtc = CTime(10.0, CTimeUnit::s());
23  this->m_updateRendering = CTime(10.0, CTimeUnit::s());
24  this->m_updateUser = CTime(10.0, CTimeUnit::s());
25  }
26 
27  bool CViewUpdateSettings::isValid() const
28  {
29  // too fast updates cause CPU overload
30  static const CTime min(5.0, CTimeUnit::s());
31  return this->m_updateAircraft >= min && this->m_updateAtc >= min && this->m_updateRendering >= min &&
32  this->m_updateUser >= min;
33  }
34 
35  QString CViewUpdateSettings::convertToQString(bool i18n) const
36  {
37  Q_UNUSED(i18n);
38  const QString s("Atc: %1 Aircraft: %2 User: %3 Rendering %4");
39  return s.arg(m_updateAtc.valueRounded(CTimeUnit::s(), 2))
40  .arg(m_updateAircraft.valueRounded(CTimeUnit::s(), 2))
41  .arg(m_updateUser.valueRounded(CTimeUnit::s(), 2))
42  .arg(m_updateRendering.valueRounded(CTimeUnit::s(), 2));
43  }
44 
45  QVariant CViewUpdateSettings::propertyByIndex(CPropertyIndexRef index) const
46  {
47  if (index.isMyself()) { return QVariant::fromValue(*this); }
48  const auto i = index.frontCasted<ColumnIndex>();
49  switch (i)
50  {
51  case IndexAircraft: return QVariant::fromValue(this->m_updateAircraft);
52  case IndexAtc: return QVariant::fromValue(this->m_updateAtc);
53  case IndexRendering: return QVariant::fromValue(this->m_updateRendering);
54  case IndexUser: return QVariant::fromValue(this->m_updateUser);
55  default: return CValueObject::propertyByIndex(index);
56  }
57  }
58 
59  void CViewUpdateSettings::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
60  {
61  if (index.isMyself())
62  {
63  (*this) = variant.value<CViewUpdateSettings>();
64  return;
65  }
66 
67  const auto i = index.frontCasted<ColumnIndex>();
68  switch (i)
69  {
70  case IndexAircraft: this->m_updateAircraft = variant.value<CTime>(); break;
71  case IndexAtc: this->m_updateAtc = variant.value<CTime>(); break;
72  case IndexRendering: this->m_updateRendering = variant.value<CTime>(); break;
73  case IndexUser: this->m_updateUser = variant.value<CTime>(); break;
74  default: CValueObject::setPropertyByIndex(index, variant); break;
75  }
76  }
77 } // 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:158
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:165
static CTimeUnit s()
Second s.
Definition: units.h:954
GUI related classes.
Free functions in swift::misc.
QString arg(Args &&... args) const const
QVariant fromValue(T &&value)
T value() const &const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67