Пример #1
0
bool System::openEntity(const EntityOpenRequest& req)
{
	EntityManager* man = EntityManager::getInstance();

	EntityHandler* handler = man->getEntityHandler(req);

	if (!handler)
		return false;

	QByteArray sig = handler->getEntitySignatureAheadOfTime(req);
	DisplayedEntity* oent = findSignatureOpenEntity(sig);

	if (oent) {
		changeCurrentEntity(oent);
		return false;
	}

	DisplayedEntity* entity = handler->openEntity(req);

	if (!entity)
		return false;

	sig = entity->getSignature();
	oent = findSignatureOpenEntity(sig);

	if (oent) {
		changeCurrentEntity(oent);
		delete entity;
		return false;
	}

	openEntities << entity;

	try {
		emit entityOpened(entity);
	} catch (...) {
		closeEntity(entity, true);
		return false;
	}

	changeCurrentEntity(entity);
	return true;
}