2018-11-11 21:03:26 -05:00
|
|
|
#ifndef DATE_TIME_AS_SECS_SINCE_EPOCH_DELEGATE_HPP_
|
|
|
|
#define DATE_TIME_AS_SECS_SINCE_EPOCH_DELEGATE_HPP_
|
2018-11-11 21:00:35 -05:00
|
|
|
|
|
|
|
#include <QStyledItemDelegate>
|
|
|
|
#include <QVariant>
|
|
|
|
#include <QDateTime>
|
|
|
|
#include <QAbstractItemModel>
|
|
|
|
#include <QDateTimeEdit>
|
|
|
|
|
2018-11-11 21:03:26 -05:00
|
|
|
class DateTimeAsSecsSinceEpochDelegate final
|
2018-11-11 21:00:35 -05:00
|
|
|
: public QStyledItemDelegate
|
|
|
|
{
|
|
|
|
public:
|
2018-11-11 21:03:26 -05:00
|
|
|
DateTimeAsSecsSinceEpochDelegate (QObject * parent = nullptr)
|
2018-11-11 21:00:35 -05:00
|
|
|
: QStyledItemDelegate {parent}
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
static QVariant to_secs_since_epoch (QDateTime const& date_time)
|
|
|
|
{
|
|
|
|
return date_time.toMSecsSinceEpoch () / 1000ull;
|
|
|
|
}
|
|
|
|
|
|
|
|
static QDateTime to_date_time (QModelIndex const& index, int role = Qt::DisplayRole)
|
|
|
|
{
|
|
|
|
return to_date_time (index.model ()->data (index, role));
|
|
|
|
}
|
|
|
|
|
|
|
|
static QDateTime to_date_time (QVariant const& value)
|
|
|
|
{
|
|
|
|
return QDateTime::fromMSecsSinceEpoch (value.toULongLong () * 1000ull);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString displayText (QVariant const& value, QLocale const& locale) const override
|
|
|
|
{
|
|
|
|
return locale.toString (to_date_time (value), QLocale::ShortFormat);
|
|
|
|
}
|
|
|
|
|
|
|
|
QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const& /*option*/, QModelIndex const& /*index*/) const override
|
|
|
|
{
|
|
|
|
return new QDateTimeEdit {parent};
|
|
|
|
}
|
|
|
|
|
|
|
|
void setEditorData (QWidget * editor, QModelIndex const& index) const override
|
|
|
|
{
|
|
|
|
static_cast<QDateTimeEdit *> (editor)->setDateTime (to_date_time (index, Qt::EditRole));
|
|
|
|
}
|
|
|
|
|
|
|
|
void setModelData (QWidget * editor, QAbstractItemModel * model, QModelIndex const& index) const override
|
|
|
|
{
|
|
|
|
model->setData (index, to_secs_since_epoch (static_cast<QDateTimeEdit *> (editor)->dateTime ()));
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateEditorGeometry (QWidget * editor, QStyleOptionViewItem const& option, QModelIndex const& /*index*/) const override
|
|
|
|
{
|
|
|
|
editor->setGeometry (option.rect);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|