115 lines
3.3 KiB
C++
Executable File
115 lines
3.3 KiB
C++
Executable File
#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);
|
|
}
|
|
|
|
}
|