QCAD Application Framework
CAD Application Development and Automation.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RTransaction Class Reference

Transaction implementation. More...

#include <RTransaction.h>

List of all members.

Public Member Functions

void addAffectedObject (RObject::Id objectId)
 Adds the given object to the list of objects that are affected by this transaction.
void addAffectedObject (QSharedPointer< RObject > object)
void addAffectedObjects (const QSet< RObject::Id > &objectIds)
 Adds the given objects to the list of objects that are affected by this transaction.
bool addObject (QSharedPointer< RObject > obj, bool useCurrentAttributes=true, const QSet< RPropertyTypeId > &modifiedPropertyTypeIds=RDEFAULT_QSET_RPROPERTYTYPEID)
 Adds the given object to the transaction.
void deleteObject (RObject::Id objectId, RDocument *document)
void deleteObject (QSharedPointer< RObject > object, RDocument *document)
void end ()
 Previews this transaction (as it would be applied) by exporting the result to the given exporter.
void fail ()
QList< RObject::IdgetAffectedObjects ()
int getId ()
QMap< RObject::Id, QList
< RPropertyChange > > 
getPropertyChanges ()
QSet< RObject::IdgetStatusChanges ()
QString getText ()
bool hasOnlyChanges ()
bool isFailed ()
bool isUndoable ()
bool overwriteBlock (QSharedPointer< RBlock > block)
 Overwrites an existing block with the given block.
virtual void redo (RDocument *objectContainer=NULL)
 Applies this command to the document.
 RTransaction ()
 RTransaction (RStorage &storage)
 Constructs an empty, invalid transaction.
 RTransaction (RStorage &storage, int transactionId, const QString &text, const QList< RObject::Id > &affectedObjects, const QMap< RObject::Id, QList< RPropertyChange > > &propertyChanges, RTransaction *parent=NULL)
 Constructor for existing transactions.
 RTransaction (RStorage &storage, const QString &text, bool undoable=true, RTransaction *parent=NULL)
 Constructor for new transactions.
void setAllowAll (bool on)
void setAllowInvisible (bool on)
void setId (int id)
 Sets the ID of this transaction.
void setRecordAffectedObjects (bool on)
void setSpatialIndexDisabled (bool on)
virtual void undo (RDocument *objectContainer=NULL)
 Reverts a change to the document.
void updateOverwrittenBlockReferences ()
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.
void appendChild (RTransaction &t)
 Appends the given child to the list of child transactions of this transaction.
void commit ()
 Saves this command to the storage of the document.
void rollback ()

Protected Attributes

QList< RObject::IdaffectedObjects
 List of IDs of all objects that are affected by this transaction.
bool allowAll
 True if all transactions are allowed, even transactions on locked or invisible layers.
bool allowInvisible
 True if all transactions on invisible entities are allowed, typically transactions on invisible layers.
QList< RTransactionchildTransactions
 Child transactions of this transaction.
bool failed
 True if this transaction failed.
bool onlyChanges
 True if this transaction only changed objects, no additions, no deletes.
QList< RObject::IdoverwrittenBlockReferences
 List of IDs of all block references that need to be .
QMap< RObject::Id, QList
< RPropertyChange > > 
propertyChanges
 Map of properties that are changed by this transaction.
bool recordAffectedObjects
 True if caller is intereseted in list of objects that are affected by this transaction.
bool spatialIndexDisabled
 True to ignore spatial index.
QSet< RObject::IdstatusChanges
 Contains affected objects that have been created or deleted in this transaction.
RStoragestorage
 A transaction always belongs to the storage of a document.
QString text
 Log entry for this transaction.
int transactionId
 Unique ID of this transaction.
bool undoable
 True if this transaction can be undone.

Detailed Description

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.

Scriptable:
This class is wrapped for script environments.
Copyable:
Script wrappers of this class should pass objects by reference.

Constructor & Destructor Documentation

RTransaction::RTransaction ( )
RTransaction::RTransaction ( RStorage storage)

Constructs an empty, invalid transaction.

RTransaction::RTransaction ( RStorage storage,
int  transactionId,
const QString &  text,
const QList< RObject::Id > &  affectedObjects,
const QMap< RObject::Id, QList< RPropertyChange > > &  propertyChanges,
RTransaction parent = NULL 
)

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,
RTransaction parent = NULL 
)

Constructor for new transactions.

RTransaction::~RTransaction ( )
virtual

Member Function Documentation

