QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgsenumerationwidgetwrapper.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsenumerationwidgetwrapper.cpp
3  --------------------------------------
4  Date : 5.1.2014
5  Copyright : (C) 2014 Matthias Kuhn
6  Email : matthias at opengis dot ch
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
17 
18 #include "qgsvectorlayer.h"
19 #include "qgsvectordataprovider.h"
20 
21 QgsEnumerationWidgetWrapper::QgsEnumerationWidgetWrapper( QgsVectorLayer *layer, int fieldIdx, QWidget *editor, QWidget *parent )
22  : QgsEditorWidgetWrapper( layer, fieldIdx, editor, parent )
23 
24 {
25 }
26 
27 
29 {
30  QVariant value;
31 
32  if ( mComboBox )
33  value = mComboBox->currentData();
34 
35  return value;
36 }
37 
39 {
40  if ( mComboBox )
41  {
42  whileBlocking( mComboBox )->setCurrentIndex( -1 );
43  }
44 }
45 
46 QWidget *QgsEnumerationWidgetWrapper::createWidget( QWidget *parent )
47 {
48  return new QComboBox( parent );
49 }
50 
52 {
53  mComboBox = qobject_cast<QComboBox *>( editor );
54 
55  if ( mComboBox )
56  {
57  QStringList enumValues;
58  layer()->dataProvider()->enumValues( fieldIdx(), enumValues );
59 
60  const auto constEnumValues = enumValues;
61  for ( const QString &s : constEnumValues )
62  {
63  mComboBox->addItem( s, s );
64  }
65  connect( mComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ),
66  this, static_cast<void ( QgsEditorWidgetWrapper::* )()>( &QgsEditorWidgetWrapper::emitValueChanged ) );
67  }
68 }
69 
71 {
72  return mComboBox;
73 }
74 
75 void QgsEnumerationWidgetWrapper::updateValues( const QVariant &value, const QVariantList & )
76 {
77  if ( mComboBox )
78  {
79  mComboBox->setCurrentIndex( mComboBox->findData( value ) );
80  }
81 }
82 
void emitValueChanged()
Will call the value() method to determine the emitted value.
Manages an editor widget Widget and wrapper share the same parent.
void initWidget(QWidget *editor) override
This method should initialize the editor widget with runtime data.
QgsEnumerationWidgetWrapper(QgsVectorLayer *layer, int fieldIdx, QWidget *editor=nullptr, QWidget *parent=nullptr)
Constructor for QgsEnumerationWidgetWrapper.
bool valid() const override
Returns true if the widget has been properly initialized.
QVariant value() const override
Will be used to access the widget&#39;s value.
QWidget * createWidget(QWidget *parent) override
This method should create a new widget with the provided parent.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition: qgis.h:227
virtual void enumValues(int index, QStringList &enumList) const
Returns the possible enum values of an attribute.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer&#39;s data provider, it may be nullptr.
int fieldIdx() const
Access the field index.
QgsVectorLayer * layer() const
Returns the vector layer associated with the widget.
void showIndeterminateState() override
Sets the widget to display in an indeterminate "mixed value" state.
Represents a vector layer which manages a vector based data sets.