From 5a6e042c8f3a494a71c37fe15a7221a0f23b66a6 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 30 May 2016 16:00:55 +0200 Subject: [PATCH] logic: Removed ActivationTranslator and show old token names in search field --- src/lib/CMakeLists.txt | 2 - .../controller/FeatureController.cpp | 118 ++++++++++++--- .../component/controller/FeatureController.h | 2 - .../component/controller/SearchController.cpp | 23 ++- .../controller/UndoRedoController.cpp | 51 +------ .../component/controller/UndoRedoController.h | 6 - .../helper/ActivationTranslator.cpp | 138 ------------------ .../controller/helper/ActivationTranslator.h | 30 ---- .../messaging/type/MessageActivateTokens.h | 2 + src/lib_gui/qt/element/QtCodeFile.cpp | 13 ++ 10 files changed, 135 insertions(+), 250 deletions(-) delete mode 100644 src/lib/component/controller/helper/ActivationTranslator.cpp delete mode 100644 src/lib/component/controller/helper/ActivationTranslator.h diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index a77db429..822c565d 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -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 diff --git a/src/lib/component/controller/FeatureController.cpp b/src/lib/component/controller/FeatureController.cpp index 91897b7d..8838e9e2 100644 --- a/src/lib/component/controller/FeatureController.cpp +++ b/src/lib/component/controller/FeatureController.cpp @@ -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 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 ids; + if (edgeId) + { + ids.push_back(edgeId); + } + + MessageActivateTokens m(message, ids); + m.isEdge = true; + m.unknownNames = std::vector(1, message->getFullName()); + m.dispatchImmediately(); } } void FeatureController::handleMessage(MessageActivateFile* message) { - std::shared_ptr m = m_activationTranslator.translateMessage(message); - if (m) + Id fileId = m_storageAccess->getTokenIdForFileNode(message->filePath); + + if (fileId) { - m->dispatchImmediately(); + MessageActivateTokens(message, std::vector(1, fileId)).dispatchImmediately(); + } + else + { + MessageActivateTokens m(message, std::vector()); + m.unknownNames.push_back(message->filePath.fileName()); + m.dispatchImmediately(); } } void FeatureController::handleMessage(MessageActivateNodes* message) { - std::shared_ptr m = m_activationTranslator.translateMessage(message); - if (m) + std::vector 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 m = m_activationTranslator.translateMessage(message); - if (m) + const std::vector& 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 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 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(); diff --git a/src/lib/component/controller/FeatureController.h b/src/lib/component/controller/FeatureController.h index d9805b16..739fe751 100644 --- a/src/lib/component/controller/FeatureController.h +++ b/src/lib/component/controller/FeatureController.h @@ -3,7 +3,6 @@ #include -#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 diff --git a/src/lib/component/controller/SearchController.cpp b/src/lib/component/controller/SearchController.cpp index 401d7d24..525f6d1f 100644 --- a/src/lib/component/controller/SearchController.cpp +++ b/src/lib/component/controller/SearchController.cpp @@ -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 matches; + + for (const std::string& name : message->unknownNames) + { + matches.push_back(SearchMatch(name)); + } + + if (!matches.size()) + { + matches.push_back(SearchMatch("")); + } + + getView()->setMatches(matches); + } } } diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 804dcf78..0bf60844 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -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(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::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 m; - std::string commandMessageTypeString = commandMessage->getType(); - if (commandMessageTypeString == MessageActivateEdge::getStaticType()) - { - m = m_activationTranslator.translateMessage(dynamic_cast(commandMessage)); - } - else if (commandMessageTypeString == MessageActivateFile::getStaticType()) - { - m = m_activationTranslator.translateMessage(dynamic_cast(commandMessage)); - } - else if (commandMessageTypeString == MessageActivateNodes::getStaticType()) - { - MessageActivateNodes inputMessage(*dynamic_cast(commandMessage)); - inputMessage.setIsReplayed(true); - m = m_activationTranslator.translateMessage(&inputMessage); - } - else if (commandMessageTypeString == MessageSearch::getStaticType()) - { - m = m_activationTranslator.translateMessage(dynamic_cast(commandMessage)); - } - return (m && m->tokenIds.size() > 0); - } - return false; -} diff --git a/src/lib/component/controller/UndoRedoController.h b/src/lib/component/controller/UndoRedoController.h index 674952ad..aa587eec 100644 --- a/src/lib/component/controller/UndoRedoController.h +++ b/src/lib/component/controller/UndoRedoController.h @@ -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 m_list; std::list::iterator m_iterator; }; diff --git a/src/lib/component/controller/helper/ActivationTranslator.cpp b/src/lib/component/controller/helper/ActivationTranslator.cpp deleted file mode 100644 index 0e9bef7e..00000000 --- a/src/lib/component/controller/helper/ActivationTranslator.cpp +++ /dev/null @@ -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 ActivationTranslator::translateMessage(const MessageActivateEdge* message) const -{ - std::shared_ptr m; - if (message->isAggregation()) - { - // TODO: validate aggregationIds - m = std::make_shared(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(message, std::vector(1, edgeId)); - m->isEdge = true; - } - } - return m; -} - -std::shared_ptr 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(message, std::vector(1, fileId)); -} - -std::shared_ptr ActivationTranslator::translateMessage(const MessageActivateNodes* message) const -{ - std::vector 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 m; - m = std::make_shared(message, nodeIds); - return m; -} - -std::shared_ptr ActivationTranslator::translateMessage(const MessageActivateTokenIds* message) const -{ - return std::make_shared(message, message->tokenIds); -} - -std::shared_ptr ActivationTranslator::translateMessage(const MessageSearch* message) const -{ - const std::vector& 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 tokenIds = m_storageAccess->getTokenIdsForMatches(matches); - - std::shared_ptr m = std::make_shared(message, tokenIds); - if (!message->isReplayed()) - { - m->isFromSearch = true; - } - - return m; -} diff --git a/src/lib/component/controller/helper/ActivationTranslator.h b/src/lib/component/controller/helper/ActivationTranslator.h deleted file mode 100644 index 13a348eb..00000000 --- a/src/lib/component/controller/helper/ActivationTranslator.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef ACTIVATION_TRANSLATOR_H -#define ACTIVATION_TRANSLATOR_H - -#include - -class MessageActivateEdge; -class MessageActivateFile; -class MessageActivateNodes; -class MessageActivateTokenIds; -class MessageActivateTokens; -class MessageSearch; -class StorageAccess; - -class ActivationTranslator -{ -public: - ActivationTranslator(StorageAccess* storageAccess); - ~ActivationTranslator(); - - std::shared_ptr translateMessage(const MessageActivateEdge* message) const; - std::shared_ptr translateMessage(const MessageActivateFile* message) const; - std::shared_ptr translateMessage(const MessageActivateNodes* message) const; - std::shared_ptr translateMessage(const MessageActivateTokenIds* message) const; - std::shared_ptr translateMessage(const MessageSearch* message) const; - -private: - StorageAccess* m_storageAccess; -}; - -#endif // ACTIVATION_TRANSLATOR_H diff --git a/src/lib/utility/messaging/type/MessageActivateTokens.h b/src/lib/utility/messaging/type/MessageActivateTokens.h index 836576d4..8412f7c7 100644 --- a/src/lib/utility/messaging/type/MessageActivateTokens.h +++ b/src/lib/utility/messaging/type/MessageActivateTokens.h @@ -37,6 +37,8 @@ public: bool isEdge; bool isAggregation; bool isFromSearch; + + std::vector unknownNames; }; #endif // MESSAGE_ACTIVATE_TOKENS_H diff --git a/src/lib_gui/qt/element/QtCodeFile.cpp b/src/lib_gui/qt/element/QtCodeFile.cpp index ca5a9cb8..b8d41ae1 100644 --- a/src/lib_gui/qt/element/QtCodeFile.cpp +++ b/src/lib_gui/qt/element/QtCodeFile.cpp @@ -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()