Files
qt6-migration-pipeline/Lts/Common/LtsTimeline/timeline_utils.cpp
T

344 lines
8.5 KiB
C++
Executable File

#include "timeline_utils.h"
#include <ngltools/ngltools_dtg.h>
#include <LtsTimeline/ltstimeline_export.h>
#include <QApplication>
#include <QDateTime>
namespace LtsTimeline
{
namespace DateTime
{
int numberOfDateTimeFormats()
{
return 6;
}
QString toString(qint64 time, Format format)
{
switch (format)
{
case Format::DTG:
return DTG::toStringMSec(time, DTG::DisplayFormat::Long);
case Format::ISODate:
return QDateTime::fromMSecsSinceEpoch(time).toString(Qt::ISODate);
case Format::Standard:
return QDateTime::fromMSecsSinceEpoch(time).toString(QStringLiteral("dd.MM.yyyy hh:mm:ss"));
case Format::DTGShort:
{
QDateTime dateTime = QDateTime::fromMSecsSinceEpoch(time).toUTC().addSecs(DTG::timezone2Hours(DTG::timezone()) * 3600);
return dateTime.toString(QStringLiteral("hhmmss ")) + QStringLiteral("%1").arg(DTG::timezone());
}
case Format::DTGVeryShort:
{
QDateTime dateTime = QDateTime::fromMSecsSinceEpoch(time).toUTC().addSecs(DTG::timezone2Hours(DTG::timezone()) * 3600);
return dateTime.toString(QStringLiteral("hhmm"));
}
case Format::TimeOnly:
return QTime::fromMSecsSinceStartOfDay(time).toString();
}
return {};
}
}
namespace Zoom
{
int numberOfZoomFactors()
{
return 15;
}
Factor LTSTIMELINE_EXPORT increment(Factor factor)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return ZoomFactor::ThirtySeconds;
case ZoomFactor::ThirtySeconds:
return ZoomFactor::SixtySeconds;
case ZoomFactor::SixtySeconds:
return ZoomFactor::TwoMinutes;
case ZoomFactor::TwoMinutes:
return ZoomFactor::ThreeMinutes;
case ZoomFactor::ThreeMinutes:
return ZoomFactor::FiveMinutes;
case ZoomFactor::FiveMinutes:
return ZoomFactor::TenMinutes;
case ZoomFactor::TenMinutes:
return ZoomFactor::FifteenMinutes;
case ZoomFactor::FifteenMinutes:
return ZoomFactor::ThirtyMinutes;
case ZoomFactor::ThirtyMinutes:
return ZoomFactor::SixtyMinutes;
case ZoomFactor::SixtyMinutes:
return ZoomFactor::TwoHours;
case ZoomFactor::TwoHours:
return ZoomFactor::FourHours;
case ZoomFactor::FourHours:
return ZoomFactor::EightHours;
case ZoomFactor::EightHours:
return ZoomFactor::TwelveHours;
case ZoomFactor::TwelveHours:
return ZoomFactor::OneDay;
case ZoomFactor::OneDay:
return ZoomFactor::OneDay;
}
return factor;
}
Factor LTSTIMELINE_EXPORT decrement(Factor factor)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return ZoomFactor::FifteenSeconds;
case ZoomFactor::ThirtySeconds:
return ZoomFactor::FifteenSeconds;
case ZoomFactor::SixtySeconds:
return ZoomFactor::ThirtySeconds;
case ZoomFactor::TwoMinutes:
return ZoomFactor::SixtySeconds;
case ZoomFactor::ThreeMinutes:
return ZoomFactor::TwoMinutes;
case ZoomFactor::FiveMinutes:
return ZoomFactor::ThreeMinutes;
case ZoomFactor::TenMinutes:
return ZoomFactor::FiveMinutes;
case ZoomFactor::FifteenMinutes:
return ZoomFactor::TenMinutes;
case ZoomFactor::ThirtyMinutes:
return ZoomFactor::FifteenMinutes;
case ZoomFactor::SixtyMinutes:
return ZoomFactor::ThirtyMinutes;
case ZoomFactor::TwoHours:
return ZoomFactor::SixtyMinutes;
case ZoomFactor::FourHours:
return ZoomFactor::TwoHours;
case ZoomFactor::EightHours:
return ZoomFactor::FourHours;
case ZoomFactor::TwelveHours:
return ZoomFactor::EightHours;
case ZoomFactor::OneDay:
return ZoomFactor::TwelveHours;
}
return factor;
}
Factor ceil(int value)
{
if (value >= Factor::OneDay)
return Factor::OneDay;
Factor ret = Factor::FifteenSeconds;
while (static_cast<int>(ret) < value)
{
ret = increment(ret);
}
return ret;
}
Factor floor(int value)
{
if (value <= Factor::FifteenSeconds)
return Factor::FifteenSeconds;
Factor ret = Factor::OneDay;
while (static_cast<int>(ret) > value)
{
ret = decrement(ret);
}
return ret;
}
QVector<Factor> availableZoomFactors(Factor min, Factor max)
{
if (min > max)
return {};
ZoomFactors ret;
ret.reserve(numberOfZoomFactors());
Factor factor = min;
do
{
ret.append(factor);
if (factor == max)
break;
factor = increment(factor);
} while (increment(factor) > factor);
return ret;
}
QString toString(ZoomFactor factor, bool useShort)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return useShort ? QApplication::tr("15 sec") : QApplication::tr("15 Seconds");
case ZoomFactor::ThirtySeconds:
return useShort ? QApplication::tr("30 sec") : QApplication::tr("30 Seconds");
case ZoomFactor::SixtySeconds:
return useShort ? QApplication::tr("1 min") : QApplication::tr("1 Minute");
case ZoomFactor::TwoMinutes:
return useShort ? QApplication::tr("2 min") : QApplication::tr("2 Minutes");
case ZoomFactor::ThreeMinutes:
return useShort ? QApplication::tr("3 min") : QApplication::tr("3 Minutes");
case ZoomFactor::FiveMinutes:
return useShort ? QApplication::tr("5 min") : QApplication::tr("5 Minutes");
case ZoomFactor::TenMinutes:
return useShort ? QApplication::tr("10 min") : QApplication::tr("10 Minutes");
case ZoomFactor::FifteenMinutes:
return useShort ? QApplication::tr("15 min") : QApplication::tr("15 Minutes");
case ZoomFactor::ThirtyMinutes:
return useShort ? QApplication::tr("30 min") : QApplication::tr("30 Minutes");
case ZoomFactor::SixtyMinutes:
return useShort ? QApplication::tr("1 h") : QApplication::tr("1 Hour");
case ZoomFactor::TwoHours:
return useShort ? QApplication::tr("2 h") : QApplication::tr("2 Hours");
case ZoomFactor::FourHours:
return useShort ? QApplication::tr("4 h") : QApplication::tr("4 Hours");
case ZoomFactor::EightHours:
return useShort ? QApplication::tr("8 h") : QApplication::tr("8 Hours");
case ZoomFactor::TwelveHours:
return useShort ? QApplication::tr("12 h") : QApplication::tr("12 Hours");
case ZoomFactor::OneDay:
return useShort ? QApplication::tr("1 d") : QApplication::tr("1 Day");
}
return useShort ? QApplication::tr("N/A") : QApplication::tr("Unknown");
}
QString toShortString(Factor factor)
{
return toString(factor, true);
}
int majorInterval(ZoomFactor factor)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return 3000;
case ZoomFactor::ThirtySeconds:
return 5000;
case ZoomFactor::SixtySeconds:
return 10000;
case ZoomFactor::TwoMinutes:
return 15000;
case ZoomFactor::ThreeMinutes:
return 30000;
case ZoomFactor::FiveMinutes:
return 60000;
case ZoomFactor::TenMinutes:
return 60000;
case ZoomFactor::FifteenMinutes:
return 180000;
case ZoomFactor::ThirtyMinutes:
return 300000;
case ZoomFactor::SixtyMinutes:
return 600000;
case ZoomFactor::TwoHours:
return 900000;
case ZoomFactor::FourHours:
return 1800000;
case ZoomFactor::EightHours:
return 3600000;
case ZoomFactor::TwelveHours:
return 5400000;
case ZoomFactor::OneDay:
return 7200000;
}
return -1;
}
int mediumInterval(ZoomFactor factor)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return -1;
case ZoomFactor::ThirtySeconds:
return -1;
case ZoomFactor::SixtySeconds:
return 5000;
case ZoomFactor::TwoMinutes:
return 6000;
case ZoomFactor::ThreeMinutes:
return 10000;
case ZoomFactor::FiveMinutes:
return 15000;
case ZoomFactor::TenMinutes:
return 20000;
case ZoomFactor::FifteenMinutes:
return 60000;
case ZoomFactor::ThirtyMinutes:
return 100000;
case ZoomFactor::SixtyMinutes:
return 150000;
case ZoomFactor::TwoHours:
return 300000;
case ZoomFactor::FourHours:
return 600000;
case ZoomFactor::EightHours:
return 900000;
case ZoomFactor::TwelveHours:
return 1800000;
case ZoomFactor::OneDay:
return 2400000;
}
return -1;
}
int minorInterval(ZoomFactor factor)
{
switch (factor)
{
case ZoomFactor::FifteenSeconds:
return 1000;
case ZoomFactor::ThirtySeconds:
return 1000;
case ZoomFactor::SixtySeconds:
return 1000;
case ZoomFactor::TwoMinutes:
return 3000;
case ZoomFactor::ThreeMinutes:
return 5000;
case ZoomFactor::FiveMinutes:
return 5000;
case ZoomFactor::TenMinutes:
return 10000;
case ZoomFactor::FifteenMinutes:
return 20000;
case ZoomFactor::ThirtyMinutes:
return 25000;
case ZoomFactor::SixtyMinutes:
return 50000;
case ZoomFactor::TwoHours:
return 60000;
case ZoomFactor::FourHours:
return 150000;
case ZoomFactor::EightHours:
return 300000;
case ZoomFactor::TwelveHours:
return 600000;
case ZoomFactor::OneDay:
return 800000;
}
return -1;
}
}
}