|
QGIS API Documentation
master-3f58142
|
00001 /*************************************************************************** 00002 qgsfield.h - Describes a field in a layer or table 00003 -------------------------------------- 00004 Date : 01-Jan-2004 00005 Copyright : (C) 2004 by Gary E.Sherman 00006 email : sherman at mrcc.com 00007 *************************************************************************** 00008 * * 00009 * This program is free software; you can redistribute it and/or modify * 00010 * it under the terms of the GNU General Public License as published by * 00011 * the Free Software Foundation; either version 2 of the License, or * 00012 * (at your option) any later version. * 00013 * * 00014 ***************************************************************************/ 00015 00016 #ifndef QGSFIELD_H 00017 #define QGSFIELD_H 00018 00019 #include <QString> 00020 #include <QVariant> 00021 #include <QVector> 00022 00029 class CORE_EXPORT QgsField 00030 { 00031 public: 00044 QgsField( QString name = QString(), 00045 QVariant::Type type = QVariant::Invalid, 00046 QString typeName = QString(), 00047 int len = 0, 00048 int prec = 0, 00049 QString comment = QString() ); 00050 00052 ~QgsField(); 00053 00054 bool operator==( const QgsField& other ) const; 00055 bool operator!=( const QgsField& other ) const; 00056 00058 const QString & name() const; 00059 00061 QVariant::Type type() const; 00062 00069 const QString & typeName() const; 00070 00071 00076 int length() const; 00077 00078 00083 int precision() const; 00084 00088 const QString & comment() const; 00089 00094 void setName( const QString & nam ); 00095 00099 void setType( QVariant::Type type ); 00100 00105 void setTypeName( const QString & typ ); 00106 00111 void setLength( int len ); 00112 00117 void setPrecision( int prec ); 00118 00119 00123 void setComment( const QString & comment ); 00124 00126 QString displayString( const QVariant& v ) const; 00127 00128 private: 00129 00131 QString mName; 00132 00134 QVariant::Type mType; 00135 00137 QString mTypeName; 00138 00140 int mLength; 00141 00143 int mPrecision; 00144 00146 QString mComment; 00147 00148 }; // class QgsField 00149 00150 // key = field index, value=field data 00151 typedef QMap<int, QgsField> QgsFieldMap; 00152 00153 00154 00155 class CORE_EXPORT QgsFields 00156 { 00157 public: 00158 00159 enum FieldOrigin { OriginUnknown, OriginProvider, OriginJoin, OriginEdit }; 00160 typedef struct Field 00161 { 00162 Field(): origin( OriginUnknown ), originIndex( -1 ) {} 00163 Field( const QgsField& f, FieldOrigin o, int oi ): field( f ), origin( o ), originIndex( oi ) {} 00164 00165 QgsField field; 00166 FieldOrigin origin; // TODO[MD]: originIndex or QVariant originID? 00167 int originIndex; 00168 } Field; 00169 00170 void clear() { mFields.clear(); mNameToIndex.clear(); } 00172 bool append( const QgsField& field, FieldOrigin origin = OriginProvider, int originIndex = -1 ) 00173 { 00174 if ( mNameToIndex.contains( field.name() ) ) 00175 return false; 00176 00177 if ( originIndex == -1 && origin == OriginProvider ) 00178 originIndex = mFields.count(); 00179 mFields.append( Field( field, origin, originIndex ) ); 00180 00181 mNameToIndex.insert( field.name(), mFields.count() - 1 ); 00182 return true; 00183 } 00184 void remove( int fieldIdx ) { mNameToIndex.remove( mFields[fieldIdx].field.name() ); mFields.remove( fieldIdx ); } 00185 00186 inline bool isEmpty() const { return mFields.isEmpty(); } 00187 inline int count() const { return mFields.count(); } 00188 inline int size() const { return mFields.count(); } // TODO[MD]: delete? 00189 inline const QgsField& operator[]( int i ) const { return mFields[i].field; } 00190 inline QgsField& operator[]( int i ) { return mFields[i].field; } 00191 const QgsField& at( int i ) const { return mFields[i].field; } 00192 QList<QgsField> toList() const { QList<QgsField> lst; for ( int i = 0; i < mFields.count(); ++i ) lst.append( mFields[i].field ); return lst; } // TODO[MD]: delete? 00193 00194 const QgsField& field( int fieldIdx ) const { return mFields[fieldIdx].field; } 00195 const QgsField& field( const QString& name ) const { return mFields[ indexFromName( name )].field; } 00196 FieldOrigin fieldOrigin( int fieldIdx ) const { return mFields[fieldIdx].origin; } 00197 int fieldOriginIndex( int fieldIdx ) const { return mFields[fieldIdx].originIndex; } 00198 00199 int indexFromName( const QString& name ) const { return mNameToIndex.value( name, -1 ); } 00200 00201 protected: 00202 QVector<Field> mFields; 00203 00205 QHash<QString, int> mNameToIndex; 00206 }; 00207 00208 00209 #endif