Add enhanced relative time to variable tab cells

This commit is contained in:
Przemek Pawlas 2024-09-18 09:46:39 +02:00 committed by WarmUpTill
parent 57d78a996a
commit 6ccbaad41c
15 changed files with 93 additions and 23 deletions

View File

@ -255,6 +255,8 @@ target_sources(
lib/utils/tab-helpers.hpp
lib/utils/temp-variable.cpp
lib/utils/temp-variable.hpp
lib/utils/time-helpers.cpp
lib/utils/time-helpers.hpp
lib/utils/ui-helpers.cpp
lib/utils/ui-helpers.hpp
lib/utils/utility.cpp

View File

@ -895,7 +895,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>Dies scheint das erste
AdvSceneSwitcher.deprecatedTabWarning="Die Entwicklung für dieses Tab wurde gestoppt!\nBitte stattdessen zur Verwendung des Makros-Tab übergehen.\nDieser Hinweis kann im Allgemein-Tab deaktiviert werden."
AdvSceneSwitcher.unit.milliseconds="Millisekunden"
AdvSceneSwitcher.unit.secends="Sekunden"
AdvSceneSwitcher.unit.seconds="Sekunden"
AdvSceneSwitcher.unit.minutes="Minuten"
AdvSceneSwitcher.unit.hours="Stunden"
AdvSceneSwitcher.duration.condition.none="Kein Dauer-Modifikator"

View File

@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="Value"
AdvSceneSwitcher.variableTab.saveLoadBehavior.header="Save/Load behavior"
AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="Default to \"%1\""
AdvSceneSwitcher.variableTab.lastUsed.header="Last used"
AdvSceneSwitcher.variableTab.lastUsed.text="%1 seconds ago"
AdvSceneSwitcher.variableTab.lastUsed.text.never="Never"
AdvSceneSwitcher.variableTab.lastChanged.header="Last changed"
AdvSceneSwitcher.variableTab.lastChanged.text="%1 seconds ago"
AdvSceneSwitcher.variableTab.lastChanged.text.none="No change since launch"
AdvSceneSwitcher.variableTab.lastChanged.tooltip="Times changed: %1\n\nPrevious value: %2"
@ -1926,15 +1924,21 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>This seems to be the fi
AdvSceneSwitcher.deprecatedTabWarning="Development for this tab stopped!\nPlease consider transitioning to using Macros instead.\nThis hint can be disabled on the General tab."
AdvSceneSwitcher.unit.milliseconds="milliseconds"
AdvSceneSwitcher.unit.secends="seconds"
AdvSceneSwitcher.unit.seconds="seconds"
AdvSceneSwitcher.unit.minutes="minutes"
AdvSceneSwitcher.unit.hours="hours"
AdvSceneSwitcher.unit.days="days"
AdvSceneSwitcher.unit.weeks="weeks"
AdvSceneSwitcher.unit.months="months"
AdvSceneSwitcher.unit.years="years"
AdvSceneSwitcher.duration.condition.none="No duration modifier"
AdvSceneSwitcher.duration.condition.more="For at least"
AdvSceneSwitcher.duration.condition.equal="For exactly"
AdvSceneSwitcher.duration.condition.less="For at most"
AdvSceneSwitcher.duration.condition.within="Within the last"
AdvSceneSwitcher.time.relative="%1 %2 ago"
AdvSceneSwitcher.audio.monitor.none="Monitor Off"
AdvSceneSwitcher.audio.monitor.monitorOnly="Monitor Only (mute output)"
AdvSceneSwitcher.audio.monitor.both="Monitor and Output"

View File

@ -740,7 +740,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>Esta parece ser la prim
AdvSceneSwitcher.deprecatedTabWarning="¡Se detuvo el desarrollo de esta pestaña!\nConsidere cambiar a macros en su lugar.\nEsta sugerencia se puede desactivar en la pestaña General".
AdvSceneSwitcher.unit.milliseconds="milisegundos"
AdvSceneSwitcher.unit.secends="segundos"
AdvSceneSwitcher.unit.seconds="segundos"
AdvSceneSwitcher.unit.minutes="minutos"
AdvSceneSwitcher.unit.hours="horas"
AdvSceneSwitcher.duration.condition.none="Sin límite de tiempo"

View File

@ -1182,7 +1182,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>Il semble que ce soit l
AdvSceneSwitcher.deprecatedTabWarning="Le développement de cet onglet est terminé !\nVeuillez envisager de passer à l'utilisation des Macros à la place.\nCette astuce peut être désactivée dans l'onglet Général."
AdvSceneSwitcher.unit.milliseconds="millisecondes"
AdvSceneSwitcher.unit.secends="secondes"
AdvSceneSwitcher.unit.seconds="secondes"
AdvSceneSwitcher.unit.minutes="minutes"
AdvSceneSwitcher.unit.hours="heures"
AdvSceneSwitcher.duration.condition.none="Aucun modificateur de durée"

View File

@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="値"
AdvSceneSwitcher.variableTab.saveLoadBehavior.header="保存・読み込みの動作"
AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="デフォルト\"%1\""
AdvSceneSwitcher.variableTab.lastUsed.header="最後に使用された"
AdvSceneSwitcher.variableTab.lastUsed.text="%1 秒前"
; AdvSceneSwitcher.variableTab.lastUsed.text.never="Never"
AdvSceneSwitcher.variableTab.lastChanged.header="最終変更"
AdvSceneSwitcher.variableTab.lastChanged.text="%1 秒前"
AdvSceneSwitcher.variableTab.lastChanged.text.none="起動以来変更なし"
AdvSceneSwitcher.variableTab.lastChanged.tooltip="変更された時間: %1\n\n以前の値: %2"
@ -1920,7 +1918,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>高機能シーンス
AdvSceneSwitcher.deprecatedTabWarning="このタブの開発は停止しました!\n代わりにマクロの使用に移行することを検討してください。\nこのヒントは [全般] タブで無効にすることができます。"
AdvSceneSwitcher.unit.milliseconds="ミリ秒"
AdvSceneSwitcher.unit.secends="秒"
AdvSceneSwitcher.unit.seconds="秒"
AdvSceneSwitcher.unit.minutes="分"
AdvSceneSwitcher.unit.hours="時間"
AdvSceneSwitcher.duration.condition.none="期間修飾子なし"

View File

@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="Valor"
AdvSceneSwitcher.variableTab.saveLoadBehavior.header="Comportamento de Salvar/Carregar"
AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="Padrão para \"%1\""
AdvSceneSwitcher.variableTab.lastUsed.header="Último uso"
AdvSceneSwitcher.variableTab.lastUsed.text="%1 segundos atrás"
AdvSceneSwitcher.variableTab.lastUsed.text.never="Nunca"
AdvSceneSwitcher.variableTab.lastChanged.header="Última alteração"
AdvSceneSwitcher.variableTab.lastChanged.text="%1 segundos atrás"
AdvSceneSwitcher.variableTab.lastChanged.text.none="Sem alterações desde o lançamento"
AdvSceneSwitcher.variableTab.lastChanged.tooltip="Vezes alteradas: %1\n\nValor anterior: %2"
@ -1888,7 +1886,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>Parece que esta é a pr
AdvSceneSwitcher.deprecatedTabWarning="Desenvolvimento para esta aba interrompido!\nPor favor, considere a transição para o uso de Macros em vez disso.\nEsta dica pode ser desativada na aba Geral."
AdvSceneSwitcher.unit.milliseconds="milissegundos"
AdvSceneSwitcher.unit.secends="segundos"
AdvSceneSwitcher.unit.seconds="segundos"
AdvSceneSwitcher.unit.minutes="minutos"
AdvSceneSwitcher.unit.hours="horas"
AdvSceneSwitcher.duration.condition.none="Nenhum modificador de duração"

View File

@ -399,6 +399,6 @@ AdvSceneSwitcher.status.active="Активный"
AdvSceneSwitcher.status.inactive="Неактивен"
AdvSceneSwitcher.unit.milliseconds="миллисекунды"
AdvSceneSwitcher.unit.secends="секунды"
AdvSceneSwitcher.unit.seconds="секунды"
AdvSceneSwitcher.unit.minutes="минуты"
AdvSceneSwitcher.unit.hours="часы"

View File

@ -645,7 +645,7 @@ AdvSceneSwitcher.stopped="Eklenti durdu"
AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>Gelişmiş Sahne Değiştirici ilk kez başlatılıyor gibi görünüyor.<br>Lütfen <a href=\"https://github.com/ adresine bir göz atın. WarmUpTill/SceneSwitcher/wiki\"><span style=\" text-decoration: underline; color:#268bd2;\">Wiki</span></a> için kılavuzlar ve örnekler listesi.<br>Yapmayın. eklentinin <a href=\"https://obsproject.com/forum/threads/advanced-scene-switcher.48264\"><span style=\" text-decoration: underline; color:# sayfasında soru sormaktan çekinmeyin OBS forumlarında 268bd2;\">konu</span></a>!</p></body></html>"
AdvSceneSwitcher.unit.milliseconds="millisaniye"
AdvSceneSwitcher.unit.secends="saniye"
AdvSceneSwitcher.unit.seconds="saniye"
AdvSceneSwitcher.unit.minutes="dakika"
AdvSceneSwitcher.unit.hours="saat"
AdvSceneSwitcher.duration.condition.none="Zaman kısıtlaması yok"

View File

@ -1048,7 +1048,7 @@ AdvSceneSwitcher.firstBootMessage="<html><head/><body><p>这似乎是第一次
AdvSceneSwitcher.deprecatedTabWarning="此选项卡的开发已停止!请考虑转换为使用宏来代替。\n可以在“常规”选项卡上禁用此提示."
AdvSceneSwitcher.unit.milliseconds="毫秒"
AdvSceneSwitcher.unit.secends="秒"
AdvSceneSwitcher.unit.seconds="秒"
AdvSceneSwitcher.unit.minutes="分钟"
AdvSceneSwitcher.unit.hours="小时"
AdvSceneSwitcher.duration.condition.none="没有时间限制"

View File

@ -8,7 +8,7 @@ namespace advss {
static void populateUnits(QComboBox *list)
{
list->addItem(obs_module_text("AdvSceneSwitcher.unit.secends"));
list->addItem(obs_module_text("AdvSceneSwitcher.unit.seconds"));
list->addItem(obs_module_text("AdvSceneSwitcher.unit.minutes"));
list->addItem(obs_module_text("AdvSceneSwitcher.unit.hours"));
}

View File

@ -115,7 +115,7 @@ static std::string durationUnitToString(Duration::Unit u)
{
switch (u) {
case Duration::Unit::SECONDS:
return obs_module_text("AdvSceneSwitcher.unit.secends");
return obs_module_text("AdvSceneSwitcher.unit.seconds");
case Duration::Unit::MINUTES:
return obs_module_text("AdvSceneSwitcher.unit.minutes");
case Duration::Unit::HOURS:

View File

@ -0,0 +1,63 @@
#include "time-helpers.hpp"
#include "obs-module-helper.hpp"
namespace advss {
static QString combineRelativeTimeParts(const double unitCount,
const char *unitName)
{
QString combined = obs_module_text("AdvSceneSwitcher.time.relative");
return combined.arg(QString::number(unitCount, 'g', 2)).arg(unitName);
}
QString FormatRelativeTime(const double seconds)
{
// 365.2425 days
double divided = seconds / 31556952;
if (divided >= 1) {
return combineRelativeTimeParts(
divided,
obs_module_text("AdvSceneSwitcher.unit.years"));
}
// 30.436875 days
divided = seconds / 2629746;
if (divided >= 1) {
return combineRelativeTimeParts(
divided,
obs_module_text("AdvSceneSwitcher.unit.months"));
}
divided = seconds / 604800;
if (divided >= 1) {
return combineRelativeTimeParts(
divided,
obs_module_text("AdvSceneSwitcher.unit.weeks"));
}
divided = seconds / 86400;
if (divided >= 1) {
return combineRelativeTimeParts(
divided, obs_module_text("AdvSceneSwitcher.unit.days"));
}
divided = seconds / 3600;
if (divided >= 1) {
return combineRelativeTimeParts(
divided,
obs_module_text("AdvSceneSwitcher.unit.hours"));
}
divided = seconds / 60;
if (divided >= 1) {
return combineRelativeTimeParts(
divided,
obs_module_text("AdvSceneSwitcher.unit.minutes"));
}
return combineRelativeTimeParts(
seconds, obs_module_text("AdvSceneSwitcher.unit.seconds"));
}
} // namespace advss

View File

@ -0,0 +1,8 @@
#pragma once
#include <QString>
namespace advss {
QString FormatRelativeTime(const double seconds);
} // namespace advss

View File

@ -4,6 +4,7 @@
#include "plugin-state-helpers.hpp"
#include "sync-helpers.hpp"
#include "tab-helpers.hpp"
#include "time-helpers.hpp"
#include "ui-helpers.hpp"
#include "variable.hpp"
@ -93,9 +94,7 @@ static QString formatLastUsedText(Variable *variable)
"AdvSceneSwitcher.variableTab.lastUsed.text.never");
}
QString text =
obs_module_text("AdvSceneSwitcher.variableTab.lastUsed.text");
return text.arg(QString::number(*lastUsed));
return FormatRelativeTime(*lastUsed);
}
static QString formatLastChangedText(Variable *variable)
@ -106,9 +105,7 @@ static QString formatLastChangedText(Variable *variable)
"AdvSceneSwitcher.variableTab.lastChanged.text.none");
}
QString text = obs_module_text(
"AdvSceneSwitcher.variableTab.lastChanged.text");
return text.arg(QString::number(*lastChanged));
return FormatRelativeTime(*lastChanged);
}
static QString formatLastChangedTooltip(Variable *variable)