Skip to content

Commit b2034f2

Browse files
committed
QgsValueMapSearchW inherits QgsSearchW
and not QgsDefaultSearchW anymore fixes expression creation
1 parent 7f556fd commit b2034f2

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

src/gui/editorwidgets/qgsvaluemapsearchwidgetwrapper.cpp

+28-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include <QSizePolicy>
2424

2525
QgsValueMapSearchWidgetWrapper::QgsValueMapSearchWidgetWrapper( QgsVectorLayer* vl, int fieldIdx, QWidget* parent )
26-
: QgsDefaultSearchWidgetWrapper( vl, fieldIdx, parent ),
26+
: QgsSearchWidgetWrapper( vl, fieldIdx, parent ),
2727
mComboBox( NULL )
2828
{
2929
}
@@ -33,17 +33,30 @@ QWidget* QgsValueMapSearchWidgetWrapper::createWidget( QWidget* parent )
3333
return new QComboBox( parent );
3434
}
3535

36-
void QgsValueMapSearchWidgetWrapper::comboBoxIndexChanged( int )
36+
void QgsValueMapSearchWidgetWrapper::comboBoxIndexChanged( int idx )
3737
{
3838
if ( mComboBox )
39-
setExpression( mComboBox->itemData( mComboBox->currentIndex() ).toString() );
39+
{
40+
setExpression( mComboBox->itemData( idx ).toString() );
41+
emit expressionChanged( mExpression );
42+
}
4043
}
4144

4245
bool QgsValueMapSearchWidgetWrapper::applyDirectly()
4346
{
4447
return true;
4548
}
4649

50+
QString QgsValueMapSearchWidgetWrapper::expression()
51+
{
52+
return mExpression;
53+
}
54+
55+
bool QgsValueMapSearchWidgetWrapper::valid()
56+
{
57+
return true;
58+
}
59+
4760
void QgsValueMapSearchWidgetWrapper::initWidget( QWidget* editor )
4861
{
4962
mComboBox = qobject_cast<QComboBox*>( editor );
@@ -63,3 +76,15 @@ void QgsValueMapSearchWidgetWrapper::initWidget( QWidget* editor )
6376
}
6477
}
6578

79+
void QgsValueMapSearchWidgetWrapper::setExpression( QString exp )
80+
{
81+
QString fieldName = layer()->fields().at( mFieldIdx ).name();
82+
QString str;
83+
84+
str = QString( "%1 = '%2'" )
85+
.arg( QgsExpression::quotedColumnRef( fieldName ),
86+
exp.replace( '\'', "''" ) );
87+
88+
mExpression = str;
89+
}
90+

src/gui/editorwidgets/qgsvaluemapsearchwidgetwrapper.h

+13-4
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,33 @@
1616
#ifndef QGSVALUEMAPSEARCHWIDGETWRAPPER_H
1717
#define QGSVALUEMAPSEARCHWIDGETWRAPPER_H
1818

19-
#include "qgsdefaultsearchwidgetwrapper.h"
19+
#include "qgssearchwidgetwrapper.h"
2020
#include <QComboBox>
2121

22+
/**
23+
* Wraps a value map search widget. This widget will offer a combobox with values from another layer
24+
* referenced by a foreign key (a constraint may be set but is not required on data level).
25+
* It will be used as a search widget and produces expression to look for in the layer.
26+
*/
2227

23-
24-
class GUI_EXPORT QgsValueMapSearchWidgetWrapper : public QgsDefaultSearchWidgetWrapper
28+
class GUI_EXPORT QgsValueMapSearchWidgetWrapper : public QgsSearchWidgetWrapper
2529
{
2630
Q_OBJECT
2731
public:
2832
explicit QgsValueMapSearchWidgetWrapper( QgsVectorLayer* vl, int fieldIdx, QWidget* parent = 0 );
2933
bool applyDirectly() override;
34+
QString expression() override;
35+
bool valid() override;
3036

3137
protected:
3238
QWidget* createWidget( QWidget* parent ) override;
3339
void initWidget( QWidget* editor ) override;
3440

41+
protected slots:
42+
void setExpression( QString exp ) override;
43+
3544
private slots:
36-
void comboBoxIndexChanged( int );
45+
void comboBoxIndexChanged( int idx );
3746

3847
private:
3948
QComboBox * mComboBox;

0 commit comments

Comments
 (0)