Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectorlayerundopassthroughcommand.h 3 : : --------------------- 4 : : begin : June 2017 5 : : copyright : (C) 2017 by Vincent Mora 6 : : email : vincent dot mora at osalndia 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 QGSVECTORLAYERUNDOPASSTHROUGHCOMMAND_H 17 : : #define QGSVECTORLAYERUNDOPASSTHROUGHCOMMAND_H 18 : : 19 : : #include "qgsvectorlayerundocommand.h" 20 : : 21 : : #include "qgsvectorlayereditbuffer.h" 22 : : 23 : : class QgsTransaction; 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \class QgsVectorLayerUndoPassthroughCommand 28 : : * \brief Undo command for vector layer in transaction group mode. 29 : : * \since QGIS 3.0 30 : : */ 31 : : 32 : : 33 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommand : public QgsVectorLayerUndoCommand 34 : : { 35 : : public: 36 : : 37 : : /** 38 : : * Constructor for QgsVectorLayerUndoPassthroughCommand 39 : : * \param buffer associated edit buffer 40 : : * \param text text associated with command 41 : : * \param autocreate flag allowing to automatically create a savepoint if necessary 42 : : */ 43 : : QgsVectorLayerUndoPassthroughCommand( QgsVectorLayerEditBuffer *buffer, const QString &text, bool autocreate = true ); 44 : : 45 : : /** 46 : : * Returns error status 47 : : */ 48 : 0 : bool hasError() const { return mHasError; } 49 : : 50 : : protected: 51 : : 52 : : /** 53 : : * Rollback command, release savepoint or set error status 54 : : * save point must be set prior to call 55 : : * error satus should be FALSE prior to call 56 : : */ 57 : : bool rollBackToSavePoint(); 58 : : 59 : : /** 60 : : * Set the command savepoint or set error status. 61 : : * Error satus should be FALSE prior to call. If the savepoint given in 62 : : * parameter is empty, then a new one is created if none is currently 63 : : * available in the transaction. 64 : : */ 65 : : bool setSavePoint( const QString &savePointId = QString() ); 66 : : 67 : : /** 68 : : * Set error flag and append "failed" to text 69 : : */ 70 : : void setError(); 71 : : 72 : : /** 73 : : * Sets the error message. 74 : : * 75 : : * \since QGIS 3.0 76 : : */ 77 : : void setErrorMessage( const QString &errorMessage ); 78 : : 79 : : /** 80 : : * Returns the error message or an empty string if there's none. 81 : : * 82 : : * \since QGIS 3.0 83 : : */ 84 : : QString errorMessage() const; 85 : : 86 : : private: 87 : : QString mError; 88 : : QString mSavePointId; 89 : : bool mHasError; 90 : : bool mRecreateSavePoint; 91 : : }; 92 : : 93 : : /** 94 : : * \ingroup core 95 : : * \class QgsVectorLayerUndoPassthroughCommandAddFeatures 96 : : * \brief Undo command for adding a feature to a vector layer in transaction group mode. 97 : : * \since QGIS 3.0 98 : : */ 99 : : 100 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandAddFeatures : public QgsVectorLayerUndoPassthroughCommand 101 : : { 102 : : public: 103 : : 104 : : /** 105 : : * Constructor for QgsVectorLayerUndoPassthroughCommandAddFeatures 106 : : * \param buffer associated edit buffer 107 : : * \param features features to add to layer 108 : : */ 109 : : QgsVectorLayerUndoPassthroughCommandAddFeatures( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureList &features ); 110 : : 111 : : void undo() override; 112 : : void redo() override; 113 : : 114 : : /** 115 : : * List of features (added feaures can be modified by default values from database) 116 : : */ 117 : 0 : QgsFeatureList features() const { return mFeatures; } 118 : : 119 : : private: 120 : : QgsFeatureList mFeatures; 121 : : QgsFeatureList mInitialFeatures; 122 : : }; 123 : : 124 : : 125 : : /** 126 : : * \ingroup core 127 : : * \class QgsVectorLayerUndoPassthroughCommandDeleteFeatures 128 : : * \brief Undo command for deleting features from a vector layer in transaction group. 129 : : * \since QGIS 3.0 130 : : */ 131 : : 132 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandDeleteFeatures : public QgsVectorLayerUndoPassthroughCommand 133 : : { 134 : : public: 135 : : 136 : : /** 137 : : * Constructor for QgsVectorLayerUndoPassthroughCommandDeleteFeatures 138 : : * \param buffer associated edit buffer 139 : : * \param fids feature IDs of features to delete from layer 140 : : */ 141 : : QgsVectorLayerUndoPassthroughCommandDeleteFeatures( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, const QgsFeatureIds &fids ); 142 : : 143 : : void undo() override; 144 : : void redo() override; 145 : : 146 : : private: 147 : : const QgsFeatureIds mFids; 148 : : // Keeps track of the deleted features that belong to the added pool 149 : : QgsFeatureMap mDeletedNewFeatures; 150 : : }; 151 : : 152 : : /** 153 : : * \ingroup core 154 : : * \class QgsVectorLayerUndoPassthroughCommandChangeGeometry 155 : : * \brief Undo command for changing feature geometry from a vector layer in transaction group. 156 : : * \since QGIS 3.0 157 : : */ 158 : : 159 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandChangeGeometry : public QgsVectorLayerUndoPassthroughCommand 160 : : { 161 : : public: 162 : : 163 : : /** 164 : : * Constructor for QgsVectorLayerUndoPassthroughCommandChangeGeometry 165 : : * \param buffer associated edit buffer 166 : : * \param fid feature ID of feature to change 167 : : * \param geom new geometru 168 : : */ 169 : : QgsVectorLayerUndoPassthroughCommandChangeGeometry( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, const QgsGeometry &geom ); 170 : : 171 : : void undo() override; 172 : : void redo() override; 173 : : 174 : 0 : int id() const override { return 1; } 175 : : bool mergeWith( const QUndoCommand *other ) override; 176 : : 177 : : private: 178 : : QgsFeatureId mFid; 179 : : mutable QgsGeometry mNewGeom; 180 : : QgsGeometry mOldGeom; 181 : : }; 182 : : 183 : : /** 184 : : * \ingroup core 185 : : * \class QgsVectorLayerUndoPassthroughCommandChangeAttribute 186 : : * \brief Undo command for changing attr value from a vector layer in transaction group. 187 : : * \since QGIS 3.0 188 : : */ 189 : : 190 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandChangeAttribute: public QgsVectorLayerUndoPassthroughCommand 191 : : { 192 : : public: 193 : : 194 : : /** 195 : : * Constructor for QgsVectorLayerUndoPassthroughCommandChangeAttribute 196 : : * \param buffer associated edit buffer 197 : : * \param fid feature ID of feature 198 : : * \param field 199 : : * \param newValue 200 : : */ 201 : : QgsVectorLayerUndoPassthroughCommandChangeAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, int field, const QVariant &newValue ); 202 : : 203 : : void undo() override; 204 : : void redo() override; 205 : : 206 : : private: 207 : : QgsFeatureId mFid; 208 : : const int mFieldIndex; 209 : : const QVariant mNewValue; 210 : : QVariant mOldValue; 211 : : bool mFirstChange; 212 : : }; 213 : : 214 : : /** 215 : : * \ingroup core 216 : : * \class QgsVectorLayerUndoPassthroughCommandChangeAttributes 217 : : * \brief Undo command for changing attributes' values from a vector layer in transaction group. 218 : : * \since QGIS 3.0 219 : : */ 220 : : 221 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandChangeAttributes: public QgsVectorLayerUndoPassthroughCommand 222 : : { 223 : : public: 224 : : 225 : : /** 226 : : * Constructor for QgsVectorLayerUndoPassthroughCommandChangeAttributes 227 : : * \param buffer associated edit buffer 228 : : * \param fid feature ID of feature 229 : : * \param newValues New values for attributes 230 : : * \param oldValues Old values for attributes 231 : : */ 232 : : QgsVectorLayerUndoPassthroughCommandChangeAttributes( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues = QgsAttributeMap() ); 233 : : 234 : : void undo() override; 235 : : void redo() override; 236 : : 237 : : private: 238 : : QgsFeatureId mFid; 239 : : const QgsAttributeMap mNewValues; 240 : : const QgsAttributeMap mOldValues; 241 : : }; 242 : : 243 : : /** 244 : : * \ingroup core 245 : : * \class QgsVectorLayerUndoPassthroughCommandAddAttribute 246 : : * \brief Undo command for adding attri to a vector layer in transaction group. 247 : : * \since QGIS 3.0 248 : : */ 249 : : 250 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandAddAttribute : public QgsVectorLayerUndoPassthroughCommand 251 : : { 252 : : public: 253 : : 254 : : /** 255 : : * Constructor for QgsVectorLayerUndoPassthroughCommandAddAttribute 256 : : * \param buffer associated edit buffer 257 : : * \param field 258 : : */ 259 : : QgsVectorLayerUndoPassthroughCommandAddAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, const QgsField &field ); 260 : : 261 : : void undo() override; 262 : : void redo() override; 263 : : 264 : : private: 265 : : const QgsField mField; 266 : : }; 267 : : 268 : : /** 269 : : * \ingroup core 270 : : * \class QgsVectorLayerUndoPassthroughCommandDeleteAttribute 271 : : * \brief Undo command for deleting attri of a vector layer in transaction group. 272 : : * \since QGIS 3.0 273 : : */ 274 : : 275 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandDeleteAttribute : public QgsVectorLayerUndoPassthroughCommand 276 : : { 277 : : public: 278 : : 279 : : /** 280 : : * Constructor for QgsVectorLayerUndoCommandDeleteAttribute 281 : : * \param buffer associated edit buffer 282 : : * \param attr 283 : : */ 284 : : QgsVectorLayerUndoPassthroughCommandDeleteAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int attr ); 285 : : 286 : : void undo() override; 287 : : void redo() override; 288 : : 289 : : private: 290 : : const QgsField mField; 291 : : }; 292 : : 293 : : /** 294 : : * \ingroup core 295 : : * \class QgsVectorLayerUndoPassthroughCommandRenameAttribute 296 : : * \brief Undo command for deleting attri of a vector layer in transaction group. 297 : : * \since QGIS 3.0 298 : : */ 299 : : 300 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandRenameAttribute : public QgsVectorLayerUndoPassthroughCommand 301 : : { 302 : : public: 303 : : 304 : : /** 305 : : * Constructor for QgsVectorLayerUndoCommandRenameAttribute 306 : : * \param buffer associated edit buffer 307 : : * \param attr 308 : : * \param newName 309 : : */ 310 : : QgsVectorLayerUndoPassthroughCommandRenameAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int attr, const QString &newName ); 311 : : 312 : : void undo() override; 313 : : void redo() override; 314 : : 315 : : private: 316 : : const int mAttr; 317 : : const QString mNewName; 318 : : const QString mOldName; 319 : : }; 320 : : 321 : : /** 322 : : * \ingroup core 323 : : * \class QgsVectorLayerUndoPassthroughCommandUpdate 324 : : * \brief Undo command for running a specific sql query in transaction group. 325 : : * \since QGIS 3.0 326 : : */ 327 : : 328 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandUpdate : public QgsVectorLayerUndoPassthroughCommand 329 : : { 330 : : public: 331 : : 332 : : /** 333 : : * Constructor for QgsVectorLayerUndoCommandUpdate 334 : : * \param buffer associated edit buffer 335 : : * \param transaction transaction running the sql query 336 : : * \param sql the query 337 : : * \param name The name of the command 338 : : */ 339 : : QgsVectorLayerUndoPassthroughCommandUpdate( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsTransaction *transaction, const QString &sql, const QString &name ); 340 : : 341 : : void undo() override; 342 : : void redo() override; 343 : : 344 : : private: 345 : : QgsTransaction *mTransaction = nullptr; 346 : : QString mSql; 347 : : bool mUndone = false; 348 : : }; 349 : : 350 : : #endif