Skip to content

Commit

Permalink
Implement QgsEditorWidgetWrapper::showIndeterminateState() for setting
Browse files Browse the repository at this point in the history
editor widgets into an indeterminant "unknown value" state

Works for all editor widgets except date time, range and uuid widgets.
  • Loading branch information
nyalldawson committed Apr 5, 2016
1 parent 16274d5 commit 22f1a1d
Show file tree
Hide file tree
Showing 30 changed files with 226 additions and 21 deletions.
5 changes: 5 additions & 0 deletions python/gui/editorwidgets/core/qgseditorwidgetwrapper.sip
Expand Up @@ -83,6 +83,11 @@ class QgsEditorWidgetWrapper : QgsWidgetWrapper
*/
void setEnabled( bool enabled );

/** Sets the widget to display in an indeterminate "mixed value" state.
* @note added in QGIS 2.16
*/
virtual void showIndeterminateState();

signals:
/**
* Emit this signal, whenever the value changed.
Expand Down
5 changes: 5 additions & 0 deletions src/gui/editorwidgets/core/qgseditorwidgetwrapper.h
Expand Up @@ -105,6 +105,11 @@ class GUI_EXPORT QgsEditorWidgetWrapper : public QgsWidgetWrapper
*/
void setEnabled( bool enabled ) override;

/** Sets the widget to display in an indeterminate "mixed value" state.
* @note added in QGIS 2.16
*/
virtual void showIndeterminateState() {}

