bool RMemoryStorage::deleteObject(RObject::Id objectId) { // TODO: save original object for rollback: if (inTransaction) { //transactionObjectMap.insert(objectId, QSharedPointer<RObject>()); } QSharedPointer<RObject> obj = queryObjectDirect(objectId); if (!obj.isNull()) { objectHandleMap.remove(obj->getHandle()); QSharedPointer<REntity> entity = obj.dynamicCast<REntity>(); if (!entity.isNull()) { blockEntityMap.remove(entity->getBlockId(), entity); //qDebug() << "deleteObject: removed " << entity->getId() << " from block " << entity->getBlockId(); } } objectMap.remove(objectId); if (entityMap.contains(objectId)) { entityMap.remove(objectId); } if (blockMap.contains(objectId)) { blockMap.remove(objectId); } if (layerMap.contains(objectId)) { layerMap.remove(objectId); } return true; }
void RMemoryStorage::deleteTransactionsFrom(int transactionId) { QSet<int> keysToRemove; { QHash<int, RTransaction>::iterator it; for (it = transactionMap.begin(); it!=transactionMap.end(); ++it) { if (it.key()>=transactionId) { // delete orphaned objects: QList<RObject::Id> affectedObjects = it.value().getAffectedObjects(); QList<RObject::Id>::iterator it2; for (it2=affectedObjects.begin(); it2!=affectedObjects.end(); ++it2) { QSharedPointer<RObject> obj = queryObjectDirect(*it2); if (!obj.isNull() && obj->isUndone()) { deleteObject(*it2); } } // delete transaction: keysToRemove.insert(it.key()); } } } { QSet<int>::iterator it; for (it=keysToRemove.begin(); it!=keysToRemove.end(); ++it) { transactionMap.remove(*it); } } }
bool RMemoryStorage::setUndoStatus(RObject::Id objectId, bool status) { QSharedPointer<RObject> obj = queryObjectDirect(objectId); if (obj.isNull()) { qWarning() << QString("RMemoryStorage::setUndoStatus: object is NULL"); return false; } obj->setUndone(status); return true; }
void RMemoryStorage::toggleUndoStatus(RObject::Id objectId) { QSharedPointer<RObject> obj = queryObjectDirect(objectId); if (!obj.isNull()) { obj->setUndone(!obj->isUndone()); } }