void RTransaction::addAffectedObject ( RObject::Id  objectId)

Adds the given object to the list of objects that are affected by this transaction.

void RTransaction::addAffectedObject ( QSharedPointer< RObject object)
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,
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.

Parameters:
modifiedPropertyTypeId,:Property ID that has changed if known by caller, NULL otherwise.
bool RTransaction::addPropertyChange ( RObject::Id  objectId,
const RPropertyChange propertyChange 
)
protected

Adds the given property change for the given object to this transaction.

void RTransaction::appendChild ( RTransaction t)
protected

Appends the given child to the list of child transactions of this transaction.

This transaction takes o

void RTransaction::commit ( )
protected

Saves this command to the storage of the document.

void RTransaction::deleteObject ( RObject::Id  objectId,
RDocument document 
)
void RTransaction::deleteObject ( QSharedPointer< RObject object,
RDocument document 
)
void RTransaction::end ( )

Previews this transaction (as it would be applied) by exporting the result to the given exporter.

The exporter typically exports into the preview of a graphics scene.

void RTransaction::fail ( )
QList<RObject::Id> RTransaction::getAffectedObjects ( )
inline
Returns:
Set of object IDs of objects that are affected by this transaction.
int RTransaction::getId ( )
inline
Returns:
Unique ID of this transaction.
QMap<RObject::Id, QList<RPropertyChange> > RTransaction::getPropertyChanges ( )
inline
QSet<RObject::Id> RTransaction::getStatusChanges ( )
inline
Returns:
Set of object IDs of objects that have been created or deleted by this transaction.
QString RTransaction::getText ( )
inline
Returns:
Logged text for this transaction.
bool RTransaction::hasOnlyChanges ( )
inline
bool RTransaction::isFailed ( )
inline
bool RTransaction::isUndoable ( )
inline
Returns:
True if this transaction should store undo / redo information for later undo / redo functionality.
bool RTransaction::overwriteBlock ( QSharedPointer< RBlock block)

Overwrites an existing block with the given block.

void RTransaction::redo ( RDocument objectContainer = NULL)
virtual

Applies this command to the document.

(Re-)applies this transaction to the document.

void RTransaction::rollback ( )
protected
void RTransaction::setAllowAll ( bool  on)
inline
void RTransaction::setAllowInvisible ( bool  on)
inline
void RTransaction::setId ( int  id)
inline

Sets the ID of this transaction.

Typically called by a storage which manages transaction IDs.

void RTransaction::setRecordAffectedObjects ( bool  on)
inline
void RTransaction::setSpatialIndexDisabled ( bool  on)
inline
void RTransaction::undo ( RDocument objectContainer = NULL)
virtual

Reverts a change to the document.

Undoes this transaction.

After undo() is called, the state of the document should be the same as before redo() was called.

void RTransaction::updateOverwrittenBlockReferences ( )

Member Data Documentation

QList<RObject::Id> RTransaction::affectedObjects
protected

List of IDs of all objects that are affected by this transaction.

bool RTransaction::allowAll
protected

True if all transactions are allowed, even transactions on locked or invisible layers.

Typically the case for importers.

bool RTransaction::allowInvisible
protected

True if all transactions on invisible entities are allowed, typically transactions on invisible layers.

Used to move entities to an invisible layer.

QList<RTransaction> RTransaction::childTransactions
protected

Child transactions of this transaction.

bool RTransaction::failed
protected

True if this transaction failed.

bool RTransaction::onlyChanges
protected

True if this transaction only changed objects, no additions, no deletes.

QList<RObject::Id> RTransaction::overwrittenBlockReferences
protected

List of IDs of all block references that need to be .

QMap<RObject::Id, QList<RPropertyChange> > RTransaction::propertyChanges
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.

bool RTransaction::recordAffectedObjects
protected

True if caller is intereseted in list of objects that are affected by this transaction.

bool RTransaction::spatialIndexDisabled
protected

True to ignore spatial index.

Used for importers which regenerate the spatial index in the end.

QSet<RObject::Id> RTransaction::statusChanges
protected

Contains affected objects that have been created or deleted in this transaction.

RStorage* RTransaction::storage
protected

A transaction always belongs to the storage of a document.

QString RTransaction::text
protected

Log entry for this transaction.

int RTransaction::transactionId
protected

Unique ID of this transaction.

bool RTransaction::undoable
protected

True if this transaction can be undone.


The documentation for this class was generated from the following files: