logic: Removed ActivationTranslator and show old token names in search field

This commit is contained in:
Eberhard Graether
2016-05-30 16:00:55 +02:00
parent 5bb6902cdf
commit 5a6e042c8f
10 changed files with 135 additions and 250 deletions
-2
View File
@@ -2,8 +2,6 @@
add_files(
LIB_FILES
component/controller/helper/ActivationTranslator.cpp
component/controller/helper/ActivationTranslator.h
component/controller/helper/BucketGrid.cpp
component/controller/helper/BucketGrid.h
component/controller/helper/DummyEdge.h
@@ -3,13 +3,15 @@
#include "data/access/StorageAccess.h"
#include "settings/ApplicationSettings.h"
#include "utility/messaging/type/MessageActivateAll.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageChangeFileView.h"
#include "utility/messaging/type/MessageRefresh.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "utility/messaging/type/MessageStatus.h"
FeatureController::FeatureController(StorageAccess* storageAccess)
: m_storageAccess(storageAccess)
, m_activationTranslator(storageAccess)
{
}
@@ -19,47 +21,124 @@ FeatureController::~FeatureController()
void FeatureController::handleMessage(MessageActivateEdge* message)
{
std::shared_ptr<MessageActivateTokens> m = m_activationTranslator.translateMessage(message);
if (m)
if (message->isAggregation())
{
m->dispatchImmediately();
// TODO: validate aggregationIds
MessageActivateTokens m(message, message->aggregationIds);
m.setKeepContent(false);
m.isAggregation = true;
m.dispatchImmediately();
}
else
{
Id edgeId = message->tokenId;
if (message->isReplayed())
{
edgeId = m_storageAccess->getIdForEdge(message->type, message->fromNameHierarchy, message->toNameHierarchy);
}
std::vector<Id> ids;
if (edgeId)
{
ids.push_back(edgeId);
}
MessageActivateTokens m(message, ids);
m.isEdge = true;
m.unknownNames = std::vector<std::string>(1, message->getFullName());
m.dispatchImmediately();
}
}
void FeatureController::handleMessage(MessageActivateFile* message)
{
std::shared_ptr<MessageActivateTokens> m = m_activationTranslator.translateMessage(message);
if (m)
Id fileId = m_storageAccess->getTokenIdForFileNode(message->filePath);
if (fileId)
{
m->dispatchImmediately();
MessageActivateTokens(message, std::vector<Id>(1, fileId)).dispatchImmediately();
}
else
{
MessageActivateTokens m(message, std::vector<Id>());
m.unknownNames.push_back(message->filePath.fileName());
m.dispatchImmediately();
}
}
void FeatureController::handleMessage(MessageActivateNodes* message)
{
std::shared_ptr<MessageActivateTokens> m = m_activationTranslator.translateMessage(message);
if (m)
std::vector<Id> nodeIds;
if (!message->isReplayed())
{
m->dispatchImmediately();
for (const MessageActivateNodes::ActiveNode& node : message->nodes)
{
nodeIds.push_back(node.nodeId);
}
}
else
{
for (const MessageActivateNodes::ActiveNode& node : message->nodes)
{
Id nodeId = m_storageAccess->getIdForNodeWithNameHierarchy(node.nameHierarchy);
if (nodeId > 0)
{
nodeIds.push_back(nodeId);
}
}
}
MessageActivateTokens m(message, nodeIds);
for (const MessageActivateNodes::ActiveNode& node : message->nodes)
{
m.unknownNames.push_back(node.nameHierarchy.getQualifiedName());
}
m.dispatchImmediately();
}
void FeatureController::handleMessage(MessageSearch* message)
{
std::shared_ptr<MessageActivateTokens> m = m_activationTranslator.translateMessage(message);
if (m)
const std::vector<SearchMatch>& matches = message->getMatches();
for (const SearchMatch& match : matches)
{
m->dispatchImmediately();
if (match.searchType == SearchMatch::SEARCH_COMMAND &&
match.getFullName() == SearchMatch::getCommandName(SearchMatch::COMMAND_ALL))
{
MessageActivateAll msg;
msg.setIsReplayed(message->isReplayed());
msg.dispatchImmediately();
return;
}
else if (match.searchType == SearchMatch::SEARCH_COMMAND &&
match.getFullName() == SearchMatch::getCommandName(SearchMatch::COMMAND_ERROR))
{
MessageShowErrors msg(ErrorCountInfo(-1, 0));
msg.setIsReplayed(message->isReplayed());
msg.dispatchImmediately();
return;
}
}
std::vector<Id> tokenIds = m_storageAccess->getTokenIdsForMatches(matches);
MessageActivateTokens m(message, tokenIds);
for (const SearchMatch& match : matches)
{
m.unknownNames.push_back(match.text);
}
if (!message->isReplayed())
{
m.isFromSearch = true;
}
m.dispatchImmediately();
}
void FeatureController::handleMessage(MessageActivateTokenIds* message)
{
std::shared_ptr<MessageActivateTokens> m = m_activationTranslator.translateMessage(message);
if (m)
{
m->dispatchImmediately();
}
MessageActivateTokens(message, message->tokenIds).dispatchImmediately();
}
void FeatureController::handleMessage(MessageActivateTokenLocations* message)
@@ -119,8 +198,7 @@ void FeatureController::handleMessage(MessageZoom* message)
return;
}
// settings->setFontSize(std::max(settings->getFontSize() + (message->zoomIn ? 1 : -1), 5));
settings->setFontSize((settings->getFontSize() + (message->zoomIn ? 1 : -1)));
settings->setFontSize(fontSize + (message->zoomIn ? 1 : -1));
settings->save();
fontSize = settings->getFontSize();
@@ -3,7 +3,6 @@
#include <memory>
#include "component/controller/helper/ActivationTranslator.h"
#include "component/controller/Controller.h"
#include "utility/messaging/MessageListener.h"
@@ -47,7 +46,6 @@ private:
virtual void handleMessage(MessageZoom* message);
StorageAccess* m_storageAccess;
ActivationTranslator m_activationTranslator;
};
#endif // FEATURE_CONTROLLER_H
@@ -20,9 +20,28 @@ void SearchController::handleMessage(MessageActivateAll* message)
void SearchController::handleMessage(MessageActivateTokens* message)
{
if (!message->keepContent() && !message->isFromSearch)
if (!message->isFromSearch)
{
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
if (!message->keepContent() && message->tokenIds.size())
{
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
}
else if (message->isReplayed() || message->unknownNames.size())
{
std::vector<SearchMatch> matches;
for (const std::string& name : message->unknownNames)
{
matches.push_back(SearchMatch(name));
}
if (!matches.size())
{
matches.push_back(SearchMatch("<invalid>"));
}
getView()->setMatches(matches);
}
}
}
@@ -9,7 +9,6 @@
#include "data/access/StorageAccess.h"
UndoRedoController::UndoRedoController(StorageAccess* storageAccess)
: m_activationTranslator(storageAccess)
{
m_iterator = m_list.end();
}
@@ -181,7 +180,7 @@ void UndoRedoController::handleMessage(MessageRefresh* message)
return;
}
if (requiresActivateFallbackToken())
if (m_iterator == m_list.begin())
{
SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ALL);
MessageSearch msg(std::vector<SearchMatch>(1, match));
@@ -389,51 +388,3 @@ MessageBase* UndoRedoController::lastMessage() const
{
return std::prev(m_iterator)->message.get();
}
bool UndoRedoController::requiresActivateFallbackToken() const
{
if (m_iterator == m_list.begin())
{
return true;
}
std::list<Command>::iterator it = m_iterator;
do
{
std::advance(it, -1);
}
while (it != m_list.begin() && it->order != Command::ORDER_ACTIVATE);
return !checkCommandCausesTokenActivation(*it);
}
bool UndoRedoController::checkCommandCausesTokenActivation(const Command& command) const
{
MessageBase* commandMessage = command.message.get();
if (commandMessage)
{
std::shared_ptr<MessageActivateTokens> m;
std::string commandMessageTypeString = commandMessage->getType();
if (commandMessageTypeString == MessageActivateEdge::getStaticType())
{
m = m_activationTranslator.translateMessage(dynamic_cast<const MessageActivateEdge*>(commandMessage));
}
else if (commandMessageTypeString == MessageActivateFile::getStaticType())
{
m = m_activationTranslator.translateMessage(dynamic_cast<const MessageActivateFile*>(commandMessage));
}
else if (commandMessageTypeString == MessageActivateNodes::getStaticType())
{
MessageActivateNodes inputMessage(*dynamic_cast<MessageActivateNodes*>(commandMessage));
inputMessage.setIsReplayed(true);
m = m_activationTranslator.translateMessage(&inputMessage);
}
else if (commandMessageTypeString == MessageSearch::getStaticType())
{
m = m_activationTranslator.translateMessage(dynamic_cast<const MessageSearch*>(commandMessage));
}
return (m && m->tokenIds.size() > 0);
}
return false;
}
@@ -24,7 +24,6 @@
#include "utility/messaging/type/MessageShowScope.h"
#include "utility/messaging/type/MessageUndo.h"
#include "component/controller/helper/ActivationTranslator.h"
#include "component/controller/Controller.h"
class StorageAccess;
@@ -102,11 +101,6 @@ private:
bool sameMessageTypeAsLast(MessageBase* message) const;
MessageBase* lastMessage() const;
bool requiresActivateFallbackToken() const;
bool checkCommandCausesTokenActivation(const Command& command) const;
ActivationTranslator m_activationTranslator;
std::list<Command> m_list;
std::list<Command>::iterator m_iterator;
};
@@ -1,138 +0,0 @@
#include "component/controller/helper/ActivationTranslator.h"
#include "data/access/StorageAccess.h"
#include "utility/messaging/type/MessageActivateAll.h"
#include "utility/messaging/type/MessageActivateEdge.h"
#include "utility/messaging/type/MessageActivateFile.h"
#include "utility/messaging/type/MessageActivateNodes.h"
#include "utility/messaging/type/MessageActivateTokenIds.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageChangeFileView.h"
#include "utility/messaging/type/MessageSearch.h"
#include "utility/messaging/type/MessageShowErrors.h"
ActivationTranslator::ActivationTranslator(StorageAccess* storageAccess)
: m_storageAccess(storageAccess)
{
}
ActivationTranslator::~ActivationTranslator()
{
}
std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(const MessageActivateEdge* message) const
{
std::shared_ptr<MessageActivateTokens> m;
if (message->isAggregation())
{
// TODO: validate aggregationIds
m = std::make_shared<MessageActivateTokens>(message, message->aggregationIds);
m->setKeepContent(false);
m->isAggregation = true;
}
else
{
Id edgeId = message->tokenId;
if (message->isReplayed())
{
edgeId = m_storageAccess->getIdForEdge(message->type, message->fromNameHierarchy, message->toNameHierarchy);
}
if (edgeId)
{
m = std::make_shared<MessageActivateTokens>(message, std::vector<Id>(1, edgeId));
m->isEdge = true;
}
}
return m;
}
std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(const MessageActivateFile* message) const
{
Id fileId = m_storageAccess->getTokenIdForFileNode(message->filePath);
if (fileId == 0)
{
MessageChangeFileView msg(
message->filePath,
MessageChangeFileView::FILE_MAXIMIZED,
true,
false,
nullptr
);
msg.setIsReplayed(message->isReplayed());
msg.setKeepContent(message->keepContent());
msg.dispatch();
return nullptr;
}
return std::make_shared<MessageActivateTokens>(message, std::vector<Id>(1, fileId));
}
std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(const MessageActivateNodes* message) const
{
std::vector<Id> nodeIds;
if (!message->isReplayed())
{
for (const MessageActivateNodes::ActiveNode& node : message->nodes)
{
nodeIds.push_back(node.nodeId);
}
}
else
{
for (const MessageActivateNodes::ActiveNode& node : message->nodes)
{
Id nodeId = m_storageAccess->getIdForNodeWithNameHierarchy(node.nameHierarchy);
if (nodeId > 0)
{
nodeIds.push_back(nodeId);
}
}
}
std::shared_ptr<MessageActivateTokens> m;
m = std::make_shared<MessageActivateTokens>(message, nodeIds);
return m;
}
std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(const MessageActivateTokenIds* message) const
{
return std::make_shared<MessageActivateTokens>(message, message->tokenIds);
}
std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(const MessageSearch* message) const
{
const std::vector<SearchMatch>& matches = message->getMatches();
for (const SearchMatch& match : matches)
{
if (match.searchType == SearchMatch::SEARCH_COMMAND &&
match.getFullName() == SearchMatch::getCommandName(SearchMatch::COMMAND_ALL))
{
MessageActivateAll msg;
msg.setIsReplayed(message->isReplayed());
msg.dispatchImmediately();
return nullptr;
}
else if (match.searchType == SearchMatch::SEARCH_COMMAND &&
match.getFullName() == SearchMatch::getCommandName(SearchMatch::COMMAND_ERROR))
{
MessageShowErrors msg(ErrorCountInfo(-1, 0));
msg.setIsReplayed(message->isReplayed());
msg.dispatchImmediately();
return nullptr;
}
}
std::vector<Id> tokenIds = m_storageAccess->getTokenIdsForMatches(matches);
std::shared_ptr<MessageActivateTokens> m = std::make_shared<MessageActivateTokens>(message, tokenIds);
if (!message->isReplayed())
{
m->isFromSearch = true;
}
return m;
}
@@ -1,30 +0,0 @@
#ifndef ACTIVATION_TRANSLATOR_H
#define ACTIVATION_TRANSLATOR_H
#include <memory>
class MessageActivateEdge;
class MessageActivateFile;
class MessageActivateNodes;
class MessageActivateTokenIds;
class MessageActivateTokens;
class MessageSearch;
class StorageAccess;
class ActivationTranslator
{
public:
ActivationTranslator(StorageAccess* storageAccess);
~ActivationTranslator();
std::shared_ptr<MessageActivateTokens> translateMessage(const MessageActivateEdge* message) const;
std::shared_ptr<MessageActivateTokens> translateMessage(const MessageActivateFile* message) const;
std::shared_ptr<MessageActivateTokens> translateMessage(const MessageActivateNodes* message) const;
std::shared_ptr<MessageActivateTokens> translateMessage(const MessageActivateTokenIds* message) const;
std::shared_ptr<MessageActivateTokens> translateMessage(const MessageSearch* message) const;
private:
StorageAccess* m_storageAccess;
};
#endif // ACTIVATION_TRANSLATOR_H
@@ -37,6 +37,8 @@ public:
bool isEdge;
bool isAggregation;
bool isFromSearch;
std::vector<std::string> unknownNames;
};
#endif // MESSAGE_ACTIVATE_TOKENS_H
+13
View File
@@ -405,6 +405,19 @@ void QtCodeFile::clickedTitleBar()
void QtCodeFile::clickedTitle()
{
MessageActivateFile(m_filePath).dispatch();
// TODO: check if external file and maximize instead
// MessageChangeFileView msg(
// message->filePath,
// MessageChangeFileView::FILE_MAXIMIZED,
// true,
// false,
// nullptr
// );
// msg.setIsReplayed(message->isReplayed());
// msg.setKeepContent(message->keepContent());
// msg.dispatch();
}
void QtCodeFile::editProject()