[QGIS Commit] r11741 - in trunk/qgis/src: app ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Oct 2 05:19:48 EDT 2009
Author: mhugent
Date: 2009-10-02 05:19:47 -0400 (Fri, 02 Oct 2009)
New Revision: 11741
Modified:
trunk/qgis/src/app/qgsfieldcalculator.cpp
trunk/qgis/src/app/qgsfieldcalculator.h
trunk/qgis/src/ui/qgsfieldcalculatorbase.ui
Log:
Update of existing fields in field calculator and possibility to apply only to selection
Modified: trunk/qgis/src/app/qgsfieldcalculator.cpp
===================================================================
--- trunk/qgis/src/app/qgsfieldcalculator.cpp 2009-10-01 14:02:29 UTC (rev 11740)
+++ trunk/qgis/src/app/qgsfieldcalculator.cpp 2009-10-02 09:19:47 UTC (rev 11741)
@@ -32,6 +32,8 @@
mOuputFieldWidthSpinBox->setValue( 10 );
mOutputFieldPrecisionSpinBox->setValue( 3 );
+ mUpdateExistingFieldCheckBox->setCheckState( Qt::Checked );
+
//disable ok button until there is text for output field and expression
mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( false );
}
@@ -65,43 +67,60 @@
mVectorLayer->beginEditCommand( "Field calculator" );
- //create new field
- QgsField newField( mOutputFieldNameLineEdit->text() );
- if ( mOutputFieldTypeComboBox->currentText() == tr( "Double" ) )
+ int attributeId = -1; //id of the field (can be existing field or newly created one
+
+ //update existing field
+ if ( mUpdateExistingFieldCheckBox->checkState() == Qt::Checked )
{
- newField.setType( QVariant::Double );
+ QMap<QString, int>::const_iterator fieldIt = mFieldMap.find( mExistingFieldComboBox->currentText() );
+ if ( fieldIt != mFieldMap.end() )
+ {
+ attributeId = fieldIt.value();
+ }
}
- else if ( mOutputFieldTypeComboBox->currentText() == tr( "Integer" ) )
+ //create new field
+ else
{
- newField.setType( QVariant::Int );
- }
- else if ( mOutputFieldTypeComboBox->currentText() == tr( "String" ) )
- {
- newField.setType( QVariant::String );
- }
+ //create new field
+ QgsField newField( mOutputFieldNameLineEdit->text() );
+ if ( mOutputFieldTypeComboBox->currentText() == tr( "Double" ) )
+ {
+ newField.setType( QVariant::Double );
+ }
+ else if ( mOutputFieldTypeComboBox->currentText() == tr( "Integer" ) )
+ {
+ newField.setType( QVariant::Int );
+ }
+ else if ( mOutputFieldTypeComboBox->currentText() == tr( "String" ) )
+ {
+ newField.setType( QVariant::String );
+ }
- newField.setLength( mOuputFieldWidthSpinBox->value() );
- newField.setPrecision( mOutputFieldPrecisionSpinBox->value() );
+ newField.setLength( mOuputFieldWidthSpinBox->value() );
+ newField.setPrecision( mOutputFieldPrecisionSpinBox->value() );
+ if ( !mVectorLayer->addAttribute( newField ) )
+ {
+ QMessageBox::critical( 0, tr( "Provider error" ), tr( "Could not add the new field to the provider." ) );
+ mVectorLayer->destroyEditCommand();
+ return;
+ }
- if ( !mVectorLayer->addAttribute( newField ) )
- {
- mVectorLayer->destroyEditCommand();
- return;
- }
+ //get index of the new field
+ const QgsFieldMap fieldList = mVectorLayer->pendingFields();
- //get index of the new field
- const QgsFieldMap fieldList = mVectorLayer->pendingFields();
- int attributeId = -1;
- QgsFieldMap::const_iterator it = fieldList.constBegin();
- for ( ; it != fieldList.constEnd(); ++it )
- {
- if ( it.value().name() == mOutputFieldNameLineEdit->text() )
+ QgsFieldMap::const_iterator it = fieldList.constBegin();
+ for ( ; it != fieldList.constEnd(); ++it )
{
- attributeId = it.key();
- break;
+ if ( it.value().name() == mOutputFieldNameLineEdit->text() )
+ {
+ attributeId = it.key();
+ break;
+ }
}
}
+
+
if ( attributeId == -1 )
{
mVectorLayer->destroyEditCommand();
@@ -112,9 +131,21 @@
QgsFeature feature;
bool calculationSuccess = true;
+ bool onlySelected = ( mOnlyUpdateSelectedCheckBox->checkState() == Qt::Checked );
+ QgsFeatureIds selectedIds = mVectorLayer->selectedFeaturesIds();
+
+
mVectorLayer->select( mVectorLayer->pendingAllAttributesList(), QgsRectangle(), false, false );
while ( mVectorLayer->nextFeature( feature ) )
{
+ if ( onlySelected )
+ {
+ if ( !selectedIds.contains( feature.id() ) )
+ {
+ continue;
+ }
+ }
+
QgsSearchTreeValue value = searchTree->valueAgainst( mVectorLayer->pendingFields(), feature.attributeMap() );
if ( value.isError() )
{
@@ -158,12 +189,29 @@
QgsFieldMap::const_iterator fieldIt = fieldMap.constBegin();
for ( ; fieldIt != fieldMap.constEnd(); ++fieldIt )
{
+
QString fieldName = fieldIt.value().name();
+
+ //insert into field list and field combo box
mFieldMap.insert( fieldName, fieldIt.key() );
mFieldsListWidget->addItem( fieldName );
+ mExistingFieldComboBox->addItem( fieldName );
}
}
+void QgsFieldCalculator::on_mUpdateExistingFieldCheckBox_stateChanged( int state )
+{
+ if ( state == Qt::Checked )
+ {
+ mNewFieldGroupBox->setEnabled( false );
+ }
+ else
+ {
+ mNewFieldGroupBox->setEnabled( true );
+ }
+ setOkButtonState();
+}
+
void QgsFieldCalculator::on_mFieldsListWidget_itemDoubleClicked( QListWidgetItem * item )
{
if ( !item )
@@ -343,7 +391,8 @@
void QgsFieldCalculator::setOkButtonState()
{
bool okEnabled = true;
- if ( mOutputFieldNameLineEdit->text().isEmpty() || mExpressionTextEdit->toPlainText().isEmpty() )
+ if (( mOutputFieldNameLineEdit->text().isEmpty() && mUpdateExistingFieldCheckBox->checkState() == Qt::Unchecked )\
+ || mExpressionTextEdit->toPlainText().isEmpty() )
{
okEnabled = false;
}
Modified: trunk/qgis/src/app/qgsfieldcalculator.h
===================================================================
--- trunk/qgis/src/app/qgsfieldcalculator.h 2009-10-01 14:02:29 UTC (rev 11740)
+++ trunk/qgis/src/app/qgsfieldcalculator.h 2009-10-02 09:19:47 UTC (rev 11741)
@@ -31,6 +31,7 @@
public slots:
void accept();
+ void on_mUpdateExistingFieldCheckBox_stateChanged( int state );
void on_mFieldsListWidget_itemDoubleClicked( QListWidgetItem * item );
void on_mValueListWidget_itemDoubleClicked( QListWidgetItem * item );
void on_mPlusPushButton_clicked();
Modified: trunk/qgis/src/ui/qgsfieldcalculatorbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsfieldcalculatorbase.ui 2009-10-01 14:02:29 UTC (rev 11740)
+++ trunk/qgis/src/ui/qgsfieldcalculatorbase.ui 2009-10-02 09:19:47 UTC (rev 11741)
@@ -1,95 +1,115 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
+<ui version="4.0" >
<class>QgsFieldCalculatorBase</class>
- <widget class="QDialog" name="QgsFieldCalculatorBase">
- <property name="geometry">
+ <widget class="QDialog" name="QgsFieldCalculatorBase" >
+ <property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
- <width>383</width>
- <height>496</height>
+ <width>615</width>
+ <height>628</height>
</rect>
</property>
- <property name="windowTitle">
+ <property name="windowTitle" >
<string>Field calculator</string>
</property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QLabel" name="mFieldNameLabel">
- <property name="text">
- <string>Output field name:</string>
+ <layout class="QGridLayout" name="gridLayout_5" >
+ <item row="0" column="0" >
+ <widget class="QCheckBox" name="mUpdateExistingFieldCheckBox" >
+ <property name="text" >
+ <string>Update existing field</string>
</property>
</widget>
</item>
- <item row="0" column="2">
- <widget class="QLineEdit" name="mOutputFieldNameLineEdit"/>
+ <item row="0" column="1" colspan="2" >
+ <widget class="QComboBox" name="mExistingFieldComboBox" />
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="mOutputFieldTypeLabel">
- <property name="text">
- <string>Output field type:</string>
+ <item row="1" column="0" colspan="3" >
+ <widget class="QCheckBox" name="mOnlyUpdateSelectedCheckBox" >
+ <property name="text" >
+ <string>Only update selected features</string>
</property>
</widget>
</item>
- <item row="1" column="2">
- <widget class="QComboBox" name="mOutputFieldTypeComboBox"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="mOutputFieldWidthLabel">
- <property name="text">
- <string>Output field width:</string>
+ <item row="2" column="0" colspan="3" >
+ <widget class="QGroupBox" name="mNewFieldGroupBox" >
+ <property name="title" >
+ <string>New field</string>
</property>
+ <layout class="QGridLayout" name="gridLayout_3" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="mFieldNameLabel" >
+ <property name="text" >
+ <string>Output field name:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="3" >
+ <widget class="QLineEdit" name="mOutputFieldNameLineEdit" />
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="mOutputFieldTypeLabel" >
+ <property name="text" >
+ <string>Output field type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" colspan="3" >
+ <widget class="QComboBox" name="mOutputFieldTypeComboBox" />
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="mOutputFieldWidthLabel" >
+ <property name="text" >
+ <string>Output field width:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" >
+ <widget class="QSpinBox" name="mOuputFieldWidthSpinBox" />
+ </item>
+ <item row="2" column="2" >
+ <widget class="QLabel" name="mOutputFieldPrecisionLabel" >
+ <property name="text" >
+ <string>Output field precision:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3" >
+ <widget class="QSpinBox" name="mOutputFieldPrecisionSpinBox" />
+ </item>
+ </layout>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="mOuputFieldWidthSpinBox"/>
- </item>
- <item row="2" column="2">
- <widget class="QLabel" name="mOutputFieldPrecisionLabel">
- <property name="text">
- <string>Output field precision:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="3">
- <widget class="QSpinBox" name="mOutputFieldPrecisionSpinBox"/>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QGroupBox" name="mFieldsGroupBox">
- <property name="title">
+ <item row="3" column="0" colspan="2" >
+ <widget class="QGroupBox" name="mFieldsGroupBox" >
+ <property name="title" >
<string>Fields</string>
</property>
- <widget class="QListWidget" name="mFieldsListWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>221</width>
- <height>151</height>
- </rect>
- </property>
- </widget>
+ <layout class="QGridLayout" name="gridLayout_4" >
+ <item row="0" column="0" >
+ <widget class="QListWidget" name="mFieldsListWidget" />
+ </item>
+ </layout>
</widget>
</item>
- <item row="3" column="2" colspan="2">
- <widget class="QGroupBox" name="mValuesGroupBox">
- <property name="title">
+ <item row="3" column="2" >
+ <widget class="QGroupBox" name="mValuesGroupBox" >
+ <property name="title" >
<string>Values</string>
</property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0" colspan="2">
- <widget class="QListWidget" name="mValueListWidget"/>
+ <layout class="QGridLayout" name="gridLayout_2" >
+ <item row="0" column="0" colspan="2" >
+ <widget class="QListWidget" name="mValueListWidget" />
</item>
- <item row="1" column="0">
- <widget class="QPushButton" name="mSamplePushButton">
- <property name="text">
+ <item row="1" column="0" >
+ <widget class="QPushButton" name="mSamplePushButton" >
+ <property name="text" >
<string>Sample</string>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QPushButton" name="mAllPushButton">
- <property name="text">
+ <item row="1" column="1" >
+ <widget class="QPushButton" name="mAllPushButton" >
+ <property name="text" >
<string>All</string>
</property>
</widget>
@@ -97,106 +117,106 @@
</layout>
</widget>
</item>
- <item row="4" column="0" colspan="4">
- <widget class="QGroupBox" name="mOperatorsGroupBox">
- <property name="title">
+ <item row="4" column="0" colspan="3" >
+ <widget class="QGroupBox" name="mOperatorsGroupBox" >
+ <property name="title" >
<string>Operators</string>
</property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QPushButton" name="mPlusPushButton">
- <property name="text">
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QPushButton" name="mPlusPushButton" >
+ <property name="text" >
<string>+</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QPushButton" name="mMultiplyPushButton">
- <property name="text">
+ <item row="0" column="1" >
+ <widget class="QPushButton" name="mMultiplyPushButton" >
+ <property name="text" >
<string>*</string>
</property>
</widget>
</item>
- <item row="0" column="2">
- <widget class="QPushButton" name="mSqrtButton">
- <property name="text">
+ <item row="0" column="2" >
+ <widget class="QPushButton" name="mSqrtButton" >
+ <property name="text" >
<string>sqrt</string>
</property>
</widget>
</item>
- <item row="0" column="3">
- <widget class="QPushButton" name="mSinButton">
- <property name="text">
+ <item row="0" column="3" >
+ <widget class="QPushButton" name="mSinButton" >
+ <property name="text" >
<string>sin</string>
</property>
</widget>
</item>
- <item row="0" column="4">
- <widget class="QPushButton" name="mTanButton">
- <property name="text">
+ <item row="0" column="4" >
+ <widget class="QPushButton" name="mTanButton" >
+ <property name="text" >
<string>tan</string>
</property>
</widget>
</item>
- <item row="0" column="5">
- <widget class="QPushButton" name="mACosButton">
- <property name="text">
+ <item row="0" column="5" >
+ <widget class="QPushButton" name="mACosButton" >
+ <property name="text" >
<string>acos</string>
</property>
</widget>
</item>
- <item row="0" column="6">
- <widget class="QPushButton" name="mOpenBracketPushButton">
- <property name="text">
+ <item row="0" column="6" >
+ <widget class="QPushButton" name="mOpenBracketPushButton" >
+ <property name="text" >
<string>(</string>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QPushButton" name="mMinusPushButton">
- <property name="text">
+ <item row="1" column="0" >
+ <widget class="QPushButton" name="mMinusPushButton" >
+ <property name="text" >
<string>-</string>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QPushButton" name="mDividePushButton">
- <property name="text">
+ <item row="1" column="1" >
+ <widget class="QPushButton" name="mDividePushButton" >
+ <property name="text" >
<string>/</string>
</property>
</widget>
</item>
- <item row="1" column="2">
- <widget class="QPushButton" name="mExpButton">
- <property name="text">
+ <item row="1" column="2" >
+ <widget class="QPushButton" name="mExpButton" >
+ <property name="text" >
<string>^</string>
</property>
</widget>
</item>
- <item row="1" column="3">
- <widget class="QPushButton" name="mCosButton">
- <property name="text">
+ <item row="1" column="3" >
+ <widget class="QPushButton" name="mCosButton" >
+ <property name="text" >
<string>cos</string>
</property>
</widget>
</item>
- <item row="1" column="4">
- <widget class="QPushButton" name="mASinButton">
- <property name="text">
+ <item row="1" column="4" >
+ <widget class="QPushButton" name="mASinButton" >
+ <property name="text" >
<string>asin</string>
</property>
</widget>
</item>
- <item row="1" column="5">
- <widget class="QPushButton" name="mATanButton">
- <property name="text">
+ <item row="1" column="5" >
+ <widget class="QPushButton" name="mATanButton" >
+ <property name="text" >
<string>atan</string>
</property>
</widget>
</item>
- <item row="1" column="6">
- <widget class="QPushButton" name="mCloseBracketPushButton">
- <property name="text">
+ <item row="1" column="6" >
+ <widget class="QPushButton" name="mCloseBracketPushButton" >
+ <property name="text" >
<string>)</string>
</property>
</widget>
@@ -204,22 +224,22 @@
</layout>
</widget>
</item>
- <item row="5" column="0" colspan="2">
- <widget class="QLabel" name="mFieldCalculatorExpressionLabel">
- <property name="text">
+ <item row="5" column="0" colspan="2" >
+ <widget class="QLabel" name="mFieldCalculatorExpressionLabel" >
+ <property name="text" >
<string>Field calculator expression:</string>
</property>
</widget>
</item>
- <item row="6" column="0" colspan="4">
- <widget class="QTextEdit" name="mExpressionTextEdit"/>
+ <item row="6" column="0" colspan="3" >
+ <widget class="QTextEdit" name="mExpressionTextEdit" />
</item>
- <item row="7" column="0" colspan="2">
- <widget class="QDialogButtonBox" name="mButtonBox">
- <property name="orientation">
+ <item row="7" column="0" colspan="2" >
+ <widget class="QDialogButtonBox" name="mButtonBox" >
+ <property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
- <property name="standardButtons">
+ <property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
@@ -234,11 +254,11 @@
<receiver>QgsFieldCalculatorBase</receiver>
<slot>accept()</slot>
<hints>
- <hint type="sourcelabel">
+ <hint type="sourcelabel" >
<x>248</x>
<y>254</y>
</hint>
- <hint type="destinationlabel">
+ <hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
@@ -250,11 +270,11 @@
<receiver>QgsFieldCalculatorBase</receiver>
<slot>reject()</slot>
<hints>
- <hint type="sourcelabel">
+ <hint type="sourcelabel" >
<x>316</x>
<y>260</y>
</hint>
- <hint type="destinationlabel">
+ <hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
More information about the QGIS-commit
mailing list