19
19
#include " qgsapplication.h"
20
20
#include " qgsfieldexpressionwidget.h"
21
21
#include " qgsexpressionbuilderdialog.h"
22
- #include " qgsfieldmodel .h"
22
+ #include " qgsfieldproxymodel .h"
23
23
#include " qgsdistancearea.h"
24
24
25
25
QgsFieldExpressionWidget::QgsFieldExpressionWidget ( QWidget *parent )
@@ -32,9 +32,9 @@ QgsFieldExpressionWidget::QgsFieldExpressionWidget( QWidget *parent )
32
32
mCombo = new QComboBox ( this );
33
33
mCombo ->setEditable ( true );
34
34
mCombo ->setSizePolicy ( QSizePolicy::MinimumExpanding, QSizePolicy::Minimum );
35
- mFieldModel = new QgsFieldModel ( mCombo );
36
- mFieldModel ->setAllowExpression ( true );
37
- mCombo ->setModel ( mFieldModel );
35
+ mFieldProxyModel = new QgsFieldProxyModel ( mCombo );
36
+ mFieldProxyModel -> sourceFieldModel () ->setAllowExpression ( true );
37
+ mCombo ->setModel ( mFieldProxyModel );
38
38
39
39
mButton = new QToolButton ( this );
40
40
mButton ->setSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Minimum );
@@ -59,6 +59,11 @@ void QgsFieldExpressionWidget::setExpressionDialogTitle( QString title )
59
59
mExpressionDialogTitle = title;
60
60
}
61
61
62
+ void QgsFieldExpressionWidget::setFilters ( QgsFieldProxyModel::Filters filters )
63
+ {
64
+ mFieldProxyModel ->setFilters ( filters );
65
+ }
66
+
62
67
void QgsFieldExpressionWidget::setGeomCalculator ( const QgsDistanceArea &da )
63
68
{
64
69
mDa = QSharedPointer<const QgsDistanceArea>( new QgsDistanceArea ( da ) );
@@ -76,27 +81,28 @@ QString QgsFieldExpressionWidget::currentField( bool *isExpression , bool *isVal
76
81
}
77
82
78
83
int i = mCombo ->currentIndex ();
79
- const QModelIndex index = mFieldModel ->index ( i, 0 );
84
+ const QModelIndex proxyIndex = mFieldProxyModel ->index ( i, 0 );
85
+ if ( !proxyIndex.isValid () )
86
+ return " " ;
87
+ const QModelIndex index = mFieldProxyModel ->mapToSource ( proxyIndex );
80
88
if ( !index .isValid () )
81
- {
82
89
return " " ;
83
- }
84
90
85
91
if ( isExpression )
86
92
{
87
- *isExpression = mFieldModel ->data ( index , QgsFieldModel::IsExpressionRole ).toBool ();
93
+ *isExpression = mFieldProxyModel ->data ( index , QgsFieldModel::IsExpressionRole ).toBool ();
88
94
}
89
95
if ( isValid )
90
96
{
91
- *isValid = mFieldModel ->data ( index , QgsFieldModel::ExpressionValidityRole ).toBool ();
97
+ *isValid = mFieldProxyModel ->data ( index , QgsFieldModel::ExpressionValidityRole ).toBool ();
92
98
}
93
- QString expression = mFieldModel ->data ( index , QgsFieldModel::ExpressionRole ).toString ();
99
+ QString expression = mFieldProxyModel ->data ( index , QgsFieldModel::ExpressionRole ).toString ();
94
100
return expression;
95
101
}
96
102
97
103
QgsVectorLayer *QgsFieldExpressionWidget::layer ()
98
104
{
99
- return mFieldModel ->layer ();
105
+ return mFieldProxyModel -> sourceFieldModel () ->layer ();
100
106
}
101
107
102
108
void QgsFieldExpressionWidget::setLayer ( QgsMapLayer *layer )
@@ -110,21 +116,24 @@ void QgsFieldExpressionWidget::setLayer( QgsMapLayer *layer )
110
116
111
117
void QgsFieldExpressionWidget::setLayer ( QgsVectorLayer *layer )
112
118
{
113
- mFieldModel ->setLayer ( layer );
119
+ mFieldProxyModel -> sourceFieldModel () ->setLayer ( layer );
114
120
}
115
121
116
122
void QgsFieldExpressionWidget::setField ( const QString fieldName )
117
123
{
118
124
if ( fieldName.isEmpty () )
119
125
return ;
120
126
121
- QModelIndex idx = mFieldModel ->indexFromName ( fieldName );
127
+ QModelIndex idx = mFieldProxyModel -> sourceFieldModel () ->indexFromName ( fieldName );
122
128
if ( !idx.isValid () )
123
129
{
124
130
// new expression
125
- idx = mFieldModel ->setExpression ( fieldName );
131
+ idx = mFieldProxyModel -> sourceFieldModel () ->setExpression ( fieldName );
126
132
}
127
- mCombo ->setCurrentIndex ( idx.row () );
133
+
134
+ QModelIndex proxyIndex = mFieldProxyModel ->mapFromSource ( idx );
135
+
136
+ mCombo ->setCurrentIndex ( proxyIndex.row () );
128
137
129
138
currentFieldChanged ();
130
139
}
@@ -159,7 +168,7 @@ void QgsFieldExpressionWidget::expressionEdited( const QString expression )
159
168
void QgsFieldExpressionWidget::expressionEditingFinished ()
160
169
{
161
170
const QString expression = mCombo ->lineEdit ()->text ();
162
- QModelIndex idx = mFieldModel ->setExpression ( expression );
171
+ QModelIndex idx = mFieldProxyModel -> sourceFieldModel () ->setExpression ( expression );
163
172
mCombo ->setCurrentIndex ( idx.row () );
164
173
currentFieldChanged ();
165
174
}
0 commit comments