Files
Sourcetrail/src/lib/component/controller/FeatureController.cpp
T
Eberhard Graether a527a3c34d logic: rewrote messages handling token activation for correct restoring on undo
* saving search query to undo stack with MessageSearch
* saving node and edge with name to undo stack with MessageActivateNode and MessageActivateEdge
* added FeatureController that handels distribution of MessageActivateTokens
* clearing views when refreshing or changing project
* clearing undo stack when changing project
* added StorageCache derived from StorageAccessProxy
2015-06-19 00:20:50 +02:00

80 lines
1.8 KiB
C++

#include "component/controller/FeatureController.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "data/access/StorageAccess.h"
FeatureController::FeatureController(StorageAccess* storageAccess)
: m_storageAccess(storageAccess)
{
}
FeatureController::~FeatureController()
{
}
void FeatureController::handleMessage(MessageActivateEdge* message)
{
Id edgeId = message->tokenId;
if (!message->isFresh())
{
edgeId = m_storageAccess->getIdForEdgeWithName(message->name);
}
if (!edgeId)
{
return;
}
if (message->type == Edge::EDGE_AGGREGATION)
{
MessageActivateTokens(m_storageAccess->getTokenIdsForAggregationEdge(edgeId)).dispatch();
return;
}
MessageActivateTokens msg(std::vector<Id>(1, edgeId));
msg.isEdge = true;
msg.dispatch();
}
void FeatureController::handleMessage(MessageActivateFile* message)
{
MessageActivateTokens(std::vector<Id>(1, m_storageAccess->getTokenIdForFileNode(message->filePath))).dispatch();
}
void FeatureController::handleMessage(MessageActivateNode* message)
{
Id nodeId = message->tokenId;
if (!message->isFresh())
{
nodeId = m_storageAccess->getIdForNodeWithName(message->name);
}
if (nodeId)
{
MessageActivateTokens msg(nodeId);
msg.isFromSystem = message->isFromSystem;
msg.dispatch();
}
}
void FeatureController::handleMessage(MessageActivateTokenLocation* message)
{
if (message->locationId)
{
Id nodeId = m_storageAccess->getActiveNodeIdForLocationId(message->locationId);
MessageActivateNode(
nodeId,
m_storageAccess->getNodeTypeForNodeWithId(nodeId),
m_storageAccess->getNameForNodeWithId(nodeId)
).dispatch();
}
}
void FeatureController::handleMessage(MessageSearch* message)
{
MessageActivateTokens(m_storageAccess->getTokenIdsForQuery(message->getQuery())).dispatch();
}