From 438e72555a714bb62f59a05cf5ea3e35121ce3e9 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 9 Nov 2016 20:16:21 +0100 Subject: [PATCH] refs #799, own component for view update times * utility function in CTime * settings class for update times --- .../components/settingsviewupdatetimes.cpp | 54 +++++ .../components/settingsviewupdatetimes.h | 51 +++++ .../components/settingsviewupdatetimes.ui | 196 ++++++++++++++++++ src/blackgui/registermetadata.cpp | 2 + src/blackgui/settings/viewupdatesettings.cpp | 97 +++++++++ src/blackgui/settings/viewupdatesettings.h | 116 +++++++++++ src/blackmisc/pq/time.cpp | 10 +- src/blackmisc/pq/time.h | 8 +- src/blackmisc/propertyindex.h | 1 + 9 files changed, 530 insertions(+), 5 deletions(-) create mode 100644 src/blackgui/components/settingsviewupdatetimes.cpp create mode 100644 src/blackgui/components/settingsviewupdatetimes.h create mode 100644 src/blackgui/components/settingsviewupdatetimes.ui create mode 100644 src/blackgui/settings/viewupdatesettings.cpp create mode 100644 src/blackgui/settings/viewupdatesettings.h diff --git a/src/blackgui/components/settingsviewupdatetimes.cpp b/src/blackgui/components/settingsviewupdatetimes.cpp new file mode 100644 index 000000000..eef619634 --- /dev/null +++ b/src/blackgui/components/settingsviewupdatetimes.cpp @@ -0,0 +1,54 @@ +/* Copyright (C) 2016 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "settingsviewupdatetimes.h" +#include "ui_settingsviewupdatetimes.h" + +using namespace BlackGui::Settings; +using namespace BlackMisc::PhysicalQuantities; + +namespace BlackGui +{ + namespace Components + { + CSettingsViewUpdateTimes::CSettingsViewUpdateTimes(QWidget *parent) : + QFrame(parent), + ui(new Ui::CSettingsViewUpdateTimes) + { + ui->setupUi(this); + connect(ui->hs_RenderingUpdateTime, &QSlider::sliderReleased, this, &CSettingsViewUpdateTimes::ps_sliderChanged); + connect(ui->hs_AircraftUpdateTime, &QSlider::sliderReleased, this, &CSettingsViewUpdateTimes::ps_sliderChanged); + connect(ui->hs_AtcUpdateTime, &QSlider::sliderReleased, this, &CSettingsViewUpdateTimes::ps_sliderChanged); + connect(ui->hs_UserUpdateTime, &QSlider::sliderReleased, this, &CSettingsViewUpdateTimes::ps_sliderChanged); + this->ps_settingsChanged(); + } + + CSettingsViewUpdateTimes::~CSettingsViewUpdateTimes() + { } + + void CSettingsViewUpdateTimes::ps_sliderChanged() + { + CViewUpdateSettings settings; + settings.setAircraftUpdateTime(CTime(ui->hs_AircraftUpdateTime->value(), CTimeUnit::s())); + settings.setAtcUpdateTime(CTime(ui->hs_AtcUpdateTime->value(), CTimeUnit::s())); + settings.setRenderingUpdateTime(CTime(ui->hs_RenderingUpdateTime->value(), CTimeUnit::s())); + settings.setUserUpdateTime(CTime(ui->hs_UserUpdateTime->value(), CTimeUnit::s())); + m_settings.setAndSave(settings); + } + + void CSettingsViewUpdateTimes::ps_settingsChanged() + { + const CViewUpdateSettings settings(this->m_settings.get()); + ui->hs_AircraftUpdateTime->setValue(settings.getAircraftUpdateTime().toSeconds()); + ui->hs_AtcUpdateTime->setValue(settings.getAtcUpdateTime().toSeconds()); + ui->hs_RenderingUpdateTime->setValue(settings.getRenderingUpdateTime().toSeconds()); + ui->hs_UserUpdateTime->setValue(settings.getUserUpdateTime().toSeconds()); + } + } // ns +} // ns diff --git a/src/blackgui/components/settingsviewupdatetimes.h b/src/blackgui/components/settingsviewupdatetimes.h new file mode 100644 index 000000000..861942706 --- /dev/null +++ b/src/blackgui/components/settingsviewupdatetimes.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2016 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_COMPONENTS_SETTINGSVIEWUPDATETIMES_H +#define BLACKGUI_COMPONENTS_SETTINGSVIEWUPDATETIMES_H + +#include "blackgui/settings/viewupdatesettings.h" +#include + +namespace Ui { class CSettingsViewUpdateTimes; } +namespace BlackGui +{ + namespace Components + { + /*! + * Update rates / times + */ + class CSettingsViewUpdateTimes : public QFrame + { + Q_OBJECT + + public: + //! Constructor + explicit CSettingsViewUpdateTimes(QWidget *parent = nullptr); + + //! Destructor + ~CSettingsViewUpdateTimes(); + + private slots: + //! Slider changed + void ps_sliderChanged(); + + //! Settings have been changed + void ps_settingsChanged(); + + private: + QScopedPointer ui; + BlackMisc::CSetting m_settings { this, &CSettingsViewUpdateTimes::ps_settingsChanged }; //!< settings changed + }; + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/components/settingsviewupdatetimes.ui b/src/blackgui/components/settingsviewupdatetimes.ui new file mode 100644 index 000000000..ef66ff32d --- /dev/null +++ b/src/blackgui/components/settingsviewupdatetimes.ui @@ -0,0 +1,196 @@ + + + CSettingsViewUpdateTimes + + + + 0 + 0 + 184 + 159 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + View update times + + + + + + Aircraft update time (5-30s) + + + Aircraft + + + + + + + + 0 + 0 + + + + 5 + + + 30 + + + 5 + + + 5 + + + 10 + + + Qt::Horizontal + + + + + + + ATC update time (5-30s) + + + ATC + + + + + + + + 0 + 0 + + + + 5 + + + 30 + + + 5 + + + 5 + + + 10 + + + Qt::Horizontal + + + + + + + User update time (5-30s) + + + User + + + + + + + + 0 + 0 + + + + 5 + + + 30 + + + 5 + + + 5 + + + 10 + + + Qt::Horizontal + + + + + + + Rendering update time (5-30s) + + + Rendering + + + + + + + + 0 + 0 + + + + 5 + + + 30 + + + 5 + + + 5 + + + 10 + + + Qt::Horizontal + + + + + lbl_UserUpdateTime + lbl_AtcUpdateTime + lbl_AircraftUpdateTime + hs_UserUpdateTime + hs_AtcUpdateTime + hs_AircraftUpdateTime + lbl_RenderingUpdateTime + hs_RenderingUpdateTime + + + + + + + diff --git a/src/blackgui/registermetadata.cpp b/src/blackgui/registermetadata.cpp index d113e2eeb..2cf84bba2 100644 --- a/src/blackgui/registermetadata.cpp +++ b/src/blackgui/registermetadata.cpp @@ -10,6 +10,7 @@ #include "blackgui/registermetadata.h" #include "blackgui/settings/dockwidgetsettings.h" #include "blackgui/settings/navigatorsettings.h" +#include "blackgui/settings/viewupdatesettings.h" #include "blackgui/components/registermetadatacomponents.h" namespace BlackGui @@ -18,6 +19,7 @@ namespace BlackGui { BlackGui::Settings::CDockWidgetSettings::registerMetadata(); BlackGui::Settings::CNavigatorSettings::registerMetadata(); + BlackGui::Settings::CViewUpdateSettings::registerMetadata(); BlackGui::Components::registerMetadata(); } } diff --git a/src/blackgui/settings/viewupdatesettings.cpp b/src/blackgui/settings/viewupdatesettings.cpp new file mode 100644 index 000000000..41102cf75 --- /dev/null +++ b/src/blackgui/settings/viewupdatesettings.cpp @@ -0,0 +1,97 @@ +/* Copyright (C) 2016 + * swift project community / contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "viewupdatesettings.h" +#include "blackgui/guiutility.h" +#include "blackmisc/stringutils.h" +#include + +using namespace BlackMisc; +using namespace BlackMisc::PhysicalQuantities; +using namespace BlackGui; + +namespace BlackGui +{ + namespace Settings + { + CViewUpdateSettings::CViewUpdateSettings() + { } + + void CViewUpdateSettings::reset() + { + this->m_updateAircraft = CTime(5.0, CTimeUnit::s()); + this->m_updateAtc = CTime(5.0, CTimeUnit::s()); + this->m_updateRendering = CTime(5.0, CTimeUnit::s()); + this->m_updateUser = CTime(5.0, CTimeUnit::s()); + } + + bool CViewUpdateSettings::isValid() const + { + // too fast updates cause CPU overload + static const CTime min(5.0, CTimeUnit::s()); + return + this->m_updateAircraft >= min && + this->m_updateAtc >= min && + this->m_updateRendering >= min && + this->m_updateUser >= min; + } + + QString CViewUpdateSettings::convertToQString(bool i18n) const + { + Q_UNUSED(i18n); + const QString s("Atc: %1 Aircraft: %2 User: %3 Rendering %4"); + return s.arg(m_updateAtc.valueRounded(CTimeUnit::s(), 2)).arg(m_updateAircraft.valueRounded(CTimeUnit::s(), 2)) + .arg(m_updateUser.valueRounded(CTimeUnit::s(), 2)).arg(m_updateRendering.valueRounded(CTimeUnit::s(), 2)); + } + + CVariant CViewUpdateSettings::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexAircraft: + return CVariant::fromValue(this->m_updateAircraft); + case IndexAtc: + return CVariant::fromValue(this->m_updateAtc); + case IndexRendering: + return CVariant::fromValue(this->m_updateRendering); + case IndexUser: + return CVariant::fromValue(this->m_updateUser); + default: + return CValueObject::propertyByIndex(index); + } + } + + void CViewUpdateSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexAircraft: + this->m_updateAircraft = variant.value(); + break; + case IndexAtc: + this->m_updateAtc = variant.value(); + break; + case IndexRendering: + this->m_updateRendering = variant.value(); + break; + case IndexUser: + this->m_updateUser = variant.value(); + break; + default: + CValueObject::setPropertyByIndex(index, variant); + break; + } + } + } // ns +} // ns diff --git a/src/blackgui/settings/viewupdatesettings.h b/src/blackgui/settings/viewupdatesettings.h new file mode 100644 index 000000000..a5f951622 --- /dev/null +++ b/src/blackgui/settings/viewupdatesettings.h @@ -0,0 +1,116 @@ +/* Copyright (C) 2016 + * swift project community / contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_SETTINGS_VIEWUPDATESETTINGS_H +#define BLACKGUI_SETTINGS_VIEWUPDATESETTINGS_H + +#include "blackgui/blackguiexport.h" +#include "blackmisc/settingscache.h" +#include "blackmisc/pq/time.h" +#include "blackmisc/propertyindex.h" +#include "blackmisc/variant.h" + +#include +#include +#include + +namespace BlackGui +{ + namespace Settings + { + //! Settings about view update rates + class BLACKGUI_EXPORT CViewUpdateSettings : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexAtc = BlackMisc::CPropertyIndex::GlobalIndexCViewUpdateSettings, + IndexAircraft, + IndexRendering, + IndexUser + }; + + //! Default constructor + CViewUpdateSettings(); + + //! Reset to defaults + void reset(); + + //! Get time + const BlackMisc::PhysicalQuantities::CTime &getAtcUpdateTime() const { return m_updateAtc; } + + //! Set time + void setAtcUpdateTime(const BlackMisc::PhysicalQuantities::CTime &time) { this->m_updateAtc = time; } + + //! Get time + const BlackMisc::PhysicalQuantities::CTime &getAircraftUpdateTime() const { return m_updateAircraft; } + + //! Set time + void setAircraftUpdateTime(const BlackMisc::PhysicalQuantities::CTime &time) { this->m_updateAircraft = time; } + + //! Get time + const BlackMisc::PhysicalQuantities::CTime &getUserUpdateTime() const { return m_updateUser; } + + //! Set time + void setUserUpdateTime(const BlackMisc::PhysicalQuantities::CTime &time) { this->m_updateUser = time; } + + //! Get time + const BlackMisc::PhysicalQuantities::CTime &getRenderingUpdateTime() const { return m_updateRendering; } + + //! Set time + void setRenderingUpdateTime(const BlackMisc::PhysicalQuantities::CTime &time) { this->m_updateRendering = time; } + + //! Valid? + bool isValid() const; + + //! \copydoc BlackMisc::Mixin::String::toQString + QString convertToQString(bool i18n = false) const; + + //! \copydoc BlackMisc::Mixin::Index::propertyByIndex + BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; + + //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex + void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); + + private: + BlackMisc::PhysicalQuantities::CTime m_updateAtc; + BlackMisc::PhysicalQuantities::CTime m_updateAircraft; + BlackMisc::PhysicalQuantities::CTime m_updateRendering; + BlackMisc::PhysicalQuantities::CTime m_updateUser; + + BLACK_METACLASS( + CViewUpdateSettings, + BLACK_METAMEMBER(updateAtc), + BLACK_METAMEMBER(updateAircraft), + BLACK_METAMEMBER(updateRendering), + BLACK_METAMEMBER(updateUser) + ); + }; + + //! Trait for settings about update rates + struct TViewUpdateSettings : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "guiviewupdatesettings"; } + + //! Validator function. + static bool isValid(const CViewUpdateSettings &settings) { return settings.isValid(); } + }; + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackGui::Settings::CViewUpdateSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) + +#endif // guard diff --git a/src/blackmisc/pq/time.cpp b/src/blackmisc/pq/time.cpp index 9259f8618..ade5b9699 100644 --- a/src/blackmisc/pq/time.cpp +++ b/src/blackmisc/pq/time.cpp @@ -131,6 +131,12 @@ namespace BlackMisc return static_cast(ms); } + int CTime::toSeconds() const + { + double ms = this->valueRounded(CTimeUnit::s(), 0); + return static_cast(ms); + } + QString CTime::formattedHrsMin() const { QList parts = getHrsMinSecParts(); @@ -146,5 +152,5 @@ namespace BlackMisc return fs; } } - } -} + } // ns +} // ns diff --git a/src/blackmisc/pq/time.h b/src/blackmisc/pq/time.h index 17ef055f7..0a853fdc6 100644 --- a/src/blackmisc/pq/time.h +++ b/src/blackmisc/pq/time.h @@ -73,12 +73,14 @@ namespace BlackMisc //! Convenience functions when used with timers etc. int toMs() const; + //! Convenience functions when used with timers etc. + int toSeconds() const; + //! Formatted as hh:mm QString formattedHrsMin() const; }; - - } -} + } // ns +} // ns Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTime) diff --git a/src/blackmisc/propertyindex.h b/src/blackmisc/propertyindex.h index 13d15acfb..ee2218845 100644 --- a/src/blackmisc/propertyindex.h +++ b/src/blackmisc/propertyindex.h @@ -139,6 +139,7 @@ namespace BlackMisc GlobalIndexCDockWidgetSettings = 14200, GlobalIndexCNavigatorSettings = 14300, GlobalIndexCSettingsReaders = 14400, + GlobalIndexCViewUpdateSettings = 14500, GloablIndexInterpolatorSetup = 15000, GlobalIndexLineNumber = 20000, //!< pseudo index for line numbers };