Skip to content

Commit 439a711

Browse files
committedJul 12, 2011
Fill value list from selected field.
1 parent 983a3ad commit 439a711

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed
 

‎src/gui/qgsexpressionbuilder.cpp

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ QgsExpressionBuilderWidget::QgsExpressionBuilderWidget(QgsVectorLayer *layer)
3232
this->registerItem("Operators","-"," -");
3333
this->registerItem("Operators","*"," * ");
3434
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() ");
3543
}
3644

3745
QgsExpressionBuilderWidget::~QgsExpressionBuilderWidget()
@@ -45,9 +53,36 @@ void QgsExpressionBuilderWidget::on_mAllPushButton_clicked()
4553

4654
}
4755

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+
4880
void QgsExpressionBuilderWidget::on_expressionTree_doubleClicked(const QModelIndex &index)
4981
{
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+
5186
txtExpressionString->insertPlainText(item->getExpressionText());
5287
}
5388

@@ -67,20 +102,24 @@ void QgsExpressionBuilderWidget::loadFieldNames()
67102
//insert into field list and field combo box
68103
//mFieldMap.insert( fieldName, fieldIt.key() );
69104
this->registerItem("Fields", fieldName, " " + fieldName + " ");
70-
//mFieldsListWidget->addItem( fieldName );
71105
}
72106
}
73107

74108
void QgsExpressionBuilderWidget::fillFieldValues(int fieldIndex, int countLimit)
75109
{
76-
// determine the field type
110+
mValueListWidget->clear();
111+
mValueListWidget->setUpdatesEnabled( false );
112+
mValueListWidget->blockSignals( true );
113+
77114
QList<QVariant> values;
78115
mLayer->uniqueValues( fieldIndex, values, countLimit );
79-
80116
foreach(QVariant value, values)
81117
{
82-
//mValueListWidget->addItem(value.toString());
118+
mValueListWidget->addItem(value.toString());
83119
}
120+
121+
mValueListWidget->setUpdatesEnabled( true );
122+
mValueListWidget->blockSignals( false );
84123
}
85124

86125
void QgsExpressionBuilderWidget::registerItem(QString group, QString label, QString expressionText)

‎src/gui/qgsexpressionbuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class QgsExpressionBuilderWidget : public QWidget, private Ui::QgsExpressionBuil
6565

6666
public slots:
6767
void on_mAllPushButton_clicked();
68+
void on_expressionTree_clicked(const QModelIndex &index);
6869
void on_expressionTree_doubleClicked(const QModelIndex &index);
6970

7071
private:

‎src/ui/qgsexpressionbuilder.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
</widget>
5656
</item>
5757
<item row="0" column="1">
58-
<widget class="QListView" name="listView"/>
58+
<widget class="QListWidget" name="mValueListWidget"/>
5959
</item>
6060
</layout>
6161
</widget>

0 commit comments

Comments
 (0)
Please sign in to comment.