diff --git a/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h b/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h index e77b0d9ef64..b8bbc72ceae 100644 --- a/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h +++ b/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h @@ -122,7 +122,7 @@ class GUI_EXPORT QgsEditorWidgetWrapper : public QgsWidgetWrapper * * \param enabled Enable or Disable? */ - void setEnabled( bool enabled ) override; + virtual void setEnabled( bool enabled ) override; /** Sets the widget to display in an indeterminate "mixed value" state. * \since QGIS 2.16 diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp index 56f18cf64fc..d4202ec555a 100644 --- a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp +++ b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp @@ -33,6 +33,7 @@ QgsValueRelationWidgetWrapper::QgsValueRelationWidgetWrapper( QgsVectorLayer *vl , mListWidget( nullptr ) , mLineEdit( nullptr ) , mLayer( nullptr ) + , mUpdating( false ) { } @@ -198,3 +199,26 @@ void QgsValueRelationWidgetWrapper::showIndeterminateState() whileBlocking( mLineEdit )->clear(); } } + +void QgsValueRelationWidgetWrapper::setEnabled( bool enabled ) +{ + if ( mUpdating ) + return; + + if ( mListWidget ) + { + mUpdating = true; + for ( int i = 0; i < mListWidget->count(); ++i ) + { + QListWidgetItem *item = mListWidget->item( i ); + + if ( enabled ) + item->setFlags( item->flags() | Qt::ItemIsEnabled ); + else + item->setFlags( item->flags() & ~Qt::ItemIsEnabled ); + } + mUpdating = false; + } + else + QgsEditorWidgetWrapper::setEnabled( enabled ); +} diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h index 9ab9c21496d..cb9a2c96b82 100644 --- a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h +++ b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h @@ -59,6 +59,8 @@ class GUI_EXPORT QgsValueRelationWidgetWrapper : public QgsEditorWidgetWrapper void showIndeterminateState() override; + void setEnabled( bool enabled ) override; + protected: QWidget *createWidget( QWidget *parent ) override; void initWidget( QWidget *editor ) override; @@ -75,6 +77,8 @@ class GUI_EXPORT QgsValueRelationWidgetWrapper : public QgsEditorWidgetWrapper QgsValueRelationFieldFormatter::ValueRelationCache mCache; QgsVectorLayer *mLayer = nullptr; + bool mUpdating; + friend class QgsValueRelationWidgetFactory; };