#include "timeline_utils.h" #include #include #include #include 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(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(ret) > value) { ret = decrement(ret); } return ret; } QVector 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; } } }