Quantum GIS API Documentation  1.7.4
src/core/qgsvectorlayerundocommand.h
Go to the documentation of this file.
00001 
00002 #ifndef QGSVECTORLAYERUNDOCOMMAND_H
00003 #define QGSVECTORLAYERUNDOCOMMAND_H
00004 
00005 #include <QUndoCommand>
00006 
00007 #include <QVariant>
00008 #include <QSet>
00009 #include <QList>
00010 
00011 #include "qgsfield.h"
00012 #include "qgsfeature.h"
00013 
00014 class QgsGeometry;
00015 class QgsVectorLayer;
00016 
00017 
00018 // TODO: copied from qgsvectorlayer.h
00019 typedef QList<int> QgsAttributeList;
00020 typedef QSet<int> QgsFeatureIds;
00021 typedef QSet<int> QgsAttributeIds;
00022 
00023 
00024 
00028 class QgsUndoCommand : public QUndoCommand
00029 {
00030   public:
00031 
00033     class AttributeChangeEntry
00034     {
00035       public:
00036         bool isFirstChange;
00037         QVariant original;
00038         QVariant target;
00039     };
00040 
00041     typedef QMap<int, AttributeChangeEntry> AttributeChanges;
00042 
00044     class GeometryChangeEntry
00045     {
00046       public:
00047         GeometryChangeEntry();
00048         ~GeometryChangeEntry();
00049 
00050         void setOriginalGeometry( QgsGeometry& orig );
00051         void setTargetGeometry( QgsGeometry& target );
00052 
00053         QgsGeometry* original;
00054         QgsGeometry* target;
00055     };
00056 
00057 
00058     QgsUndoCommand( QgsVectorLayer* layer, QString text );
00059 
00063     void undo();
00064 
00068     void redo();
00069 
00076     void storeGeometryChange( int featureId, QgsGeometry& original, QgsGeometry& target );
00077 
00086     void storeAttributeChange( int featureId, int field, QVariant original, QVariant target, bool isFirstChange );
00087 
00092     void storeFeatureDelete( int featureId );
00093 
00098     void storeFeatureAdd( QgsFeature& feature );
00099 
00105     void storeAttributeAdd( int index, const QgsField & value );
00106 
00112     void storeAttributeDelete( int index, const QgsField & orig );
00113 
00114   private:
00116     bool mFirstRun;
00117 
00119     QgsVectorLayer* mLayer;
00120 
00122     QMap<int, GeometryChangeEntry> mGeometryChange;
00123 
00125     QMap<int, AttributeChanges> mAttributeChange;
00126 
00131     QgsFeatureIds mDeletedFeatureIdChange;
00132 
00134     QgsFieldMap mAddedAttributes;
00135 
00137     QgsFieldMap mDeletedAttributes;
00138 
00142     QgsFeatureList mAddedFeatures;
00143 
00144     friend class QgsVectorLayer;
00145 };
00146 
00147 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines