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 137d07c3..c75c7eb8 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); @@ -49,7 +47,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; @@ -78,7 +76,7 @@ bool Duration::IsReset() const double Duration::Seconds() const { - return _value.GetValue() * durationUnitToMultiplier(_unit); + return _value.GetValue() * ConvertUnitToMultiplier(_unit); } double Duration::Milliseconds() const @@ -121,6 +119,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; } @@ -139,18 +145,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; } @@ -160,8 +171,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