[QGIS Commit] r11856 - in trunk/qgis/src: app app/attributetable core ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Oct 27 12:09:36 EDT 2009


Author: mhugent
Date: 2009-10-27 12:09:34 -0400 (Tue, 27 Oct 2009)
New Revision: 11856

Modified:
   trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp
   trunk/qgis/src/app/qgsfieldcalculator.cpp
   trunk/qgis/src/app/qgsfieldcalculator.h
   trunk/qgis/src/core/qgssearchstringlexer.ll
   trunk/qgis/src/core/qgssearchstringparser.yy
   trunk/qgis/src/core/qgssearchtreenode.cpp
   trunk/qgis/src/core/qgssearchtreenode.h
   trunk/qgis/src/ui/qgsfieldcalculatorbase.ui
Log:
[FEATURE]: possibility to use feature length, feature area, string concatenation and type conversions in field calculator

Modified: trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp
===================================================================
--- trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp	2009-10-27 16:09:34 UTC (rev 11856)
@@ -558,7 +558,7 @@
 void QgsAttributeTableDialog::on_mOpenFieldCalculator_clicked()
 {
   QgsFieldCalculator calc( mLayer );
-  if ( calc.exec() )
+  if ( calc.exec() == QDialog::Accepted )
   {
     // update model - a field has been added or updated
     mModel->reload( mModel->index( 0, 0 ), mModel->index( mModel->rowCount(), mModel->columnCount() ) );

Modified: trunk/qgis/src/app/qgsfieldcalculator.cpp
===================================================================
--- trunk/qgis/src/app/qgsfieldcalculator.cpp	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/app/qgsfieldcalculator.cpp	2009-10-27 16:09:34 UTC (rev 11856)
@@ -43,6 +43,15 @@
     mNewFieldGroupBox->setEnabled( false );
     mNewFieldGroupBox->setTitle( mNewFieldGroupBox->title() + tr( " (not supported by provider)" ) );
   }
+
+  if ( vl->geometryType() != QGis::Polygon )
+  {
+    mAreaButton->setEnabled( false );
+  }
+  if ( vl->geometryType() != QGis::Line )
+  {
+    mLengthButton->setEnabled( false );
+  }
 }
 
 QgsFieldCalculator::~QgsFieldCalculator()
@@ -133,7 +142,9 @@
     // block layerModified signals (that would trigger table update)
     mVectorLayer->blockSignals( true );
 
-    mVectorLayer->select( mVectorLayer->pendingAllAttributesList(), QgsRectangle(), false, false );
+    bool useGeometry = calcString.contains( "$area" ) || calcString.contains( "$length" );
+
+    mVectorLayer->select( mVectorLayer->pendingAllAttributesList(), QgsRectangle(), useGeometry, false );
     while ( mVectorLayer->nextFeature( feature ) )
     {
       if ( onlySelected )
@@ -144,7 +155,15 @@
         }
       }
 
-      QgsSearchTreeValue value = searchTree->valueAgainst( mVectorLayer->pendingFields(), feature.attributeMap() );
+      QgsSearchTreeValue value;
+      if ( useGeometry )
+      {
+        searchTree->getValue( value, searchTree, mVectorLayer->pendingFields(), feature.attributeMap(), feature.geometry() );
+      }
+      else
+      {
+        searchTree->getValue( value, searchTree, mVectorLayer->pendingFields(), feature.attributeMap() );
+      }
       if ( value.isError() )
       {
         calculationSuccess = false;
@@ -332,6 +351,31 @@
   mExpressionTextEdit->insertPlainText( " ) " );
 }
 