signals:
/**
* Emit this signal, whenever the value changed.
Expand Down
13 changes: 11 additions & 2 deletions src/gui/editorwidgets/qgscheckboxwidgetwrapper.cpp
Expand Up @@ -37,6 +37,14 @@ QVariant QgsCheckboxWidgetWrapper::value() const
return v;
}

void QgsCheckboxWidgetWrapper::showIndeterminateState()
{
if ( mCheckBox )
{
whileBlocking( mCheckBox )->setCheckState( Qt::PartiallyChecked );
}
}

QWidget* QgsCheckboxWidgetWrapper::createWidget( QWidget* parent )
{
return new QCheckBox( parent );
Expand All @@ -60,13 +68,14 @@ bool QgsCheckboxWidgetWrapper::valid() const

void QgsCheckboxWidgetWrapper::setValue( const QVariant& value )
{
bool state = ( value == config( "CheckedState" ) );
if ( mGroupBox )
{
mGroupBox->setChecked( value == config( "CheckedState" ) );
mGroupBox->setChecked( state );
}

if ( mCheckBox )
{
mCheckBox->setChecked( value == config( "CheckedState" ) );
mCheckBox->setChecked( state );
}
}
2 changes: 2 additions & 0 deletions src/gui/editorwidgets/qgscheckboxwidgetwrapper.h
Expand Up @@ -43,6 +43,8 @@ class GUI_EXPORT QgsCheckboxWidgetWrapper : public QgsEditorWidgetWrapper
public:
QVariant value() const override;

void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
void initWidget( QWidget* editor ) override;
Expand Down
5 changes: 5 additions & 0 deletions src/gui/editorwidgets/qgsclassificationwidgetwrapper.cpp
Expand Up @@ -29,6 +29,11 @@ QVariant QgsClassificationWidgetWrapper::value() const
return mComboBox->itemData( mComboBox->currentIndex() );
}

void QgsClassificationWidgetWrapper::showIndeterminateState()
{
whileBlocking( mComboBox )->setCurrentIndex( -1 );
}

QWidget*QgsClassificationWidgetWrapper::createWidget( QWidget* parent )
{
return new QComboBox( parent );
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgsclassificationwidgetwrapper.h
Expand Up @@ -33,6 +33,7 @@ class GUI_EXPORT QgsClassificationWidgetWrapper : public QgsEditorWidgetWrapper
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget*createWidget( QWidget* parent ) override;
Expand Down
8 changes: 8 additions & 0 deletions src/gui/editorwidgets/qgscolorwidgetwrapper.cpp
Expand Up @@ -32,6 +32,14 @@ QVariant QgsColorWidgetWrapper::value() const
return v;
}

void QgsColorWidgetWrapper::showIndeterminateState()
{
if ( mColorButton )
{
whileBlocking( mColorButton )->setColor( QColor() );
}
}

QWidget* QgsColorWidgetWrapper::createWidget( QWidget* parent )
{
QgsColorButtonV2* button = new QgsColorButtonV2( parent );
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgscolorwidgetwrapper.h
Expand Up @@ -35,6 +35,7 @@ class GUI_EXPORT QgsColorWidgetWrapper : public QgsEditorWidgetWrapper
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
Expand Down
8 changes: 8 additions & 0 deletions src/gui/editorwidgets/qgsenumerationwidgetwrapper.cpp
Expand Up @@ -35,6 +35,14 @@ QVariant QgsEnumerationWidgetWrapper::value() const
return value;
}

void QgsEnumerationWidgetWrapper::showIndeterminateState()
{
if ( mComboBox )
{
whileBlocking( mComboBox )->setCurrentIndex( -1 );
}
}

QWidget* QgsEnumerationWidgetWrapper::createWidget( QWidget* parent )
{
return new QComboBox( parent );
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgsenumerationwidgetwrapper.h
Expand Up @@ -33,6 +33,7 @@ class GUI_EXPORT QgsEnumerationWidgetWrapper : public QgsEditorWidgetWrapper
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
Expand Down
18 changes: 18 additions & 0 deletions src/gui/editorwidgets/qgsexternalresourcewidgetwrapper.cpp
Expand Up @@ -54,6 +54,24 @@ QVariant QgsExternalResourceWidgetWrapper::value() const
return QVariant( field().type() );
}

void QgsExternalResourceWidgetWrapper::showIndeterminateState()
{
if ( mLineEdit )
{
whileBlocking( mLineEdit )->clear();
}

if ( mLabel )
{
mLabel->clear();
}

if ( mQgsWidget )
{
whileBlocking( mQgsWidget )->setDocumentPath( QString() );
}
}

bool QgsExternalResourceWidgetWrapper::valid() const
{
return mLineEdit || mLabel || mQgsWidget;
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgsexternalresourcewidgetwrapper.h
Expand Up @@ -42,6 +42,7 @@ class GUI_EXPORT QgsExternalResourceWidgetWrapper : public QgsEditorWidgetWrappe
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
Expand Down
11 changes: 11 additions & 0 deletions src/gui/editorwidgets/qgsfilenamewidgetwrapper.cpp
Expand Up @@ -53,6 +53,17 @@ bool QgsFileNameWidgetWrapper::valid() const
return mLineEdit || mLabel;
}

void QgsFileNameWidgetWrapper::showIndeterminateState()
{
if ( mLineEdit )
{
whileBlocking( mLineEdit )->clear();
}

if ( mLabel )
mLabel->clear();
}

QWidget* QgsFileNameWidgetWrapper::createWidget( QWidget* parent )
{
QWidget* container = new QWidget( parent );
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgsfilenamewidgetwrapper.h
Expand Up @@ -41,6 +41,7 @@ class GUI_EXPORT QgsFileNameWidgetWrapper : public QgsEditorWidgetWrapper
public:
QVariant value() const override;
bool valid() const override;
void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
Expand Down
12 changes: 12 additions & 0 deletions src/gui/editorwidgets/qgsphotowidgetwrapper.cpp
Expand Up @@ -115,6 +115,18 @@ QVariant QgsPhotoWidgetWrapper::value() const
return v;
}

void QgsPhotoWidgetWrapper::showIndeterminateState()
{
if ( mLineEdit )
{
whileBlocking( mLineEdit )->clear();
}
if ( mPhotoLabel )
mPhotoLabel->clear();
if ( mPhotoPixmapLabel )
mPhotoPixmapLabel->clear();
}

QWidget* QgsPhotoWidgetWrapper::createWidget( QWidget* parent )
{
QWidget* container = new QWidget( parent );
Expand Down
1 change: 1 addition & 0 deletions src/gui/editorwidgets/qgsphotowidgetwrapper.h
Expand Up @@ -49,6 +49,7 @@ class GUI_EXPORT QgsPhotoWidgetWrapper : public QgsEditorWidgetWrapper
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget* createWidget( QWidget* parent ) override;
Expand Down
14 changes: 14 additions & 0 deletions src/gui/editorwidgets/qgsrelationreferencewidget.cpp
Expand Up @@ -346,6 +346,20 @@ QgsFeature QgsRelationReferenceWidget::referencedFeature()
return f;
}

void QgsRelationReferenceWidget::showIndeterminateState()
{
if ( mReadOnlySelector )
{
whileBlocking( mLineEdit )->setText( QString() );
}
else
{
whileBlocking( mComboBox )->setCurrentIndex( -1 );
}
mRemoveFKButton->setEnabled( false );
updateAttributeEditorFrame( QgsFeature() );
}

QVariant QgsRelationReferenceWidget::foreignKey()
{
if ( mReadOnlySelector )
Expand Down
5 changes: 5 additions & 0 deletions src/gui/editorwidgets/qgsrelationreferencewidget.h
Expand Up @@ -108,6 +108,11 @@ class GUI_EXPORT QgsRelationReferenceWidget : public QWidget
//! if no feature is related, it returns an invalid feature
QgsFeature referencedFeature();

/** Sets the widget to display in an indeterminate "mixed value" state.
* @note added in QGIS 2.16
*/
void showIndeterminateState();

