26#include <QCalendarWidget>
28#include <QDateTimeEdit>
30#include <QTextCharFormat>
33#include "moc_qgsdatetimeeditwrapper.cpp"
35using namespace Qt::StringLiterals;
46 widget->setDateTime( QDateTime::currentDateTime() );
55 mQgsDateTimeEdit = qgsEditor;
60 QDateTimeEdit *qtEditor =
dynamic_cast<QDateTimeEdit *
>( editor );
63 mQDateTimeEdit = qtEditor;
66 if ( !mQDateTimeEdit )
68 QgsDebugError( u
"Date/time edit widget could not be initialized because provided widget is not a QDateTimeEdit."_s );
74 mQDateTimeEdit->setDisplayFormat( displayFormat );
76 const bool calendar =
config( u
"calendar_popup"_s,
true ).toBool();
77 if ( calendar != mQDateTimeEdit->calendarPopup() )
79 mQDateTimeEdit->setCalendarPopup( calendar );
81 if ( calendar && mQDateTimeEdit->calendarWidget() )
84 QTextCharFormat todayFormat;
85 todayFormat.setBackground( QColor( 160, 180, 200 ) );
86 mQDateTimeEdit->calendarWidget()->setDateTextFormat( QDate::currentDate(), todayFormat );
89 const bool allowNull =
config( u
"allow_null"_s,
true ).toBool();
90 if ( mQgsDateTimeEdit )
92 mQgsDateTimeEdit->setAllowNull( allowNull );
97 "For that the QGIS custom widget QgsDateTimeEdit needs to be used." ),
98 tr(
"field widgets" ) );
101 if ( mQgsDateTimeEdit )
107 connect( mQDateTimeEdit, &QDateTimeEdit::dateTimeChanged,
this, &QgsDateTimeEditWrapper::dateTimeChanged );
113 return mQgsDateTimeEdit || mQDateTimeEdit;
118 if ( mQgsDateTimeEdit )
122void QgsDateTimeEditWrapper::dateTimeChanged(
const QDateTime &dateTime )
124 switch (
field().type() )
126 case QMetaType::Type::QDateTime:
132 case QMetaType::Type::QDate:
138 case QMetaType::Type::QTime:
145 if ( !dateTime.isValid() || dateTime.isNull() )
154 const bool fieldIsoFormat =
config( u
"field_iso_format"_s,
false ).toBool();
156 if ( fieldIsoFormat )
177 if ( !mQDateTimeEdit )
181 if ( mQgsDateTimeEdit )
183 dateTime = mQgsDateTimeEdit->dateTime();
187 dateTime = mQDateTimeEdit->dateTime();
190 if ( dateTime.isNull() )
193 switch (
field().type() )
195 case QMetaType::Type::QDateTime:
197 case QMetaType::Type::QDate:
198 return dateTime.date();
199 case QMetaType::Type::QTime:
200 return dateTime.time();
202 const bool fieldIsoFormat =
config( u
"field_iso_format"_s,
false ).toBool();
204 if ( fieldIsoFormat )
206 return dateTime.toString( Qt::ISODate );
210 return dateTime.toString( fieldFormat );
218void QgsDateTimeEditWrapper::updateValues(
const QVariant &value,
const QVariantList & )
220 if ( !mQDateTimeEdit )
225 switch (
field().type() )
227 case QMetaType::Type::QDateTime:
228 dateTime =
value.toDateTime();
230 case QMetaType::Type::QDate:
231 dateTime.setDate(
value.toDate() );
232 dateTime.setTime( QTime( 0, 0, 0 ) );
234 case QMetaType::Type::QTime:
235 dateTime.setDate( QDate::currentDate() );
236 dateTime.setTime(
value.toTime() );
241 switch (
value.userType() )
243 case QMetaType::Type::QDateTime:
245 dateTime =
value.toDateTime();
248 case QMetaType::Type::QDate:
250 dateTime.setDate(
value.toDate() );
251 dateTime.setTime( QTime( 0, 0, 0 ) );
254 case QMetaType::Type::QTime:
256 dateTime.setDate( QDate::currentDate() );
257 dateTime.setTime(
value.toTime() );
262 const bool fieldIsoFormat =
config( u
"field_iso_format"_s,
false ).toBool();
264 if ( fieldIsoFormat )
266 dateTime = QDateTime::fromString(
value.toString(), Qt::ISODate );
270 dateTime = QDateTime::fromString(
value.toString(), fieldFormat );
278 if ( mQgsDateTimeEdit )
281 if ( mQgsDateTimeEdit->displayFormat().indexOf(
"Z" ) > 0 )
283 dateTime = dateTime.toUTC();
286 mQgsDateTimeEdit->setDateTime( dateTime );
290 mQDateTimeEdit->setDateTime( dateTime );
296 if ( !mQDateTimeEdit )
299 mQDateTimeEdit->setReadOnly( !enabled );
300 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)