#include "lts_msec_date_time_edit.h" namespace LtsWidgets { LtsMSecDateTimeEdit::LtsMSecDateTimeEdit(QWidget *parent) : QDateTimeEdit(parent) { setWrapping(true); setDisplayFormat(QLatin1String("dd.MM.yy HH:mm:ss.zzz")); connect(this, &LtsMSecDateTimeEdit::editingFinished, this, &LtsMSecDateTimeEdit::onEditingFinished); } LtsMSecDateTimeEdit::LtsMSecDateTimeEdit(const QDateTime &dt, QWidget *parent) : QDateTimeEdit(dt, parent) { setWrapping(true); setDisplayFormat(QLatin1String("dd.MM.yy HH:mm:ss.zzz")); connect(this, &LtsMSecDateTimeEdit::editingFinished, this, &LtsMSecDateTimeEdit::onEditingFinished); } LtsMSecDateTimeEdit::LtsMSecDateTimeEdit(const QDate &d, QWidget *parent) : QDateTimeEdit(d, parent) { setWrapping(true); setDisplayFormat(QLatin1String("dd.MM.yy HH:mm:ss.zzz")); connect(this, &LtsMSecDateTimeEdit::editingFinished, this, &LtsMSecDateTimeEdit::onEditingFinished); } LtsMSecDateTimeEdit::LtsMSecDateTimeEdit(const QTime &t, QWidget *parent) : QDateTimeEdit(t, parent) { setWrapping(true); setDisplayFormat(QLatin1String("dd.MM.yy HH:mm:ss.zzz")); connect(this, &LtsMSecDateTimeEdit::editingFinished, this, &LtsMSecDateTimeEdit::onEditingFinished); } void LtsMSecDateTimeEdit::stepBy(int steps) { switch (currentSection()) { case QDateTimeEdit::MonthSection: QDateTimeEdit::setDateTime(dateTime().addMonths(steps)); break; case QDateTimeEdit::YearSection: QDateTimeEdit::setDateTime(dateTime().addYears(steps)); break; case QDateTimeEdit::DaySection: QDateTimeEdit::setDateTime(dateTime().addDays(steps)); break; case QDateTimeEdit::HourSection: QDateTimeEdit::setDateTime(dateTime().addSecs(steps * 3600)); break; case QDateTimeEdit::MinuteSection: QDateTimeEdit::setDateTime(dateTime().addSecs(steps * 60)); break; case QDateTimeEdit::SecondSection: QDateTimeEdit::setDateTime(dateTime().addSecs(steps)); break; case QDateTimeEdit::MSecSection: QDateTimeEdit::setDateTime(dateTime().addMSecs(steps * m_msecStepSize)); break; case QDateTimeEdit::NoSection: case QDateTimeEdit::AmPmSection: case QDateTimeEdit::TimeSections_Mask: case QDateTimeEdit::DateSections_Mask: default: break; } } qint64 LtsMSecDateTimeEdit::msecsSinceEpoch() const { return dateTime().toMSecsSinceEpoch() - (m_timezoneHoursOffset * 3600 * 1000); } void LtsMSecDateTimeEdit::setTimezoneHoursOffset(int timezoneHoursOffset) { qint64 b4 = msecsSinceEpoch(); m_timezoneHoursOffset = timezoneHoursOffset; setMsecsSinceEpoch(b4); } void LtsMSecDateTimeEdit::setDateTime(const QDateTime &dateTime) { setMsecsSinceEpoch(QDateTime::fromMSecsSinceEpoch(dateTime.toMSecsSinceEpoch(), Qt::TimeSpec::OffsetFromUTC, m_timezoneHoursOffset * 3600).toMSecsSinceEpoch()); } void LtsMSecDateTimeEdit::setMsecsSinceEpoch(qint64 msecs) { QDateTimeEdit::setDateTime(QDateTime::fromMSecsSinceEpoch(msecs, Qt::TimeSpec::OffsetFromUTC, m_timezoneHoursOffset * 3600)); } int LtsMSecDateTimeEdit::msecStepSize() const { return m_msecStepSize; } void LtsMSecDateTimeEdit::setMsecStepSize(int msecStepSize) { m_msecStepSize = msecStepSize; } void LtsMSecDateTimeEdit::onEditingFinished() { qint64 val = msecsSinceEpoch(); if (val % m_msecStepSize == 0) return; val = (val + (m_msecStepSize/2) ) / m_msecStepSize * m_msecStepSize; setMsecsSinceEpoch(val); } }