+void QgsFieldCalculator::on_mToRealButton_clicked()
+{
+  mExpressionTextEdit->insertPlainText( " to real ( " );
+}
+
+void QgsFieldCalculator::on_mToIntButton_clicked()
+{
+  mExpressionTextEdit->insertPlainText( " to int ( " );
+}
+
+void QgsFieldCalculator::on_mToStringButton_clicked()
+{
+  mExpressionTextEdit->insertPlainText( " to string ( " );
+}
+
+void QgsFieldCalculator::on_mLengthButton_clicked()
+{
+  mExpressionTextEdit->insertPlainText( "$length" );
+}
+
+void QgsFieldCalculator::on_mAreaButton_clicked()
+{
+  mExpressionTextEdit->insertPlainText( "$area" );
+}
+
 void QgsFieldCalculator::on_mSamplePushButton_clicked()
 {
   getFieldValues( 25 );

Modified: trunk/qgis/src/app/qgsfieldcalculator.h
===================================================================
--- trunk/qgis/src/app/qgsfieldcalculator.h	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/app/qgsfieldcalculator.h	2009-10-27 16:09:34 UTC (rev 11856)
@@ -48,6 +48,11 @@
     void on_mATanButton_clicked();
     void on_mOpenBracketPushButton_clicked();
     void on_mCloseBracketPushButton_clicked();
+    void on_mToRealButton_clicked();
+    void on_mToIntButton_clicked();
+    void on_mToStringButton_clicked();
+    void on_mLengthButton_clicked();
+    void on_mAreaButton_clicked();
     void on_mSamplePushButton_clicked();
     void on_mAllPushButton_clicked();
     void on_mOutputFieldNameLineEdit_textChanged( const QString& text );

Modified: trunk/qgis/src/core/qgssearchstringlexer.ll
===================================================================
--- trunk/qgis/src/core/qgssearchstringlexer.ll	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/core/qgssearchstringlexer.ll	2009-10-27 16:09:34 UTC (rev 11856)
@@ -52,6 +52,7 @@
 str_char    ('')|(\\.)|[^'\\]
 string      "'"{str_char}*"'"
 
+
 %%
 
 "NOT"    { return NOT; }
@@ -75,6 +76,9 @@
 "asin" { yylval.op = QgsSearchTreeNode::opASIN; return FUNCTION;}
 "acos" { yylval.op = QgsSearchTreeNode::opACOS; return FUNCTION;}
 "atan" { yylval.op = QgsSearchTreeNode::opATAN; return FUNCTION;}
+"to int" { yylval.op = QgsSearchTreeNode::opTOINT; return FUNCTION;}
+"to real" { yylval.op = QgsSearchTreeNode::opTOREAL; return FUNCTION;}
+"to string" { yylval.op = QgsSearchTreeNode::opTOSTRING; return FUNCTION;}
 
 [+-/*^]    { return yytext[0]; }
 
@@ -84,6 +88,9 @@
 
 {string}  { return STRING; }
 
+"$area" { return AREA; }
+"$length" { return LENGTH; }
+
 {column_ref}   { return COLUMN_REF; }
 
 {white}    /* skip blanks and tabs */

Modified: trunk/qgis/src/core/qgssearchstringparser.yy
===================================================================
--- trunk/qgis/src/core/qgssearchstringparser.yy	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/core/qgssearchstringparser.yy	2009-10-27 16:09:34 UTC (rev 11856)
@@ -61,6 +61,8 @@
 %token <number> NUMBER
 %token <op> COMPARISON
 %token <op> FUNCTION
+%token AREA
+%token LENGTH
 
 %token STRING
 %token COLUMN_REF
@@ -126,10 +128,12 @@
     | '(' scalar_exp ')'          { $$ = $2; }
     | '+' scalar_exp %prec UMINUS { $$ = $2; }
     | '-' scalar_exp %prec UMINUS { $$ = $2; if ($$->type() == QgsSearchTreeNode::tNumber) $$->setNumber(- $$->number()); }
+    | AREA                        { $$ = new QgsSearchTreeNode(QgsSearchTreeNode::opAREA, 0, 0); addToTmpNodes($$); }
+    | LENGTH                      { $$ = new QgsSearchTreeNode(QgsSearchTreeNode::opLENGTH, 0, 0); addToTmpNodes($$); }
     | NUMBER                      { $$ = new QgsSearchTreeNode($1);        addToTmpNodes($$); }
     | STRING                      { $$ = new QgsSearchTreeNode(QString::fromUtf8(yytext), 0); addToTmpNodes($$); }
     | COLUMN_REF                  { $$ = new QgsSearchTreeNode(QString::fromUtf8(yytext), 1); addToTmpNodes($$); }
-    ;
+;
 
 %%
 

Modified: trunk/qgis/src/core/qgssearchtreenode.cpp
===================================================================
--- trunk/qgis/src/core/qgssearchtreenode.cpp	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/core/qgssearchtreenode.cpp	2009-10-27 16:09:34 UTC (rev 11856)
@@ -19,9 +19,11 @@
 
 #include "qgslogger.h"
 #include "qgsfield.h"
+#include "qgsgeometry.h"
 #include "qgssearchtreenode.h"
 #include <QRegExp>
 #include <QObject>
+#include <QSettings>
 #include <iostream>
 
 #ifndef Q_OS_MACX
@@ -50,6 +52,15 @@
   mOp    = op;
   mLeft  = left;
   mRight = right;
+
+  if ( mOp == opLENGTH || mOp == opAREA )
+  {
+    //initialize QgsDistanceArea
+    mCalc.setProjectionsEnabled( false );
+    QSettings settings;
+    QString ellipsoid = settings.value( "/qgis/measure/ellipsoid", "WGS84" ).toString();
+    mCalc.setEllipsoid( ellipsoid );
+  }
 }
 
 
@@ -138,7 +149,10 @@
     str += "(";
     if ( mOp != opNOT )
     {
-      str += mLeft->makeSearchString();
+      if ( mLeft )
+      {
+        str += mLeft->makeSearchString();
+      }
       switch ( mOp )
       {
         case opAND: str += " AND "; break;
@@ -284,9 +298,9 @@
   }
 }
 
-bool QgsSearchTreeNode::getValue( QgsSearchTreeValue& value, QgsSearchTreeNode* node, const QgsFieldMap& fields, const QgsAttributeMap& attributes )
+bool QgsSearchTreeNode::getValue( QgsSearchTreeValue& value, QgsSearchTreeNode* node, const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom )
 {
-  value = node->valueAgainst( fields, attributes );
+  value = node->valueAgainst( fields, attributes, geom );
   if ( value.isError() )
   {
     switch (( int )value.number() )
@@ -316,7 +330,7 @@
   return true;
 }
 
-QgsSearchTreeValue QgsSearchTreeNode::valueAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes )
+QgsSearchTreeValue QgsSearchTreeNode::valueAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom )
 {
   QgsDebugMsgLevel( "valueAgainst: " + makeSearchString(), 2 );
 
@@ -370,14 +384,55 @@
       QgsSearchTreeValue value1, value2;
       if ( mLeft )
       {
-        if ( !getValue( value1, mLeft, fields, attributes ) ) return value1;
+        if ( !getValue( value1, mLeft, fields, attributes, geom ) ) return value1;
       }
       if ( mRight )
       {
-        if ( !getValue( value2, mRight, fields, attributes ) ) return value2;
+        if ( !getValue( value2, mRight, fields, attributes, geom ) ) return value2;
       }
 
-      // convert to numbers if needed
+      if ( mOp == opLENGTH || mOp == opAREA )
+      {
+        if ( !geom )
+        {
+          return QgsSearchTreeValue( 2, "Geometry is 0" );
+        }
+
+        //check that we don't use area for lines or length for polygons
+        if ( mOp == opLENGTH && geom->type() != QGis::Line )
+        {
+          return QgsSearchTreeValue( 0 );
+        }
+        if ( mOp == opAREA && geom->type() != QGis::Polygon )
+        {
+          return QgsSearchTreeValue( 0 );
+        }
+        return QgsSearchTreeValue( mCalc.measure( geom ) );
+      }
+
+      //string operations with one argument
+      if ( !mRight && !value1.isNumeric() )
+      {
+        if ( mOp == opTOINT )
+        {
+          return QgsSearchTreeValue( value1.string().toInt() );
+        }
+        else if ( mOp == opTOREAL )
+        {
+          return QgsSearchTreeValue( value1.string().toDouble() );
+        }
+      }
+
+      //don't convert to numbers in case of string concatenation
+      if ( mLeft && mRight && !value1.isNumeric() && !value2.isNumeric() )
+      {
+        if ( mOp == opPLUS )
+        {
+          return QgsSearchTreeValue( value1.string() + value2.string() );
+        }
+      }
+
+      // for other operators, convert strings to numbers if needed
       double val1, val2;
       if ( value1.isNumeric() )
         val1 = value1.number();
@@ -423,6 +478,12 @@
           return QgsSearchTreeValue( acos( val1 ) );
         case opATAN:
           return QgsSearchTreeValue( atan( val1 ) );
+        case opTOINT:
+          return QgsSearchTreeValue( int( val1 ) );
+        case opTOREAL:
+          return QgsSearchTreeValue( val1 );
+        case opTOSTRING:
+          return QgsSearchTreeValue( QString::number( val1 ) );
       }
     }
 

