From a09a381c9cf78f2659f59187b3995b336e2573e2 Mon Sep 17 00:00:00 2001 From: Przemek Pawlas <3606072+Destroy666x@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:56:19 +0200 Subject: [PATCH] Add more duration units --- lib/utils/duration-control.cpp | 31 +++++++++------------------ lib/utils/duration.cpp | 39 ++++++++++++++++++++++------------ lib/utils/duration.hpp | 5 +++++ 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/lib/utils/duration-control.cpp b/lib/utils/duration-control.cpp index 3f9d1fd5..6b924034 100644 --- a/lib/utils/duration-control.cpp +++ b/lib/utils/duration-control.cpp @@ -8,9 +8,13 @@ namespace advss { static void populateUnits(QComboBox *list) { - list->addItem(obs_module_text("AdvSceneSwitcher.unit.seconds")); - list->addItem(obs_module_text("AdvSceneSwitcher.unit.minutes")); - list->addItem(obs_module_text("AdvSceneSwitcher.unit.hours")); + list->addItems({obs_module_text("AdvSceneSwitcher.unit.seconds"), + obs_module_text("AdvSceneSwitcher.unit.minutes"), + obs_module_text("AdvSceneSwitcher.unit.hours"), + obs_module_text("AdvSceneSwitcher.unit.days"), + obs_module_text("AdvSceneSwitcher.unit.weeks"), + obs_module_text("AdvSceneSwitcher.unit.months"), + obs_module_text("AdvSceneSwitcher.unit.years")}); } DurationSelection::DurationSelection(QWidget *parent, bool showUnitSelection, @@ -57,27 +61,12 @@ void DurationSelection::_DurationChanged(const NumberVariable &value) emit DurationChanged(_current); } -static int durationUnitToMultiplier(Duration::Unit u) -{ - switch (u) { - case Duration::Unit::SECONDS: - return 1; - case Duration::Unit::MINUTES: - return 60; - case Duration::Unit::HOURS: - return 3600; - default: - break; - } - - return 0; -} - void DurationSelection::_UnitChanged(int idx) { Duration::Unit unit = static_cast(idx); - double prevMultiplier = durationUnitToMultiplier(_current._unit); - double newMultiplier = durationUnitToMultiplier(unit); + double prevMultiplier = + Duration::ConvertUnitToMultiplier(_current._unit); + double newMultiplier = Duration::ConvertUnitToMultiplier(unit); _current._unit = unit; _duration->SetFixedValue(_duration->Value() * (prevMultiplier / newMultiplier)); diff --git a/lib/utils/duration.cpp b/lib/utils/duration.cpp index a6365ca7..35f2ad0d 100644 --- a/lib/utils/duration.cpp +++ b/lib/utils/duration.cpp @@ -20,8 +20,6 @@ void Duration::Save(obs_data_t *obj, const char *name) const obs_data_release(data); } -static int durationUnitToMultiplier(Duration::Unit u); - void Duration::Load(obs_data_t *obj, const char *name) { auto data = obs_data_get_obj(obj, name); @@ -48,7 +46,7 @@ void Duration::Load(obs_data_t *obj, const char *name) _unit = Duration::Unit::SECONDS; } - _value = _value / durationUnitToMultiplier(_unit); + _value = _value / ConvertUnitToMultiplier(_unit); obs_data_release(data); return; @@ -77,7 +75,7 @@ bool Duration::IsReset() const double Duration::Seconds() const { - return _value.GetValue() * durationUnitToMultiplier(_unit); + return _value.GetValue() * ConvertUnitToMultiplier(_unit); } double Duration::Milliseconds() const @@ -120,6 +118,14 @@ static std::string durationUnitToString(Duration::Unit u) return obs_module_text("AdvSceneSwitcher.unit.minutes"); case Duration::Unit::HOURS: return obs_module_text("AdvSceneSwitcher.unit.hours"); + case Duration::Unit::DAYS: + return obs_module_text("AdvSceneSwitcher.unit.days"); + case Duration::Unit::WEEKS: + return obs_module_text("AdvSceneSwitcher.unit.weeks"); + case Duration::Unit::MONTHS: + return obs_module_text("AdvSceneSwitcher.unit.months"); + case Duration::Unit::YEARS: + return obs_module_text("AdvSceneSwitcher.unit.years"); default: break; } @@ -138,18 +144,23 @@ std::string Duration::ToString() const return ss.str(); } -// TODO: Remove the code below -// Only used for backwards compatibility - -static int durationUnitToMultiplier(Duration::Unit u) +int Duration::ConvertUnitToMultiplier(Unit unit) { - switch (u) { - case Duration::Unit::SECONDS: + switch (unit) { + case Unit::SECONDS: return 1; - case Duration::Unit::MINUTES: + case Unit::MINUTES: return 60; - case Duration::Unit::HOURS: + case Unit::HOURS: return 3600; + case Unit::DAYS: + return 86400; + case Unit::WEEKS: + return 604800; + case Unit::MONTHS: + return 2629746; + case Unit::YEARS: + return 31556952; default: break; } @@ -159,8 +170,8 @@ static int durationUnitToMultiplier(Duration::Unit u) void Duration::SetUnit(Unit u) { - double prevMultiplier = durationUnitToMultiplier(_unit); - double newMultiplier = durationUnitToMultiplier(u); + double prevMultiplier = ConvertUnitToMultiplier(_unit); + double newMultiplier = ConvertUnitToMultiplier(u); _unit = u; _value = _value * (prevMultiplier / newMultiplier); } diff --git a/lib/utils/duration.hpp b/lib/utils/duration.hpp index b4263f64..a465eb97 100644 --- a/lib/utils/duration.hpp +++ b/lib/utils/duration.hpp @@ -27,8 +27,13 @@ public: SECONDS, MINUTES, HOURS, + DAYS, + WEEKS, + MONTHS, + YEARS, }; EXPORT Unit GetUnit() const { return _unit; } + EXPORT static int ConvertUnitToMultiplier(Unit unit); // TODO: Remove // Only use this function if you intend to convert old settings formats