344 lines
8.5 KiB
C++
Executable File
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;
|
|
}
|
|
|
|
}
|
|
|
|
}
|