Modified: trunk/qgis/src/core/qgssearchtreenode.h
===================================================================
--- trunk/qgis/src/core/qgssearchtreenode.h	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/core/qgssearchtreenode.h	2009-10-27 16:09:34 UTC (rev 11856)
@@ -24,6 +24,7 @@
 #include <QString>
 #include <QVariant>
 
+#include <qgsdistancearea.h>
 #include <qgsfield.h>
 #include <qgsfeature.h>
 
@@ -70,6 +71,11 @@
       opASIN,
       opACOS,
       opATAN,
+      opTOINT,
+      opTOREAL,
+      opTOSTRING,
+      opLENGTH,
+      opAREA,
 
       // comparison
       opEQ,   // =
@@ -126,14 +132,16 @@
     //! returns error message
     const QString& errorMsg() { return mError; }
 
-    //! returns scalar value of node
-    QgsSearchTreeValue valueAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes );
-
-  protected:
     //! wrapper around valueAgainst()
     bool getValue( QgsSearchTreeValue& value, QgsSearchTreeNode* node,
-                   const QgsFieldMap& fields, const QgsAttributeMap& attributes );
+                   const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom = 0 );
 
+  protected:
+
+
+    //! returns scalar value of node
+    QgsSearchTreeValue valueAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom = 0 );
+
     //! strips mText when node is of string type
     void stripText();
 