public slots:
//! open the form of the related feature in a new dialog
void openForm();
Expand Down
13 changes: 12 additions & 1 deletion src/gui/editorwidgets/qgsrelationreferencewidgetwrapper.cpp
Expand Up @@ -24,6 +24,7 @@ QgsRelationReferenceWidgetWrapper::QgsRelationReferenceWidgetWrapper( QgsVectorL
, mWidget( nullptr )
, mCanvas( canvas )
, mMessageBar( messageBar )
, mIndeterminateState( false )
{
}

Expand Down Expand Up @@ -103,11 +104,21 @@ bool QgsRelationReferenceWidgetWrapper::valid() const
return mWidget;
}

void QgsRelationReferenceWidgetWrapper::showIndeterminateState()
{
if ( mWidget )
{
mWidget->showIndeterminateState();
}
mIndeterminateState = true;
}

void QgsRelationReferenceWidgetWrapper::setValue( const QVariant& val )
{
if ( !mWidget || val == value() )
if ( !mWidget || ( !mIndeterminateState && val == value() ) )
return;

mIndeterminateState = false;
mWidget->setForeignKey( val );
}

Expand Down
2 changes: 2 additions & 0 deletions src/gui/editorwidgets/qgsrelationreferencewidgetwrapper.h
Expand Up @@ -50,6 +50,7 @@ class GUI_EXPORT QgsRelationReferenceWidgetWrapper : public QgsEditorWidgetWrapp
virtual void initWidget( QWidget* editor ) override;
virtual QVariant value() const override;
bool valid() const override;
void showIndeterminateState() override;

public slots:
virtual void setValue( const QVariant& value ) override;
Expand All @@ -62,6 +63,7 @@ class GUI_EXPORT QgsRelationReferenceWidgetWrapper : public QgsEditorWidgetWrapp
QgsRelationReferenceWidget* mWidget;
QgsMapCanvas* mCanvas;
QgsMessageBar* mMessageBar;
bool mIndeterminateState;
};

#endif // QGSRELATIONREFERENCEWIDGETWRAPPER_H
61 changes: 43 additions & 18 deletions src/gui/editorwidgets/qgstexteditwrapper.cpp
Expand Up @@ -135,7 +135,50 @@ bool QgsTextEditWrapper::valid() const
return mLineEdit || mTextEdit || mPlainTextEdit;
}

void QgsTextEditWrapper::showIndeterminateState()
{
//note - this is deliberately a zero length string, not a null string!
if ( mTextEdit )
mTextEdit->blockSignals( true );
if ( mPlainTextEdit )
mPlainTextEdit->blockSignals( true );
if ( mLineEdit )
mLineEdit->blockSignals( true );

setWidgetValue( QString( "" ) );

if ( mTextEdit )
mTextEdit->blockSignals( false );
if ( mPlainTextEdit )
mPlainTextEdit->blockSignals( false );
if ( mLineEdit )
mLineEdit->blockSignals( false );
}

void QgsTextEditWrapper::setValue( const QVariant& val )
{
setWidgetValue( val );
}

void QgsTextEditWrapper::setEnabled( bool enabled )
{
if ( mTextEdit )
mTextEdit->setReadOnly( !enabled );

if ( mPlainTextEdit )
mPlainTextEdit->setReadOnly( !enabled );

if ( mLineEdit )
{
mLineEdit->setReadOnly( !enabled );
if ( enabled )
mLineEdit->setPalette( mWritablePalette );
else
mLineEdit->setPalette( mReadOnlyPalette );
}
}

void QgsTextEditWrapper::setWidgetValue( const QVariant& val )
{
QString v;
if ( val.isNull() )
Expand Down Expand Up @@ -166,21 +209,3 @@ void QgsTextEditWrapper::setValue( const QVariant& val )
if ( mLineEdit )
mLineEdit->setText( v );
}

void QgsTextEditWrapper::setEnabled( bool enabled )
{
if ( mTextEdit )
mTextEdit->setReadOnly( !enabled );

if ( mPlainTextEdit )
mPlainTextEdit->setReadOnly( !enabled );

if ( mLineEdit )
{
mLineEdit->setReadOnly( !enabled );
if ( enabled )
mLineEdit->setPalette( mWritablePalette );
else
mLineEdit->setPalette( mReadOnlyPalette );
}
}
3 changes: 3 additions & 0 deletions src/gui/editorwidgets/qgstexteditwrapper.h
Expand Up @@ -42,6 +42,7 @@ class GUI_EXPORT QgsTextEditWrapper : public QgsEditorWidgetWrapper
// QgsEditorWidgetWrapper interface
public:
QVariant value() const override;
void showIndeterminateState() override;

protected:
QWidget*createWidget( QWidget* parent ) override;
Expand All @@ -58,6 +59,8 @@ class GUI_EXPORT QgsTextEditWrapper : public QgsEditorWidgetWrapper
QLineEdit* mLineEdit;
QPalette mReadOnlyPalette;
QPalette mWritablePalette;

void setWidgetValue( const QVariant& value );
};

#endif // QGSTEXTEDITWRAPPER_H

0 comments on commit 22f1a1d

Please sign in to comment.