26#include <QCalendarWidget>
28#include <QDateTimeEdit>
29#include <QTextCharFormat>
32#include "moc_qgsdatetimeeditwrapper.cpp"
43 widget->setDateTime( QDateTime::currentDateTime() );
52 mQgsDateTimeEdit = qgsEditor;
57 QDateTimeEdit *qtEditor =
dynamic_cast<QDateTimeEdit *
>( editor );
60 mQDateTimeEdit = qtEditor;
63 if ( !mQDateTimeEdit )
65 QgsDebugError( QStringLiteral(
"Date/time edit widget could not be initialized because provided widget is not a QDateTimeEdit." ) );
71 mQDateTimeEdit->setDisplayFormat( displayFormat );
73 const bool calendar =
config( QStringLiteral(
"calendar_popup" ),
true ).toBool();
74 if ( calendar != mQDateTimeEdit->calendarPopup() )
76 mQDateTimeEdit->setCalendarPopup( calendar );
78 if ( calendar && mQDateTimeEdit->calendarWidget() )
81 QTextCharFormat todayFormat;
82 todayFormat.setBackground( QColor( 160, 180, 200 ) );
83 mQDateTimeEdit->calendarWidget()->setDateTextFormat( QDate::currentDate(), todayFormat );
86 const bool allowNull =
config( QStringLiteral(
"allow_null" ),
true ).toBool();
87 if ( mQgsDateTimeEdit )
89 mQgsDateTimeEdit->setAllowNull( allowNull );
94 "For that the QGIS custom widget QgsDateTimeEdit needs to be used." ),
95 tr(
"field widgets" ) );
98 if ( mQgsDateTimeEdit )
104 connect( mQDateTimeEdit, &QDateTimeEdit::dateTimeChanged,
this, &QgsDateTimeEditWrapper::dateTimeChanged );
110 return mQgsDateTimeEdit || mQDateTimeEdit;
115 if ( mQgsDateTimeEdit )
119void QgsDateTimeEditWrapper::dateTimeChanged(
const QDateTime &dateTime )
121 switch (
field().type() )
123 case QMetaType::Type::QDateTime:
129 case QMetaType::Type::QDate:
135 case QMetaType::Type::QTime:
142 if ( !dateTime.isValid() || dateTime.isNull() )
151 const bool fieldIsoFormat =
config( QStringLiteral(
"field_iso_format" ),
false ).toBool();
153 if ( fieldIsoFormat )
174 if ( !mQDateTimeEdit )
178 if ( mQgsDateTimeEdit )
180 dateTime = mQgsDateTimeEdit->dateTime();
184 dateTime = mQDateTimeEdit->dateTime();
187 if ( dateTime.isNull() )
190 switch (
field().type() )
192 case QMetaType::Type::QDateTime:
194 case QMetaType::Type::QDate:
195 return dateTime.date();
196 case QMetaType::Type::QTime:
197 return dateTime.time();
199 const bool fieldIsoFormat =
config( QStringLiteral(
"field_iso_format" ),
false ).toBool();
201 if ( fieldIsoFormat )
203 return dateTime.toString( Qt::ISODate );
207 return dateTime.toString( fieldFormat );
215void QgsDateTimeEditWrapper::updateValues(
const QVariant &value,
const QVariantList & )
217 if ( !mQDateTimeEdit )
222 switch (
field().type() )
224 case QMetaType::Type::QDateTime:
225 dateTime =
value.toDateTime();
227 case QMetaType::Type::QDate:
228 dateTime.setDate(
value.toDate() );
229 dateTime.setTime( QTime( 0, 0, 0 ) );
231 case QMetaType::Type::QTime:
232 dateTime.setDate( QDate::currentDate() );
233 dateTime.setTime(
value.toTime() );
238 switch (
value.userType() )
240 case QMetaType::Type::QDateTime:
242 dateTime =
value.toDateTime();
245 case QMetaType::Type::QDate:
247 dateTime.setDate(
value.toDate() );
248 dateTime.setTime( QTime( 0, 0, 0 ) );
251 case QMetaType::Type::QTime:
253 dateTime.setDate( QDate::currentDate() );
254 dateTime.setTime(
value.toTime() );
259 const bool fieldIsoFormat =
config( QStringLiteral(
"field_iso_format" ),
false ).toBool();
261 if ( fieldIsoFormat )
263 dateTime = QDateTime::fromString(
value.toString(), Qt::ISODate );
267 dateTime = QDateTime::fromString(
value.toString(), fieldFormat );
275 if ( mQgsDateTimeEdit )
278 if ( mQgsDateTimeEdit->displayFormat().indexOf(
"Z" ) > 0 )
280 dateTime = dateTime.toUTC();
283 mQgsDateTimeEdit->setDateTime( dateTime );
287 mQDateTimeEdit->setDateTime( dateTime );
293 if ( !mQDateTimeEdit )
296 mQDateTimeEdit->setReadOnly( !enabled );
297 mQDateTimeEdit->setFrame( enabled );
@ Warning
Warning message.
bool valid() const override
Returns true if the widget has been properly initialized.
void initWidget(QWidget *editor) override
This method should initialize the editor widget with runtime data.
QgsDateTimeEditWrapper(QgsVectorLayer *layer, int fieldIdx, QWidget *editor, QWidget *parent=nullptr)
Constructor for QgsDateTimeEditWrapper.
QVariant value() const override
Will be used to access the widget's value.
void showIndeterminateState() override
Sets the widget to display in an indeterminate "mixed value" state.
void setEnabled(bool enabled) override
QWidget * createWidget(QWidget *parent) override
This method should create a new widget with the provided parent.
A QDateTimeEdit with the capability of setting/reading null date/times.
void setEmpty()
Resets the widget to show no value (ie, an "unknown" state).
void valueChanged(const QDateTime &date)
Signal emitted whenever the value changes.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
static QVariant createNullVariant(QMetaType::Type metaType)
Helper method to properly create a null QVariant from a metaType Returns the created QVariant.
Represents a vector layer which manages a vector based dataset.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
#define QgsDebugError(str)