@@ -152,6 +160,9 @@
     //! children
     QgsSearchTreeNode* mLeft;
     QgsSearchTreeNode* mRight;
+
+    /**For length() and area() functions*/
+    QgsDistanceArea mCalc;
 };
 
 // TODO: poslat do zvlast suboru

Modified: trunk/qgis/src/ui/qgsfieldcalculatorbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsfieldcalculatorbase.ui	2009-10-27 13:04:58 UTC (rev 11855)
+++ trunk/qgis/src/ui/qgsfieldcalculatorbase.ui	2009-10-27 16:09:34 UTC (rev 11856)
@@ -1,127 +1,128 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<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>615</width>
-    <height>628</height>
+    <width>478</width>
+    <height>686</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Field calculator</string>
   </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QCheckBox" name="mUpdateExistingFieldCheckBox" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout_2">
+   <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="1" colspan="2" >
-    <widget class="QComboBox" name="mExistingFieldComboBox" />
+   <item row="0" column="1">
+    <widget class="QComboBox" name="mExistingFieldComboBox"/>
    </item>
-   <item row="1" column="0" colspan="3" >
-    <widget class="QCheckBox" name="mOnlyUpdateSelectedCheckBox" >
-     <property name="text" >
+   <item row="1" column="0" colspan="2">
+    <widget class="QCheckBox" name="mOnlyUpdateSelectedCheckBox">
+     <property name="text">
       <string>Only update selected features</string>
      </property>
     </widget>
    </item>
-   <item row="2" column="0" colspan="3" >
-    <widget class="QGroupBox" name="mNewFieldGroupBox" >
-     <property name="title" >
+   <item row="2" column="0" colspan="3">
+    <widget class="QGroupBox" name="mNewFieldGroupBox">
+     <property name="title">
       <string>New field</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" >
