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 : : bool mFirstChange = true; 182 : : }; 183 : : 184 : : /** 185 : : * \ingroup core 186 : : * \class QgsVectorLayerUndoPassthroughCommandChangeAttribute 187 : : * \brief Undo command for changing attr value from a vector layer in transaction group. 188 : : * \since QGIS 3.0 189 : : */ 190 : : 191 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandChangeAttribute: public QgsVectorLayerUndoPassthroughCommand 192 : : { 193 : : public: 194 : : 195 : : /** 196 : : * Constructor for QgsVectorLayerUndoPassthroughCommandChangeAttribute 197 : : * \param buffer associated edit buffer 198 : : * \param fid feature ID of feature 199 : : * \param field 200 : : * \param newValue 201 : : */ 202 : : QgsVectorLayerUndoPassthroughCommandChangeAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, int field, const QVariant &newValue ); 203 : : 204 : : void undo() override; 205 : : void redo() override; 206 : : 207 : : private: 208 : : QgsFeatureId mFid; 209 : : const int mFieldIndex; 210 : : const QVariant mNewValue; 211 : : QVariant mOldValue; 212 : : bool mFirstChange; 213 : : }; 214 : : 215 : : /** 216 : : * \ingroup core 217 : : * \class QgsVectorLayerUndoPassthroughCommandChangeAttributes 218 : : * \brief Undo command for changing attributes' values from a vector layer in transaction group. 219 : : * \since QGIS 3.0 220 : : */ 221 : : 222 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandChangeAttributes: public QgsVectorLayerUndoPassthroughCommand 223 : : { 224 : : public: 225 : : 226 : : /** 227 : : * Constructor for QgsVectorLayerUndoPassthroughCommandChangeAttributes 228 : : * \param buffer associated edit buffer 229 : : * \param fid feature ID of feature 230 : : * \param newValues New values for attributes 231 : : * \param oldValues Old values for attributes 232 : : */ 233 : : QgsVectorLayerUndoPassthroughCommandChangeAttributes( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues = QgsAttributeMap() ); 234 : : 235 : : void undo() override; 236 : : void redo() override; 237 : : 238 : : private: 239 : : QgsFeatureId mFid; 240 : : const QgsAttributeMap mNewValues; 241 : : QgsAttributeMap mOldValues; 242 : : QMap<int, bool> mFirstChanges; 243 : : }; 244 : : 245 : : /** 246 : : * \ingroup core 247 : : * \class QgsVectorLayerUndoPassthroughCommandAddAttribute 248 : : * \brief Undo command for adding attri to a vector layer in transaction group. 249 : : * \since QGIS 3.0 250 : : */ 251 : : 252 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandAddAttribute : public QgsVectorLayerUndoPassthroughCommand 253 : : { 254 : : public: 255 : : 256 : : /** 257 : : * Constructor for QgsVectorLayerUndoPassthroughCommandAddAttribute 258 : : * \param buffer associated edit buffer 259 : : * \param field 260 : : */ 261 : : QgsVectorLayerUndoPassthroughCommandAddAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, const QgsField &field ); 262 : : 263 : : void undo() override; 264 : : void redo() override; 265 : : 266 : : private: 267 : : const QgsField mField; 268 : : }; 269 : : 270 : : /** 271 : : * \ingroup core 272 : : * \class QgsVectorLayerUndoPassthroughCommandDeleteAttribute 273 : : * \brief Undo command for deleting attri of a vector layer in transaction group. 274 : : * \since QGIS 3.0 275 : : */ 276 : : 277 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandDeleteAttribute : public QgsVectorLayerUndoPassthroughCommand 278 : : { 279 : : public: 280 : : 281 : : /** 282 : : * Constructor for QgsVectorLayerUndoCommandDeleteAttribute 283 : : * \param buffer associated edit buffer 284 : : * \param attr 285 : : */ 286 : : QgsVectorLayerUndoPassthroughCommandDeleteAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int attr ); 287 : : 288 : : void undo() override; 289 : : void redo() override; 290 : : 291 : : private: 292 : : const QgsField mField; 293 : : const int mOriginalFieldIndex; 294 : : }; 295 : : 296 : : /** 297 : : * \ingroup core 298 : : * \class QgsVectorLayerUndoPassthroughCommandRenameAttribute 299 : : * \brief Undo command for deleting attri of a vector layer in transaction group. 300 : : * \since QGIS 3.0 301 : : */ 302 : : 303 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandRenameAttribute : public QgsVectorLayerUndoPassthroughCommand 304 : : { 305 : : public: 306 : : 307 : : /** 308 : : * Constructor for QgsVectorLayerUndoCommandRenameAttribute 309 : : * \param buffer associated edit buffer 310 : : * \param attr 311 : : * \param newName 312 : : */ 313 : : QgsVectorLayerUndoPassthroughCommandRenameAttribute( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, int attr, const QString &newName ); 314 : : 315 : : void undo() override; 316 : : void redo() override; 317 : : 318 : : private: 319 : : const int mAttr; 320 : : const QString mNewName; 321 : : const QString mOldName; 322 : : }; 323 : : 324 : : /** 325 : : * \ingroup core 326 : : * \class QgsVectorLayerUndoPassthroughCommandUpdate 327 : : * \brief Undo command for running a specific sql query in transaction group. 328 : : * \since QGIS 3.0 329 : : */ 330 : : 331 : 0 : class CORE_EXPORT QgsVectorLayerUndoPassthroughCommandUpdate : public QgsVectorLayerUndoPassthroughCommand 332 : : { 333 : : public: 334 : : 335 : : /** 336 : : * Constructor for QgsVectorLayerUndoCommandUpdate 337 : : * \param buffer associated edit buffer 338 : : * \param transaction transaction running the sql query 339 : : * \param sql the query 340 : : * \param name The name of the command 341 : : */ 342 : : QgsVectorLayerUndoPassthroughCommandUpdate( QgsVectorLayerEditBuffer *buffer SIP_TRANSFER, QgsTransaction *transaction, const QString &sql, const QString &name ); 343 : : 344 : : void undo() override; 345 : : void redo() override; 346 : : 347 : : private: 348 : : QgsTransaction *mTransaction = nullptr; 349 : : QString mSql; 350 : : bool mUndone = false; 351 : : }; 352 : : 353 : : #endif