QCAD
Open Source 2D CAD
|
Transaction implementation. More...
#include <RTransaction.h>
Public Types | |
enum | Type { Generic = 0x0000, CurrentLayerChange = 0x0001, CurrentLayerSelectionChange = 0x0002, LayerLockStatusChange = 0x0004, LayerVisibilityStatusChange = 0x0008, SaveWorkingSet = 0x0010, ChangeDocumentSetting = 0x0020, Undo = 0x0040, Redo = 0x0080 } |
Transaction type for optimizations. More... | |
Public Member Functions | |
void | addAffectedObject (QSharedPointer< RObject > object) |
void | addAffectedObject (RObject::Id objectId) |
Adds the given object to the list of objects that are affected by this transaction. More... | |
void | addAffectedObjects (const QSet< RObject::Id > &objectIds) |
Adds the given objects to the list of objects that are affected by this transaction. More... | |
bool | addObject (QSharedPointer< RObject > obj, bool useCurrentAttributes=true, bool forceNew=false, const QSet< RPropertyTypeId > &modifiedPropertyTypeIds=RDEFAULT_QSET_RPROPERTYTYPEID) |
Adds the given object to the transaction. More... | |
void | deleteObject (QSharedPointer< RObject > object, bool force=false) |
void | deleteObject (RObject::Id objectId, bool force=false) |
void | end () |
void | endCycle () |
Ends the current transaction cycle. More... | |
void | fail () |
QList< RObject::Id > | getAffectedObjects () const |
int | getGroup () const |
int | getId () const |
QMap< RObject::Id, QList< RPropertyChange > > | getPropertyChanges () const |
QList< RPropertyChange > | getPropertyChanges (RObject::Id id) const |
QSet< RObject::Id > | getStatusChanges () const |
QString | getText () const |
RTransaction::Types | getTypes () const |
bool | hasOnlyChanges () const |
bool | hasStatusChange (RObject::Id id) const |
bool | isFailed () const |
bool | isPreview () const |
bool | isRedoing () |
bool | isType (RTransaction::Type type) const |
bool | isUndoable () const |
bool | isUndoing () |
bool | overwriteBlock (QSharedPointer< RBlock > block) |
Overwrites a potentially existing block with the given block. More... | |
virtual void | redo () |
Redo undone changes. More... | |
RTransaction () | |
Copyright (c) 2011-2018 by Andrew Mustun. More... | |
RTransaction (RStorage &storage) | |
Constructs an empty, invalid transaction. More... | |
RTransaction (RStorage &storage, const QString &text, bool undoable=true) | |
Constructor for new transactions. More... | |
RTransaction (RStorage &storage, int transactionId, const QString &text, const QList< RObject::Id > &affectedObjectIds, const QMap< RObject::Id, QList< RPropertyChange > > &propertyChanges) | |
Constructor for existing transactions. More... | |
void | setAllowAll (bool on) |
void | setAllowInvisible (bool on) |
void | setBlockRecursionDetectionDisabled (bool on) |
void | setExistingBlockDetectionDisabled (bool on) |
void | setExistingLayerDetectionDisabled (bool on) |
void | setExistingLinetypeDetectionDisabled (bool on) |
void | setGroup (int group) |
Set group. More... | |
void | setId (int id) |
Sets the ID of this transaction. More... | |
void | setKeepChildren (bool on) |
Keep child entities (e.g. More... | |
void | setKeepHandles (bool on) |
void | setRecordAffectedObjects (bool on) |
void | setSpatialIndexDisabled (bool on) |
void | setType (RTransaction::Type type, bool on=true) |
void | setTypes (RTransaction::Types t) |
virtual void | undo () |
Reverts a change to the document. More... | |
void | updateAffectedBlockReferences () |
virtual | ~RTransaction () |
Protected Member Functions | |
bool | addPropertyChange (RObject::Id objectId, const RPropertyChange &propertyChange) |
Adds the given property change for the given object to this transaction. More... | |
void | commit () |
Saves this command to the storage of the document. More... | |
void | rollback () |
Protected Attributes | |
QSet< RObject::Id > | affectedBlockReferenceIds |
List of IDs of all block references that need to be updated. More... | |
QList< RObject::Id > | affectedObjectIds |
List of IDs of all objects that are affected by this transaction. More... | |
QSet< RObject::Id > | affectedObjectIdsSet |
bool | allowAll |
True if all transactions are allowed, even transactions on locked or invisible layers. More... | |
bool | allowInvisible |
True if all transactions on invisible entities are allowed, typically transactions on invisible layers. More... | |
bool | blockRecursionDetectionDisabled |
True to disable block recursion detection (performance gain for loading). More... | |
QMap< RObject::Id, RObject::Id > | cloneIds |
bool | existingBlockDetectionDisabled |
True to disable detection of existing blocks (performance gain). More... | |
bool | existingLayerDetectionDisabled |
True to disable detection of existing layers (performance gain). More... | |
bool | existingLinetypeDetectionDisabled |
True to disable detection of existing linetypes (performance gain). More... | |
bool | failed |
True if this transaction failed. More... | |
bool | keepChildren |
True to keep and not delete child entities (block attributes for block references). More... | |
bool | keepHandles |
True to keep existing object handles (importers). More... | |
bool | onlyChanges |
True if this transaction only changed objects, no additions, no deletes. More... | |
QMap< RObject::Id, QList< RPropertyChange > > | propertyChanges |
Map of properties that are changed by this transaction. More... | |
bool | recordAffectedObjects |
True if caller is interested in list of objects that are affected by this transaction. More... | |
bool | redoing |
bool | spatialIndexDisabled |
True to ignore spatial index. More... | |
QSet< RObject::Id > | statusChanges |
Contains affected objects that have been created or deleted in this transaction. More... | |
RStorage * | storage |
A transaction always belongs to the storage of a document. More... | |
QString | text |
Log entry for this transaction. More... | |
int | transactionGroup |
Transaction group or -1. More... | |
int | transactionId |
Unique ID of this transaction. More... | |
RTransaction::Types | types |
bool | undoable |
Child transactions of this transaction. More... | |
bool | undoing |
Transaction implementation.
A transaction encapsulates a change of state of a document. Every change of a drawing document is wrapped in a transaction and handled by the QCAD Application Framework as one change. A transaction might add one or multiple objects, modify existing objects or delete objects. Combinations in the same transaction are also possible.
Each transactions should contain a locical change to a drawing. For example if a selection is moved from one place to another, all entities that are part of the selection are moved in the same transaction. This is important for the undo / redo mechanism of QCAD. If each entity would be moved in a separate transaction, the user would have to issue an undo command for each entity to get back to the state before the entities were moved.
Transactions can be applied to a document and are handled by an RTransactionStack for undo / redo functionality. Transactions are stored in a storage.
Transactions in the QCAD Application Framework are a low level concept. They are unaware of graphics views or widgets that need to be updated.
Transaction listeners may be used to intercept, complete or inspect transactions: RTransactionListener, RInterTransactionListener.
enum RTransaction::Type |
RTransaction::RTransaction | ( | ) |
Copyright (c) 2011-2018 by Andrew Mustun.
All rights reserved.
This file is part of the QCAD project.
QCAD is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
QCAD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with QCAD.
RTransaction::RTransaction | ( | RStorage & | storage | ) |
Constructs an empty, invalid transaction.
RTransaction::RTransaction | ( | RStorage & | storage, |
int | transactionId, | ||
const QString & | text, | ||
const QList< RObject::Id > & | affectedObjectIds, | ||
const QMap< RObject::Id, QList< RPropertyChange > > & | propertyChanges | ||
) |
Constructor for existing transactions.
This is used by storage implementations to instantiate transactions from a storage (e.g. DB).
RTransaction::RTransaction | ( | RStorage & | storage, |
const QString & | text, | ||
bool | undoable = true |
||
) |
Constructor for new transactions.
|
virtual |
void RTransaction::addAffectedObject | ( | QSharedPointer< RObject > | object | ) |
void RTransaction::addAffectedObject | ( | RObject::Id | objectId | ) |
Adds the given object to the list of objects that are affected by this transaction.
void RTransaction::addAffectedObjects | ( | const QSet< RObject::Id > & | objectIds | ) |
Adds the given objects to the list of objects that are affected by this transaction.
bool RTransaction::addObject | ( | QSharedPointer< RObject > | object, |
bool | useCurrentAttributes = true , |
||
bool | forceNew = false , |
||
const QSet< RPropertyTypeId > & | modifiedPropertyTypeIds = RDEFAULT_QSET_RPROPERTYTYPEID |
||
) |
Adds the given object to the transaction.
Adding an object to a transaction means that this transaction modifies or adds the object. Entities that are added with an invalid layer or block ID are placed on the current layer / block.
modifiedPropertyTypeId | Property IDs that have changed if known by caller, empty set otherwise. |
|
protected |
Adds the given property change for the given object to this transaction.
|
protected |
Saves this command to the storage of the document.
void RTransaction::deleteObject | ( | QSharedPointer< RObject > | object, |
bool | force = false |
||
) |
void RTransaction::deleteObject | ( | RObject::Id | objectId, |
bool | force = false |
||
) |
void RTransaction::end | ( | ) |
void RTransaction::endCycle | ( | ) |
Ends the current transaction cycle.
A cycle typcially creates one copy of a selection. This function is necessary to fix IDs in parent / child related entities (block references / attributes).
void RTransaction::fail | ( | ) |
|
inline |
|
inline |
|
inline |
|
inline |
QList< RPropertyChange > RTransaction::getPropertyChanges | ( | RObject::Id | id | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
bool RTransaction::isPreview | ( | ) | const |
|
inline |
bool RTransaction::isType | ( | RTransaction::Type | type | ) | const |
|
inline |
|
inline |
bool RTransaction::overwriteBlock | ( | QSharedPointer< RBlock > | block | ) |
Overwrites a potentially existing block with the given block.
|
virtual |
Redo undone changes.
(Re-)applies this transaction to the document.
|
protected |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Set group.
|
inline |
Sets the ID of this transaction.
Typically called by a storage which manages transaction IDs.
|
inline |
Keep child entities (e.g.
keep block attributes when deleting block references)
|
inline |
|
inline |
|
inline |
void RTransaction::setType | ( | RTransaction::Type | type, |
bool | on = true |
||
) |
|
inline |
|
virtual |
void RTransaction::updateAffectedBlockReferences | ( | ) |
|
protected |
List of IDs of all block references that need to be updated.
|
protected |
List of IDs of all objects that are affected by this transaction.
Needs to be in order (not a set):
|
protected |
|
protected |
True if all transactions are allowed, even transactions on locked or invisible layers.
Typically the case for importers.
|
protected |
True if all transactions on invisible entities are allowed, typically transactions on invisible layers.
Used to move entities to an invisible layer.
|
protected |
True to disable block recursion detection (performance gain for loading).
|
protected |
|
protected |
True to disable detection of existing blocks (performance gain).
|
protected |
True to disable detection of existing layers (performance gain).
|
protected |
True to disable detection of existing linetypes (performance gain).
|
protected |
True if this transaction failed.
|
protected |
True to keep and not delete child entities (block attributes for block references).
|
protected |
True to keep existing object handles (importers).
|
protected |
True if this transaction only changed objects, no additions, no deletes.
|
protected |
Map of properties that are changed by this transaction.
For every undoable, a whole list of properties might have changed in a fixed order.
|
protected |
True if caller is interested in list of objects that are affected by this transaction.
|
protected |
|
protected |
True to ignore spatial index.
Used for importers which regenerate the spatial index in the end.
|
protected |
Contains affected objects that have been created or deleted in this transaction.
|
protected |
A transaction always belongs to the storage of a document.
|
protected |
Log entry for this transaction.
|
protected |
Transaction group or -1.
Transaction groups are undone / redone together.
|
protected |
Unique ID of this transaction.
|
protected |
|
protected |
Child transactions of this transaction.
True if this transaction can be undone.
|
protected |