mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-25 00:05:24 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			254 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /** \class QgsFields
 | |
|  * \ingroup core
 | |
|  * Container of fields for a vector layer.
 | |
|  *
 | |
|  * In addition to storing a list of QgsField instances, it also:
 | |
|  * - allows quick lookups of field names to index in the list
 | |
|  * - keeps track of where the field definition comes from (vector data provider, joined layer or newly added from an editing operation)
 | |
|  * \note QgsFields objects are implicitly shared.
 | |
|  */
 | |
| 
 | |
| class QgsFields
 | |
| {
 | |
| %TypeHeaderCode
 | |
| #include <qgsfield.h>
 | |
| %End
 | |
|   public:
 | |
| 
 | |
|     enum FieldOrigin
 | |
|     {
 | |
|       OriginUnknown,   //!< it has not been specified where the field comes from
 | |
|       OriginProvider,  //!< field comes from the underlying data provider of the vector layer  (originIndex = index in provider's fields)
 | |
|       OriginJoin,      //!< field comes from a joined layer   (originIndex / 1000 = index of the join, originIndex % 1000 = index within the join)
 | |
|       OriginEdit,      //!< field has been temporarily added in editing mode (originIndex = index in the list of added attributes)
 | |
|       OriginExpression //!< field is calculated from an expression
 | |
|     };
 | |
| 
 | |
|     /** Constructor for an empty field container
 | |
|      */
 | |
|     QgsFields();
 | |
| 
 | |
|     /** Copy constructor
 | |
|      */
 | |
|     QgsFields( const QgsFields& other );
 | |
| 
 | |
|     virtual ~QgsFields();
 | |
| 
 | |
|     //! Remove all fields
 | |
|     void clear();
 | |
|     //! Append a field. The field must have unique name, otherwise it is rejected (returns false)
 | |
|     bool append( const QgsField& field, FieldOrigin origin = OriginProvider, int originIndex = -1 );
 | |
|     //! Append an expression field. The field must have unique name, otherwise it is rejected (returns false)
 | |
|     bool appendExpressionField( const QgsField& field, int originIndex );
 | |
|     //! Remove a field with the given index
 | |
|     void remove( int fieldIdx );
 | |
| %MethodCode
 | |
|   if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipCpp->remove( a0 );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     //! Extend with fields from another QgsFields container
 | |
|     void extend( const QgsFields& other );
 | |
| 
 | |
|     //! Check whether the container is empty
 | |
|     bool isEmpty() const;
 | |
|     //! Return number of items
 | |
|     int count() const;
 | |
|     // __len__ annotation since sip 4.10.3
 | |
|     //int count() const /__len__/;
 | |
|     int __len__() const;
 | |
| %MethodCode
 | |
|   sipRes = sipCpp->count();
 | |
| %End
 | |
|     //! Return number of items
 | |
|     int size() const;
 | |
|     //! Return if a field index is valid
 | |
|     //! @param i  Index of the field which needs to be checked
 | |
|     //! @return   True if the field exists
 | |
|     bool exists( int i ) const;
 | |
| 
 | |
|     //! Get field at particular index (must be in range 0..N-1)
 | |
|     // const QgsField& operator[]( int i ) const;
 | |
|     QgsField& operator[](int i) /Factory/;
 | |
| %MethodCode
 | |
|   SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
 | |
|   if (idx < 0)
 | |
|     sipIsErr = 1;
 | |
|   else
 | |
|     sipRes = new QgsField(sipCpp->operator[](idx));
 | |
| %End
 | |
| 
 | |
|     //! Get field at particular index (must be in range 0..N-1)
 | |
|     QgsField at( int i ) const /Factory/;
 | |
| %MethodCode
 | |
|   if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipRes = new QgsField( sipCpp->at( a0 ) );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     //! Get field at particular index (must be in range 0..N-1)
 | |
|     QgsField field( int fieldIdx ) const /Factory/;
 | |
| %MethodCode
 | |
|   if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipRes = new QgsField( sipCpp->field( a0 ) );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     //! Get field at particular index (must be in range 0..N-1)
 | |
|     QgsField field( const QString& name ) const /Factory/;
 | |
| %MethodCode
 | |
|   int fieldIdx = sipCpp->indexFromName(*a0);
 | |
|   if (fieldIdx == -1)
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, a0->toAscii());
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipRes = new QgsField( sipCpp->field( *a0 ) );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     //! Get field's origin (value from an enumeration)
 | |
|     FieldOrigin fieldOrigin( int fieldIdx ) const;
 | |
