@@ -32,6 +32,14 @@ QgsExpressionBuilderWidget::QgsExpressionBuilderWidget(QgsVectorLayer *layer)
32
32
this ->registerItem (" Operators" ," -" ," -" );
33
33
this ->registerItem (" Operators" ," *" ," * " );
34
34
this ->registerItem (" Operators" ," /" ," / " );
35
+
36
+ this ->registerItem (" Geometry" ," Area" ," $area " );
37
+ this ->registerItem (" Geometry" ," Length" ," $length " );
38
+ this ->registerItem (" Geometry" ," Perimeter" ," $perimeter " );
39
+ this ->registerItem (" Geometry" ," X" ," $x " );
40
+ this ->registerItem (" Geometry" ," Y" ," $y " );
41
+ this ->registerItem (" Geometry" ," XAt" ," xat() " );
42
+ this ->registerItem (" Geometry" ," YAt" ," yat() " );
35
43
}
36
44
37
45
QgsExpressionBuilderWidget::~QgsExpressionBuilderWidget ()
@@ -45,9 +53,36 @@ void QgsExpressionBuilderWidget::on_mAllPushButton_clicked()
45
53
46
54
}
47
55
56
+ void QgsExpressionBuilderWidget::on_expressionTree_clicked (const QModelIndex &index)
57
+ {
58
+ // Get the item
59
+ QgsExpressionItem* item = dynamic_cast <QgsExpressionItem*>(mModel ->itemFromIndex (index));
60
+ if ( item == 0 )
61
+ return ;
62
+ // Handle the special case for fields
63
+ // This is a bit hacky. Should be done better.
64
+ QStandardItem* parent = mModel ->itemFromIndex (index.parent ());
65
+ if ( parent == 0 )
66
+ return ;
67
+
68
+ if (parent->text () == " Fields" )
69
+ {
70
+ int fieldIndex = mLayer ->fieldNameIndex (item->text ());
71
+ fillFieldValues (fieldIndex,10 );
72
+ }
73
+ else
74
+ {
75
+ // We might be able to show help for the current selected item here.
76
+ mValueListWidget ->clear ();
77
+ }
78
+ }
79
+
48
80
void QgsExpressionBuilderWidget::on_expressionTree_doubleClicked (const QModelIndex &index)
49
81
{
50
- QgsExpressionItem* item = static_cast <QgsExpressionItem*>(mModel ->itemFromIndex (index));
82
+ QgsExpressionItem* item = dynamic_cast <QgsExpressionItem*>(mModel ->itemFromIndex (index));
83
+ if (item == 0 )
84
+ return ;
85
+
51
86
txtExpressionString->insertPlainText (item->getExpressionText ());
52
87
}
53
88
@@ -67,20 +102,24 @@ void QgsExpressionBuilderWidget::loadFieldNames()
67
102
// insert into field list and field combo box
68
103
// mFieldMap.insert( fieldName, fieldIt.key() );
69
104
this ->registerItem (" Fields" , fieldName, " " + fieldName + " " );
70
- // mFieldsListWidget->addItem( fieldName );
71
105
}
72
106
}
73
107
74
108
void QgsExpressionBuilderWidget::fillFieldValues (int fieldIndex, int countLimit)
75
109
{
76
- // determine the field type
110
+ mValueListWidget ->clear ();
111
+ mValueListWidget ->setUpdatesEnabled ( false );
112
+ mValueListWidget ->blockSignals ( true );
113
+
77
114
QList<QVariant> values;
78
115
mLayer ->uniqueValues ( fieldIndex, values, countLimit );
79
-
80
116
foreach (QVariant value, values)
81
117
{
82
- // mValueListWidget->addItem(value.toString());
118
+ mValueListWidget ->addItem (value.toString ());
83
119
}
120
+
121
+ mValueListWidget ->setUpdatesEnabled ( true );
122
+ mValueListWidget ->blockSignals ( false );
84
123
}
85
124
86
125
void QgsExpressionBuilderWidget::registerItem (QString group, QString label, QString expressionText)
0 commit comments