Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectorlayerundocommand.h 3 : : --------------------- 4 : : begin : June 2009 5 : : copyright : (C) 2009 by Martin Dobias 6 : : email : wonder dot sk at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSVECTORLAYERUNDOCOMMAND_H 17 : : #define QGSVECTORLAYERUNDOCOMMAND_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include <QUndoCommand> 22 : : 23 : : #include <QVariant> 24 : : #include <QSet> 25 : : #include <QList> 26 : : 27 : : #include "qgsfields.h" 28 : : #include "qgsfeature.h" 29 : : 30 : : class QgsGeometry; 31 : : 32 : : #include "qgsvectorlayereditbuffer.h" 33 : : 34 : : /** 35 : : * \ingroup core 36 : : * \class QgsVectorLayerUndoCommand 37 : : * \brief Base class for undo commands within a QgsVectorLayerEditBuffer. 38 : : */ 39 : : 40 : 2 : class CORE_EXPORT QgsVectorLayerUndoCommand : public QUndoCommand 41 : : { 42 : : public: 43 : : 44 : : /** 45 : : * Constructor for QgsVectorLayerUndoCommand 46 : : * \param buffer associated edit buffer 47 : : */ 48 : 2 : QgsVectorLayerUndoCommand( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER ) 49 : 2 : : mBuffer( buffer ) 50 : 6 : {} 51 : : 52 : : //! Returns the layer associated with the undo command 53 : 0 : inline QgsVectorLayer *layer() { return mBuffer->L; } 54 : : 55 : 1 : int id() const override { return -1; } 56 : 0 : bool mergeWith( const QUndoCommand * ) override { return false; } 57 : : 58 : : protected: 59 : : //! Associated edit buffer 60 : : QgsVectorLayerEditBuffer *mBuffer = nullptr; 61 : : }; 62 : : 63 : : 64 : : /** 65 : : * \ingroup core 66 : : * \class QgsVectorLayerUndoCommandAddFeature 67 : : * \brief Undo command for adding a feature to a vector layer. 68 : : */ 69 : : 70 : 2 : class CORE_EXPORT QgsVectorLayerUndoCommandAddFeature : public QgsVectorLayerUndoCommand 71 : : { 72 : : public: 73 : : 74 : : /** 75 : : * Constructor for QgsVectorLayerUndoCommandAddFeature 76 : : * \param buffer associated edit buffer 77 : : * \param f feature to add to layer 78 : : */ 79 : : QgsVectorLayerUndoCommandAddFeature( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeature &f ); 80 : : 81 : : void undo() override; 82 : : void redo() override; 83 : : 84 : : private: 85 : : QgsFeature mFeature; 86 : : }; 87 : : 88 : : 89 : : /** 90 : : * \ingroup core 91 : : * \class QgsVectorLayerUndoCommandDeleteFeature 92 : : * \brief Undo command for deleting a feature from a vector layer. 93 : : */ 94 : : 95 : 0 : class CORE_EXPORT QgsVectorLayerUndoCommandDeleteFeature : public QgsVectorLayerUndoCommand 96 : : { 97 : : public: 98 : : 99 : : /** 100 : : * Constructor for QgsVectorLayerUndoCommandDeleteFeature 101 : : * \param buffer associated edit buffer 102 : : * \param fid feature ID of feature to delete from layer 103 : : */ 104 : : QgsVectorLayerUndoCommandDeleteFeature( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid ); 105 : : 106 : : void undo() override; 107 : : void redo() override; 108 : : 109 : : private: 110 : : QgsFeatureId mFid; 111 : : QgsFeature mOldAddedFeature; 112 : : }; 113 : : 114 : : /** 115 : : * \ingroup core 116 : : * \class QgsVectorLayerUndoCommandChangeGeometry 117 : : * \brief Undo command for modifying the geometry of a feature from a vector layer. 118 : : */ 119 : : 120 : 2 : class CORE_EXPORT QgsVectorLayerUndoCommandChangeGeometry : public QgsVectorLayerUndoCommand 121 : : { 122 : : public: 123 : : 124 : : /** 125 : : * Constructor for QgsVectorLayerUndoCommandChangeGeometry 126 : : * \param buffer associated edit buffer 127 : : * \param fid feature ID of feature to modify geometry of 128 : : * \param newGeom new geometry for feature 129 : : */ 130 : : QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, const QgsGeometry &newGeom ); 131 : : 132 : : void undo() override; 133 : : void redo() override; 134 : 0 : int id() const override { return 1; } 135 : : bool mergeWith( const QUndoCommand *other ) override; 136 : : 137 : : private: 138 : : QgsFeatureId mFid; 139 : : QgsGeometry mOldGeom; 140 : : mutable QgsGeometry mNewGeom; 141 : : }; 142 : : 143 : : 144 : : /** 145 : : * \ingroup core 146 : : * \class QgsVectorLayerUndoCommandChangeAttribute 147 : : * \brief Undo command for modifying an attribute of a feature from a vector layer. 148 : : */ 149 : : 150 : 0 : class CORE_EXPORT QgsVectorLayerUndoCommandChangeAttribute : public QgsVectorLayerUndoCommand 151 : : { 152 : : public: 153 : : 154 : : /** 155 : : * Constructor for QgsVectorLayerUndoCommandChangeAttribute 156 : : * \param buffer associated edit buffer 157 : : * \param fid feature ID of feature to modify 158 : : * \param fieldIndex index of field to modify 159 : : * \param newValue new value of attribute 160 : : * \param oldValue previous value of attribute 161 : : */ 162 : : QgsVectorLayerUndoCommandChangeAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, int fieldIndex, const QVariant &newValue, const QVariant &oldValue ); 163 : : void undo() override; 164 : : void redo() override; 165 : : 166 : : private: 167 : : QgsFeatureId mFid; 168 : : int mFieldIndex; 169 : : QVariant mOldValue; 170 : : QVariant mNewValue; 171 : : bool mFirstChange; 172 : : }; 173 : : 174 : : /** 175 : : * \ingroup core 176 : : * \class QgsVectorLayerUndoCommandAddAttribute 177 : : * \brief Undo command for adding a new attribute to a vector layer. 178 : : */ 179 : : 180 : 0 : class CORE_EXPORT QgsVectorLayerUndoCommandAddAttribute : public QgsVectorLayerUndoCommand 181 : : { 182 : : public: 183 : : 184 : : /** 185 : : * Constructor for QgsVectorLayerUndoCommandAddAttribute 186 : : * \param buffer associated edit buffer 187 : : * \param field definition of new field to add 188 : : */ 189 : : QgsVectorLayerUndoCommandAddAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, const QgsField &field ); 190 : : 191 : : void undo() override; 192 : : void redo() override; 193 : : 194 : : private: 195 : : QgsField mField; 196 : : int mFieldIndex; 197 : : }; 198 : : 199 : : /** 200 : : * \ingroup core 201 : : * \class QgsVectorLayerUndoCommandDeleteAttribute 202 : : * \brief Undo command for removing an existing attribute from a vector layer. 203 : : */ 204 : : 205 : 0 : class CORE_EXPORT QgsVectorLayerUndoCommandDeleteAttribute : public QgsVectorLayerUndoCommand 206 : : { 207 : : public: 208 : : 209 : : /** 210 : : * Constructor for QgsVectorLayerUndoCommandDeleteAttribute 211 : : * \param buffer associated edit buffer 212 : : * \param fieldIndex index of field to delete 213 : : */ 214 : : QgsVectorLayerUndoCommandDeleteAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int fieldIndex ); 215 : : 216 : : void undo() override; 217 : : void redo() override; 218 : : 219 : : private: 220 : : int mFieldIndex; 221 : : QString mFieldName; 222 : : bool mProviderField; 223 : : int mOriginIndex; 224 : : QgsField mOldField; 225 : : QVariantMap mOldEditorWidgetConfig; 226 : : 227 : : QMap<QgsFeatureId, QVariant> mDeletedValues; 228 : : QString mOldName; 229 : : }; 230 : : 231 : : 232 : : /** 233 : : * \ingroup core 234 : : * \class QgsVectorLayerUndoCommandRenameAttribute 235 : : * \brief Undo command for renaming an existing attribute of a vector layer. 236 : : * \since QGIS 2.16 237 : : */ 238 : : 239 : 0 : class CORE_EXPORT QgsVectorLayerUndoCommandRenameAttribute : public QgsVectorLayerUndoCommand 240 : : { 241 : : public: 242 : : 243 : : /** 244 : : * Constructor for QgsVectorLayerUndoCommandRenameAttribute 245 : : * \param buffer associated edit buffer 246 : : * \param fieldIndex index of field to rename 247 : : * \param newName new name for field 248 : : */ 249 : : QgsVectorLayerUndoCommandRenameAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int fieldIndex, const QString &newName ); 250 : : 251 : : void undo() override; 252 : : void redo() override; 253 : : 254 : : private: 255 : : int mFieldIndex; 256 : : bool mProviderField; 257 : : int mOriginIndex; 258 : : QString mOldName; 259 : : QString mNewName; 260 : : }; 261 : : 262 : : #endif