diff --git a/src/App/Transactions.cpp b/src/App/Transactions.cpp index a15a2789ac..c840b3e76a 100644 --- a/src/App/Transactions.cpp +++ b/src/App/Transactions.cpp @@ -147,18 +147,15 @@ void Transaction::changeProperty(TransactionalObject* Obj, auto& index = _Objects.get<1>(); auto pos = index.find(Obj); - TransactionObject* To; - if (pos != index.end()) { - To = pos->second; + auto To = pos->second; + changeFunc(To); } - else { - To = TransactionFactory::instance().createTransaction(Obj->getTypeId()); + else if (auto To = TransactionFactory::instance().createTransaction(Obj->getTypeId())) { To->status = TransactionObject::Chn; index.emplace(Obj, To); + changeFunc(To); } - - changeFunc(To); } void Transaction::renameProperty(TransactionalObject* Obj, const Property* pcProp, const char* oldName) @@ -230,8 +227,7 @@ void Transaction::addObjectNew(TransactionalObject* Obj) seq.relocate(seq.end(), _Objects.project<0>(pos)); } } - else { - TransactionObject* To = TransactionFactory::instance().createTransaction(Obj->getTypeId()); + else if (auto To = TransactionFactory::instance().createTransaction(Obj->getTypeId())) { To->status = TransactionObject::New; To->_NameInDocument = Obj->detachFromDocument(); index.emplace(Obj, To); @@ -252,8 +248,7 @@ void Transaction::addObjectDel(const TransactionalObject* Obj) else if (pos != index.end() && pos->second->status == TransactionObject::Chn) { pos->second->status = TransactionObject::Del; } - else { - TransactionObject* To = TransactionFactory::instance().createTransaction(Obj->getTypeId()); + else if (auto To = TransactionFactory::instance().createTransaction(Obj->getTypeId())) { To->status = TransactionObject::Del; index.emplace(Obj, To); } @@ -264,18 +259,15 @@ void Transaction::addObjectChange(const TransactionalObject* Obj, const Property auto& index = _Objects.get<1>(); auto pos = index.find(Obj); - TransactionObject* To; - if (pos != index.end()) { - To = pos->second; + auto To = pos->second; + To->setProperty(Prop); } - else { - To = TransactionFactory::instance().createTransaction(Obj->getTypeId()); + else if (auto To = TransactionFactory::instance().createTransaction(Obj->getTypeId())) { To->status = TransactionObject::Chn; index.emplace(Obj, To); + To->setProperty(Prop); } - - To->setProperty(Prop); } @@ -556,13 +548,12 @@ void TransactionFactory::addProducer(const Base::Type& type, Base::AbstractProdu */ TransactionObject* TransactionFactory::createTransaction(const Base::Type& type) const { - std::map::const_iterator it; - for (it = producers.begin(); it != producers.end(); ++it) { - if (type.isDerivedFrom(it->first)) { - return static_cast(it->second->Produce()); + for (const auto& it : producers) { + if (type.isDerivedFrom(it.first)) { + return static_cast(it.second->Produce()); } } - assert(0); + Base::Console().log("Cannot create transaction object from %s\n", type.getName()); return nullptr; }