-       <widget class="QLabel" name="mFieldNameLabel" >
-        <property name="text" >
+     <layout class="QGridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="mFieldNameLabel">
+        <property name="text">
          <string>Output field name</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>mOutputFieldNameLineEdit</cstring>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" colspan="3" >
-       <widget class="QLineEdit" name="mOutputFieldNameLineEdit" />
+      <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" >
+      <item row="1" column="0">
+       <widget class="QLabel" name="mOutputFieldTypeLabel">
+        <property name="text">
          <string>Output field type</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>mOutputFieldTypeComboBox</cstring>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" colspan="3" >
-       <widget class="QComboBox" name="mOutputFieldTypeComboBox" />
+      <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" >
+      <item row="2" column="0">
+       <widget class="QLabel" name="mOutputFieldWidthLabel">
+        <property name="text">
          <string>Output field width</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>mOuputFieldWidthSpinBox</cstring>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QSpinBox" name="mOuputFieldWidthSpinBox" />
+      <item row="2" column="1">
+       <widget class="QSpinBox" name="mOuputFieldWidthSpinBox"/>
       </item>
-      <item row="2" column="2" >
-       <widget class="QLabel" name="mOutputFieldPrecisionLabel" >
-        <property name="text" >
+      <item row="2" column="2">
+       <widget class="QLabel" name="mOutputFieldPrecisionLabel">
+        <property name="text">
          <string>Output field precision</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>mOutputFieldPrecisionSpinBox</cstring>
         </property>
        </widget>
       </item>
-      <item row="2" column="3" >
-       <widget class="QSpinBox" name="mOutputFieldPrecisionSpinBox" />
+      <item row="2" column="3">
+       <widget class="QSpinBox" name="mOutputFieldPrecisionSpinBox"/>
       </item>
      </layout>
     </widget>
    </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>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" >
-       <widget class="QListWidget" name="mFieldsListWidget" />
+     <layout class="QGridLayout">
+      <item row="0" column="0">
+       <widget class="QListWidget" name="mFieldsListWidget"/>
       </item>
      </layout>
     </widget>
    </item>
-   <item row="3" column="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" >
-      <item row="0" column="0" colspan="2" >
-       <widget class="QListWidget" name="mValueListWidget" />
+     <layout class="QGridLayout">
+      <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>
@@ -129,133 +130,168 @@
      </layout>
     </widget>
    </item>
-   <item row="4" column="0" colspan="3" >
-    <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" >
-      <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>
       </item>
+      <item row="2" column="0">
+       <widget class="QPushButton" name="mToRealButton">
+        <property name="text">
+         <string>to real</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QPushButton" name="mToIntButton">
+        <property name="text">
+         <string>to int</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QPushButton" name="mToStringButton">
+        <property name="text">
+         <string>to string</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QPushButton" name="mLengthButton">
+        <property name="text">
+         <string>length</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="4">
+       <widget class="QPushButton" name="mAreaButton">
+        <property name="text">
+         <string>area</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
-   <item row="5" column="0" colspan="2" >
-    <widget class="QLabel" name="mFieldCalculatorExpressionLabel" >
-     <property name="text" >
+   <item row="5" column="0">
+    <widget class="QLabel" name="mFieldCalculatorExpressionLabel">
+     <property name="text">
       <string>Field calculator expression</string>
      </property>
-     <property name="buddy" >
+     <property name="buddy">
       <cstring>mExpressionTextEdit</cstring>
      </property>
     </widget>
    </item>
-   <item row="6" column="0" colspan="3" >
-    <widget class="QTextEdit" name="mExpressionTextEdit" />
+   <item row="6" column="0" colspan="3">
+    <widget class="QTextEdit" name="mExpressionTextEdit"/>
    </item>
-   <item row="7" column="0" colspan="3" >
-    <widget class="QDialogButtonBox" name="mButtonBox" >
-     <property name="orientation" >
+   <item row="7" column="0">
+    <widget class="QDialogButtonBox" name="mButtonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
@@ -269,11 +305,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>
@@ -285,11 +321,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