| %MethodCode
 | |
|   if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipRes = sipCpp->fieldOrigin( a0 );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     //! Get field's origin index (its meaning is specific to each type of origin)
 | |
|     int fieldOriginIndex( int fieldIdx ) const;
 | |
| %MethodCode
 | |
|   if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|   {
 | |
|     PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|     sipIsErr = 1;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     sipRes = sipCpp->fieldOriginIndex( a0 );
 | |
|   }
 | |
| %End
 | |
| 
 | |
|     /**
 | |
|      * Get the field index from the field name.
 | |
|      * This method takes is case sensitive and only matches the data source
 | |
|      * name of the field.
 | |
|      * Alias for indexOf
 | |
|      *
 | |
|      * @param fieldName The name of the field.
 | |
|      *
 | |
|      * @return The field index if found or -1 in case it cannot be found.
 | |
|      * @see lookupField For a more tolerant alternative.
 | |
|      */
 | |
|     int indexFromName( const QString& fieldName ) const;
 | |
| 
 | |
|     /**
 | |
|      * Get the field index from the field name.
 | |
|      * This method takes is case sensitive and only matches the data source
 | |
|      * name of the field.
 | |
|      *
 | |
|      * @param fieldName The name of the field.
 | |
|      *
 | |
|      * @return The field index if found or -1 in case it cannot be found.
 | |
|      * @see lookupField For a more tolerant alternative.
 | |
|      * @note Added in QGIS 3.0
 | |
|      */
 | |
|     int indexOf( const QString& fieldName ) const;
 | |
| 
 | |
|     /**
 | |
|      * Look up field's index from the field name.
 | |
|      * This method matches in the following order:
 | |
|      *
 | |
|      *  1. The exact field name taking case sensitivity into account
 | |
|      *  2. Looks for the field name by case insensitive comparison
 | |
|      *  3. The field alias (case insensitive)
 | |
|      *
 | |
|      * @param fieldName The name to look for.
 | |
|      *
 | |
|      * @return The field index if found or -1 in case it cannot be found.
 | |
|      * @see indexFromName For a more performant and precise but less tolerant alternative.
 | |
|      * @note added in 2.4
 | |
|      */
 | |
|     int lookupField( const QString& fieldName ) const;
 | |
| 
 | |
|     //! Utility function to get list of attribute indexes
 | |
|     //! @note added in 2.4
 | |
|     QgsAttributeList allAttributesList() const;
 | |
| 
 | |
|     //! Utility function to return a list of QgsField instances
 | |
|     QList<QgsField> toList() const;
 | |
| 
 | |
|     //! @note added in 2.6
 | |
|     bool operator==( const QgsFields& other ) const;
 | |
|     //! @note added in 2.6
 | |
|     bool operator!=( const QgsFields& other ) const;
 | |
| 
 | |
|     /** Returns an icon corresponding to a field index, based on the field's type and source
 | |
|      * @note added in QGIS 2.14
 | |
|      */
 | |
|     QIcon iconForField( int fieldIdx ) const /Factory/;
 | |
|     %MethodCode
 | |
|       if ( a0 < 0 || a0 >= sipCpp->count() )
 | |
|       {
 | |
|         PyErr_SetString(PyExc_KeyError, QByteArray::number(a0));
 | |
|         sipIsErr = 1;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         sipRes = new QIcon( sipCpp->iconForField( a0 ) );
 | |
|       }
 | |
|     %End
 | |
| 
 | |
|     //! Allows direct construction of QVariants from fields.
 | |
|     operator QVariant() const;
 | |
| 
 | |
| /*  SIP_PYOBJECT __getitem__(int key);
 | |
| %MethodCode
 | |
|   if (a0 = sipConvertFromSequenceIndex(a0, sipCpp->count()) < 0)
 | |
|     sipIsErr = 1;
 | |
|   else
 | |
|   {
 | |
|     qDebug("__getitem__ %d", a0);
 | |
|     QgsField* fld = new QgsField(sipCpp->at(a0));
 | |
|     sipRes = sipConvertFromType(fld, sipType_QgsField, Py_None);
 | |
|   }
 | |
| %End*/
 | |
| 
 | |
| void __setitem__(int key, const QgsField& field);
 | |
| %MethodCode
 | |
|   int idx = (int)sipConvertFromSequenceIndex(a0, sipCpp->count());
 | |
|   if (idx < 0)
 | |
|     sipIsErr = 1;
 | |
|   else
 | |
|     (*sipCpp)[idx] = *a1;
 | |
| %End
 | |
| 
 | |
| };
 |