25 #include <QDateTimeEdit> 
   28 #include <QTextCharFormat> 
   29 #include <QCalendarWidget> 
   40   widget->setDateTime( QDateTime::currentDateTime() );
 
   49     mQgsDateTimeEdit = qgsEditor;
 
   54   QDateTimeEdit *qtEditor = 
dynamic_cast<QDateTimeEdit *
>( editor );
 
   57     mQDateTimeEdit = qtEditor;
 
   60   if ( !mQDateTimeEdit )
 
   62     QgsDebugMsg( QStringLiteral( 
"Date/time edit widget could not be initialized because provided widget is not a QDateTimeEdit." ) );
 
   63     QgsMessageLog::logMessage( tr( 
"Date/time edit widget could not be initialized because provided widget is not a QDateTimeEdit." ), tr( 
"UI forms" ), Qgis::MessageLevel::Warning );
 
   68   mQDateTimeEdit->setDisplayFormat( displayFormat );
 
   70   const bool calendar = 
config( QStringLiteral( 
"calendar_popup" ), 
true ).toBool();
 
   71   if ( calendar != mQDateTimeEdit->calendarPopup() )
 
   73     mQDateTimeEdit->setCalendarPopup( calendar );
 
   75   if ( calendar && mQDateTimeEdit->calendarWidget() )
 
   78     QTextCharFormat todayFormat;
 
   79     todayFormat.setBackground( QColor( 160, 180, 200 ) );
 
   80     mQDateTimeEdit->calendarWidget()->setDateTextFormat( QDate::currentDate(), todayFormat );
 
   83   const bool allowNull = 
config( QStringLiteral( 
"allow_null" ), 
true ).toBool();
 
   84   if ( mQgsDateTimeEdit )
 
   91         "For that the QGIS custom widget QgsDateTimeEdit needs to be used." ),
 
   92         tr( 
"field widgets" ) );
 
   95   if ( mQgsDateTimeEdit )
 
  101     connect( mQDateTimeEdit, &QDateTimeEdit::dateTimeChanged, 
this,  &QgsDateTimeEditWrapper::dateTimeChanged );
 
  107   return mQgsDateTimeEdit || mQDateTimeEdit;
 
  112   if ( mQgsDateTimeEdit )
 
  116 void QgsDateTimeEditWrapper::dateTimeChanged( 
const QDateTime &dateTime )
 
  118   switch ( 
field().type() )
 
  120     case QVariant::DateTime:
 
  139       if ( !dateTime.isValid() || dateTime.isNull() )
 
  148         const bool fieldIsoFormat = 
config( QStringLiteral( 
"field_iso_format" ), 
false ).toBool();
 
  150         if ( fieldIsoFormat )
 
  171   if ( !mQDateTimeEdit )
 
  172     return QVariant( 
field().type() );
 
  175   if ( mQgsDateTimeEdit )
 
  177     dateTime = mQgsDateTimeEdit->
dateTime();
 
  181     dateTime = mQDateTimeEdit->dateTime();
 
  184   switch ( 
field().type() )
 
  186     case QVariant::DateTime:
 
  189       return dateTime.date();
 
  191       return dateTime.time();
 
  193       const bool fieldIsoFormat = 
config( QStringLiteral( 
"field_iso_format" ), 
false ).toBool();
 
  195       if ( fieldIsoFormat )
 
  197         return dateTime.toString( Qt::ISODate );
 
  201         return dateTime.toString( fieldFormat );
 
  209 void QgsDateTimeEditWrapper::updateValues( 
const QVariant &value, 
const QVariantList & )
 
  211   if ( !mQDateTimeEdit )
 
  216   switch ( 
field().type() )
 
  218     case QVariant::DateTime:
 
  219       dateTime = 
value.toDateTime();
 
  222       dateTime.setDate( 
value.toDate() );
 
  223       dateTime.setTime( QTime( 0, 0, 0 ) );
 
  226       dateTime.setDate( QDate::currentDate() );
 
  227       dateTime.setTime( 
value.toTime() );
 
  230       const bool fieldIsoFormat = 
config( QStringLiteral( 
"field_iso_format" ), 
false ).toBool();
 
  232       if ( fieldIsoFormat )
 
  234         dateTime = QDateTime::fromString( 
value.toString(), Qt::ISODate );
 
  238         dateTime = QDateTime::fromString( 
value.toString(), fieldFormat );
 
  243   if ( mQgsDateTimeEdit )
 
  249     mQDateTimeEdit->setDateTime( dateTime );
 
  255   if ( !mQDateTimeEdit )
 
  258   mQDateTimeEdit->setEnabled( enabled );
 
static QgsMessageLog * messageLog()
Returns the application's message log.
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.
The QgsDateTimeEdit class is a QDateTimeEdit with the capability of setting/reading null date/times.
void setAllowNull(bool allowNull)
Determines if the widget allows setting null date/time.
QDateTime dateTime() const
Returns the date time which can be a null date/time.
void setDateTime(const QDateTime &dateTime)
Set the date time in the widget and handles 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)
Adds a message to the log instance (and creates it if necessary).
Represents a vector layer which manages a vector based data sets.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH