From c8a885be83b84a40e381b264fbd27e00591a3e3d Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 3 Jul 2018 15:11:52 +0200 Subject: [PATCH] logic: Made history menu use on Messages instead of SearchMatch * Common base class MessageActivateBase for activation messages with getter for SearchMatches * Removed duplicate logic for creating SearchMatches from Messages * Fixed can't reactivate fulltext search from history menu * Renamed history message and moved to sub directory * Fixed activating node type filters didn't clear code view --- src/lib/Application.cpp | 4 +- src/lib/Application.h | 2 +- src/lib/CMakeLists.txt | 10 +- .../controller/ActivationController.cpp | 22 +- .../component/controller/CodeController.cpp | 39 +-- src/lib/component/controller/CodeController.h | 6 +- .../component/controller/ErrorController.cpp | 10 +- .../component/controller/ErrorController.h | 8 +- .../component/controller/GraphController.cpp | 10 +- .../component/controller/GraphController.h | 6 +- .../component/controller/SearchController.cpp | 40 +-- .../component/controller/SearchController.h | 6 +- .../controller/UndoRedoController.cpp | 287 ++++++++---------- .../component/controller/UndoRedoController.h | 26 +- src/lib/component/view/MainView.h | 3 +- src/lib/data/search/SearchMatch.h | 5 +- .../messaging/type/MessageActivateAll.h | 19 +- .../messaging/type/MessageActivateBase.h | 14 + .../type/MessageActivateFullTextSearch.h | 40 +++ .../messaging/type/MessageActivateTokens.h | 23 +- .../utility/messaging/type/MessageNewErrors.h | 34 --- src/lib/utility/messaging/type/MessageRedo.h | 20 -- .../utility/messaging/type/MessageSearch.h | 34 +-- .../messaging/type/MessageSearchFullText.h | 29 -- .../type/MessageToUndoRedoPosition.h | 23 -- src/lib/utility/messaging/type/MessageUndo.h | 20 -- .../type/error/MessageActivateErrors.h | 19 +- .../type/history/MessageHistoryRedo.h | 20 ++ .../type/history/MessageHistoryToPosition.h | 23 ++ .../type/history/MessageHistoryUndo.h | 20 ++ src/lib_gui/qt/element/QtHistoryList.cpp | 4 +- src/lib_gui/qt/element/QtSearchBar.cpp | 4 +- src/lib_gui/qt/element/QtSmartSearchBox.cpp | 4 +- src/lib_gui/qt/element/QtStatusBar.cpp | 4 +- src/lib_gui/qt/element/QtUndoRedo.cpp | 8 +- src/lib_gui/qt/utility/QtContextMenu.cpp | 8 +- src/lib_gui/qt/view/QtMainView.cpp | 4 +- src/lib_gui/qt/view/QtMainView.h | 2 +- src/lib_gui/qt/window/QtMainWindow.cpp | 35 ++- src/lib_gui/qt/window/QtMainWindow.h | 4 +- 40 files changed, 427 insertions(+), 472 deletions(-) create mode 100644 src/lib/utility/messaging/type/MessageActivateBase.h create mode 100644 src/lib/utility/messaging/type/MessageActivateFullTextSearch.h delete mode 100644 src/lib/utility/messaging/type/MessageNewErrors.h delete mode 100644 src/lib/utility/messaging/type/MessageRedo.h delete mode 100644 src/lib/utility/messaging/type/MessageSearchFullText.h delete mode 100644 src/lib/utility/messaging/type/MessageToUndoRedoPosition.h delete mode 100644 src/lib/utility/messaging/type/MessageUndo.h create mode 100644 src/lib/utility/messaging/type/history/MessageHistoryRedo.h create mode 100644 src/lib/utility/messaging/type/history/MessageHistoryToPosition.h create mode 100644 src/lib/utility/messaging/type/history/MessageHistoryUndo.h diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index e570bb7f..f4fdaf5a 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -181,9 +181,9 @@ std::shared_ptr Application::getDialogView() return std::make_shared(nullptr); } -void Application::updateHistory(const std::vector& history) +void Application::updateHistoryMenu(const std::vector>& historyMenuItems) { - m_mainView->updateHistoryMenu(history); + m_mainView->updateHistoryMenu(historyMenuItems); } void Application::updateBookmarks(const std::vector>& bookmarks) diff --git a/src/lib/Application.h b/src/lib/Application.h index 8f090f6a..293d6800 100644 --- a/src/lib/Application.h +++ b/src/lib/Application.h @@ -57,7 +57,7 @@ public: int handleDialog(const std::wstring& message, const std::vector& options); std::shared_ptr getDialogView(); - void updateHistory(const std::vector& history); + void updateHistoryMenu(const std::vector>& historyMenuItems); void updateBookmarks(const std::vector>& bookmarks); private: diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 76c82dd2..7d8a93b7 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -428,10 +428,16 @@ add_files( utility/messaging/type/error/MessageErrorsHelpMessage.h utility/messaging/type/error/MessageShowError.h + utility/messaging/type/history/MessageHistoryToPosition.h + utility/messaging/type/history/MessageHistoryRedo.h + utility/messaging/type/history/MessageHistoryUndo.h + utility/messaging/type/MessageActivateAll.h + utility/messaging/type/MessageActivateBase.h utility/messaging/type/MessageActivateBookmark.h utility/messaging/type/MessageActivateEdge.h utility/messaging/type/MessageActivateFile.h + utility/messaging/type/MessageActivateFullTextSearch.h utility/messaging/type/MessageActivateLocalSymbols.h utility/messaging/type/MessageActivateNodes.h utility/messaging/type/MessageActivateSourceLocations.h @@ -468,7 +474,6 @@ add_files( utility/messaging/type/MessageProjectEdit.h utility/messaging/type/MessageProjectNew.h utility/messaging/type/MessageQuitApplication.h - utility/messaging/type/MessageRedo.h utility/messaging/type/MessageRefresh.h utility/messaging/type/MessageResetZoom.h utility/messaging/type/MessageScrollCode.h @@ -476,7 +481,6 @@ add_files( utility/messaging/type/MessageScrollToLine.h utility/messaging/type/MessageSearch.h utility/messaging/type/MessageSearchAutocomplete.h - utility/messaging/type/MessageSearchFullText.h utility/messaging/type/MessageShowReference.h utility/messaging/type/MessageShowScope.h utility/messaging/type/MessageShowStatus.h @@ -486,8 +490,6 @@ add_files( utility/messaging/type/MessageSwitchColorScheme.h utility/messaging/type/MessageTooltipHide.h utility/messaging/type/MessageTooltipShow.h - utility/messaging/type/MessageToUndoRedoPosition.h - utility/messaging/type/MessageUndo.h utility/messaging/type/MessageWindowClosed.h utility/messaging/type/MessageWindowFocus.h utility/messaging/type/MessageZoom.h diff --git a/src/lib/component/controller/ActivationController.cpp b/src/lib/component/controller/ActivationController.cpp index dfd520b9..30e05d4f 100644 --- a/src/lib/component/controller/ActivationController.cpp +++ b/src/lib/component/controller/ActivationController.cpp @@ -11,6 +11,7 @@ #include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageStatus.h" #include "utility/messaging/type/MessageScrollToLine.h" +#include "utility/utility.h" ActivationController::ActivationController(StorageAccess* storageAccess) : m_storageAccess(storageAccess) @@ -152,22 +153,15 @@ void ActivationController::handleMessage(MessageSearch* message) } MessageActivateTokens m(message); - m.isFromSearch = message->isFromSearch; - - if (message->isFromSearch) + m.isFromSearch = true; + for (const SearchMatch& match : matches) { - m.tokenIds = message->getTokenIdsOfMatches(); - m.searchMatches = matches; + if (match.tokenIds.size() && match.tokenIds[0] != 0) + { + utility::append(m.tokenIds, match.tokenIds); + m.searchMatches.push_back(match); + } } - else - { - std::pair, std::vector> ret = - m_storageAccess->getNodeIdsAndSearchMatchesForNameHierarchies(message->getTokenNamesOfMatches()); - - m.tokenIds = ret.first; - m.searchMatches = ret.second; - } - m.dispatchImmediately(); } diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 2d946690..209ab92d 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -35,6 +35,7 @@ void CodeController::handleMessage(MessageActivateAll* message) Project* currentProject = Application::getInstance()->getCurrentProject().get(); if (!currentProject || message->acceptedNodeTypes != NodeTypeSet::all()) { + clear(); return; } @@ -132,6 +133,25 @@ void CodeController::handleMessage(MessageActivateErrors* message) showCodeSnippets(snippets, params, false); } +void CodeController::handleMessage(MessageActivateFullTextSearch* message) +{ + TRACE("code fulltext"); + + saveOrRestoreViewMode(message); + + m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive); + + CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION); + getView()->scrollTo(scrollParams); + + CodeView::CodeParams params; + params.clearSnippets = true; + params.showContents = !message->isReplayed(); + params.useSingleFileCache = false; + + showCodeSnippets(getSnippetsForCollection(m_collection), params); +} + void CodeController::handleMessage(MessageActivateLocalSymbols* message) { CodeView* view = getView(); @@ -326,25 +346,6 @@ void CodeController::handleMessage(MessageScrollCode* message) } } -void CodeController::handleMessage(MessageSearchFullText* message) -{ - TRACE("code fulltext"); - - saveOrRestoreViewMode(message); - - m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive); - - CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION); - getView()->scrollTo(scrollParams); - - CodeView::CodeParams params; - params.clearSnippets = true; - params.showContents = !message->isReplayed(); - params.useSingleFileCache = false; - - showCodeSnippets(getSnippetsForCollection(m_collection), params); -} - void CodeController::handleMessage(MessageShowError* message) { CodeView* view = getView(); diff --git a/src/lib/component/controller/CodeController.h b/src/lib/component/controller/CodeController.h index 14a52ede..ffa6d5dd 100644 --- a/src/lib/component/controller/CodeController.h +++ b/src/lib/component/controller/CodeController.h @@ -10,6 +10,7 @@ #include "utility/messaging/type/error/MessageErrorCountClear.h" #include "utility/messaging/type/error/MessageShowError.h" #include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrailEdge.h" @@ -20,7 +21,6 @@ #include "utility/messaging/type/MessageFocusOut.h" #include "utility/messaging/type/MessageScrollCode.h" #include "utility/messaging/type/MessageScrollToLine.h" -#include "utility/messaging/type/MessageSearchFullText.h" #include "utility/messaging/type/MessageShowScope.h" #include "utility/types.h" @@ -37,6 +37,7 @@ class CodeController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -48,7 +49,6 @@ class CodeController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener , public MessageListener { @@ -61,6 +61,7 @@ private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateFullTextSearch* message); virtual void handleMessage(MessageActivateLocalSymbols* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrailEdge* message); @@ -72,7 +73,6 @@ private: virtual void handleMessage(MessageFocusOut* message); virtual void handleMessage(MessageScrollCode* message); virtual void handleMessage(MessageScrollToLine* message); - virtual void handleMessage(MessageSearchFullText* message); virtual void handleMessage(MessageShowError* message); virtual void handleMessage(MessageShowScope* message); diff --git a/src/lib/component/controller/ErrorController.cpp b/src/lib/component/controller/ErrorController.cpp index 9c28c8d6..18528c1f 100644 --- a/src/lib/component/controller/ErrorController.cpp +++ b/src/lib/component/controller/ErrorController.cpp @@ -55,6 +55,11 @@ void ErrorController::handleMessage(MessageActivateErrors* message) } } +void ErrorController::handleMessage(MessageActivateFullTextSearch* message) +{ + m_showsErrors = false; +} + void ErrorController::handleMessage(MessageActivateTokens* message) { m_showsErrors = false; @@ -140,11 +145,6 @@ void ErrorController::handleMessage(MessageShowError* message) getView()->setErrorId(message->errorId); } -void ErrorController::handleMessage(MessageSearchFullText* message) -{ - m_showsErrors = false; -} - ErrorView* ErrorController::getView() const { return Controller::getView(); diff --git a/src/lib/component/controller/ErrorController.h b/src/lib/component/controller/ErrorController.h index 28975967..4777a239 100644 --- a/src/lib/component/controller/ErrorController.h +++ b/src/lib/component/controller/ErrorController.h @@ -9,10 +9,10 @@ #include "utility/messaging/type/error/MessageErrorsForFile.h" #include "utility/messaging/type/error/MessageErrorsHelpMessage.h" #include "utility/messaging/type/error/MessageShowError.h" -#include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" +#include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageFinishedParsing.h" -#include "utility/messaging/type/MessageSearchFullText.h" #include "component/controller/Controller.h" #include "component/view/ErrorView.h" @@ -23,6 +23,7 @@ class ErrorController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -31,7 +32,6 @@ class ErrorController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener { public: ErrorController(StorageAccess* storageAccess); @@ -43,6 +43,7 @@ public: private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateFullTextSearch* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageErrorCountClear* message); virtual void handleMessage(MessageErrorCountUpdate* message); @@ -51,7 +52,6 @@ private: virtual void handleMessage(MessageErrorsHelpMessage* message); virtual void handleMessage(MessageFinishedParsing* message); virtual void handleMessage(MessageShowError* message); - virtual void handleMessage(MessageSearchFullText* message); ErrorView* getView() const; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 7b3e0120..a6b26a30 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -69,6 +69,11 @@ void GraphController::handleMessage(MessageActivateErrors* message) clear(); } +void GraphController::handleMessage(MessageActivateFullTextSearch* message) +{ + clear(); +} + void GraphController::handleMessage(MessageActivateTokens* message) { TRACE("graph activate"); @@ -259,11 +264,6 @@ void GraphController::handleMessage(MessageScrollGraph* message) } } -void GraphController::handleMessage(MessageSearchFullText* message) -{ - clear(); -} - void GraphController::handleMessage(MessageFocusIn* message) { getView()->focusTokenIds(message->tokenIds); diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h index a7ac4c89..6f0bda9e 100644 --- a/src/lib/component/controller/GraphController.h +++ b/src/lib/component/controller/GraphController.h @@ -7,6 +7,7 @@ #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrail.h" #include "utility/messaging/type/MessageActivateTrailEdge.h" @@ -18,7 +19,6 @@ #include "utility/messaging/type/MessageGraphNodeHide.h" #include "utility/messaging/type/MessageGraphNodeMove.h" #include "utility/messaging/type/MessageScrollGraph.h" -#include "utility/messaging/type/MessageSearchFullText.h" #include "utility/messaging/type/MessageShowReference.h" #include "component/controller/Controller.h" @@ -34,6 +34,7 @@ class GraphController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -45,7 +46,6 @@ class GraphController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener { public: @@ -55,6 +55,7 @@ public: private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateFullTextSearch* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrail* message); virtual void handleMessage(MessageActivateTrailEdge* message); @@ -66,7 +67,6 @@ private: virtual void handleMessage(MessageGraphNodeHide* message); virtual void handleMessage(MessageGraphNodeMove* message); virtual void handleMessage(MessageScrollGraph* message); - virtual void handleMessage(MessageSearchFullText* message); virtual void handleMessage(MessageShowReference* message); GraphView* getView() const; diff --git a/src/lib/component/controller/SearchController.cpp b/src/lib/component/controller/SearchController.cpp index 7723d882..7c1d5f11 100644 --- a/src/lib/component/controller/SearchController.cpp +++ b/src/lib/component/controller/SearchController.cpp @@ -16,39 +16,27 @@ SearchController::~SearchController() void SearchController::handleMessage(MessageActivateAll* message) { - if (message->acceptedNodeTypes != NodeTypeSet::all()) - { - if (message->isReplayed()) - { - getView()->setMatches(SearchMatch::createCommandsForNodeTypes(message->acceptedNodeTypes)); - } - return; - } - - getView()->setMatches(std::vector(1, SearchMatch::createCommand(SearchMatch::COMMAND_ALL))); + getView()->setMatches(message->getSearchMatches()); } void SearchController::handleMessage(MessageActivateErrors* message) { - SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ERROR); - getView()->setMatches(std::vector(1, match)); + getView()->setMatches(message->getSearchMatches()); +} + +void SearchController::handleMessage(MessageActivateFullTextSearch* message) +{ + getView()->setMatches(message->getSearchMatches()); } void SearchController::handleMessage(MessageActivateTokens* message) { - if ((message->isFromSearch && !message->isReplayed()) || message->keepContent()) + if (message->keepContent()) { return; } - if (message->searchMatches.size()) - { - getView()->setMatches(message->searchMatches); - } - else if (message->tokenIds.size()) - { - getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds)); - } + getView()->setMatches(message->getSearchMatches()); } void SearchController::handleMessage(MessageFind* message) @@ -79,16 +67,6 @@ void SearchController::handleMessage(MessageSearchAutocomplete* message) view->setAutocompletionList(m_storageAccess->getAutocompletionMatches(message->query, message->acceptedNodeTypes)); } -void SearchController::handleMessage(MessageSearchFullText* message) -{ - LOG_INFO(L"fulltext string: \"" + message->searchTerm + L"\""); - std::wstring prefix(message->caseSensitive ? 2 : 1, SearchMatch::FULLTEXT_SEARCH_CHARACTER); - - SearchMatch match(prefix + message->searchTerm); - match.searchType = SearchMatch::SEARCH_FULLTEXT; - getView()->setMatches(std::vector(1, match)); -} - SearchView* SearchController::getView() { return Controller::getView(); diff --git a/src/lib/component/controller/SearchController.h b/src/lib/component/controller/SearchController.h index 45bd6349..39016393 100644 --- a/src/lib/component/controller/SearchController.h +++ b/src/lib/component/controller/SearchController.h @@ -5,10 +5,10 @@ #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageFind.h" #include "utility/messaging/type/MessageSearchAutocomplete.h" -#include "utility/messaging/type/MessageSearchFullText.h" class StorageAccess; class SearchView; @@ -17,10 +17,10 @@ class SearchController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener { public: SearchController(StorageAccess* storageAccess); @@ -29,10 +29,10 @@ public: private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateFullTextSearch* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageFind* message); virtual void handleMessage(MessageSearchAutocomplete* message); - virtual void handleMessage(MessageSearchFullText* message); SearchView* getView(); diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 57239f4c..ced2ca09 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -2,6 +2,7 @@ #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageSearch.h" +#include "utility/utility.h" #include "Application.h" #include "component/view/UndoRedoView.h" @@ -27,7 +28,6 @@ void UndoRedoController::clear() m_list.clear(); m_iterator = m_list.begin(); - m_history.clear(); m_historyOffset = 0; updateHistory(); @@ -67,6 +67,19 @@ void UndoRedoController::handleMessage(MessageActivateErrors* message) processCommand(command); } +void UndoRedoController::handleMessage(MessageActivateFullTextSearch* message) +{ + if (sameMessageTypeAsLast(message) && + static_cast(lastMessage())->searchTerm == message->searchTerm && + static_cast(lastMessage())->caseSensitive == message->caseSensitive) + { + return; + } + + Command command(std::make_shared(*message), Command::ORDER_ACTIVATE); + processCommand(command); +} + void UndoRedoController::handleMessage(MessageActivateLocalSymbols* message) { if (sameMessageTypeAsLast(message)) @@ -200,7 +213,7 @@ void UndoRedoController::handleMessage(MessageGraphNodeMove* message) processCommand(command); } -void UndoRedoController::handleMessage(MessageRedo* message) +void UndoRedoController::handleMessage(MessageHistoryRedo* message) { if (m_iterator == m_list.end()) { @@ -226,92 +239,7 @@ void UndoRedoController::handleMessage(MessageRedo* message) updateHistory(); } -void UndoRedoController::handleMessage(MessageRefresh* message) -{ - if (!message->uiOnly) - { - return; - } - - if (m_iterator == m_list.begin()) - { - MessageSearch({ SearchMatch::createCommand(SearchMatch::COMMAND_ALL) }).dispatch(); - } - else - { - replayCommands(); - } -} - -void UndoRedoController::handleMessage(MessageScrollCode* message) -{ - if (sameMessageTypeAsLast(message)) - { - static_cast(lastMessage())->value = message->value; - return; - } - - Command command(std::make_shared(*message), Command::ORDER_VIEW, true); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageScrollGraph* message) -{ - if (sameMessageTypeAsLast(message)) - { - static_cast(lastMessage())->xValue = message->xValue; - static_cast(lastMessage())->yValue = message->yValue; - return; - } - - Command command(std::make_shared(*message), Command::ORDER_VIEW, true); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageSearchFullText* message) -{ - if (sameMessageTypeAsLast(message) && - static_cast(lastMessage())->searchTerm == message->searchTerm && - static_cast(lastMessage())->caseSensitive == message->caseSensitive) - { - return; - } - - Command command(std::make_shared(*message), Command::ORDER_ACTIVATE); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageShowError* message) -{ - if (sameMessageTypeAsLast(message) && - static_cast(lastMessage())->errorId == message->errorId) - { - return; - } - - Command command(std::make_shared(*message), Command::ORDER_ADAPT); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageShowReference* message) -{ - if (sameMessageTypeAsLast(message) && - static_cast(lastMessage())->refIndex == message->refIndex) - { - return; - } - - Command command(std::make_shared(*message), Command::ORDER_VIEW, true); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageShowScope* message) -{ - Command command(std::make_shared(*message), Command::ORDER_VIEW); - processCommand(command); -} - -void UndoRedoController::handleMessage(MessageToUndoRedoPosition* message) +void UndoRedoController::handleMessage(MessageHistoryToPosition* message) { size_t index = 0; const size_t activeIndex = message->index + m_historyOffset; @@ -359,7 +287,7 @@ void UndoRedoController::handleMessage(MessageToUndoRedoPosition* message) updateHistory(); } -void UndoRedoController::handleMessage(MessageUndo* message) +void UndoRedoController::handleMessage(MessageHistoryUndo* message) { if (!m_list.size()) { @@ -400,6 +328,78 @@ void UndoRedoController::handleMessage(MessageUndo* message) updateHistory(); } +void UndoRedoController::handleMessage(MessageRefresh* message) +{ + if (!message->uiOnly) + { + return; + } + + if (m_iterator == m_list.begin()) + { + MessageActivateAll().dispatch(); + } + else + { + replayCommands(); + } +} + +void UndoRedoController::handleMessage(MessageScrollCode* message) +{ + if (sameMessageTypeAsLast(message)) + { + static_cast(lastMessage())->value = message->value; + return; + } + + Command command(std::make_shared(*message), Command::ORDER_VIEW, true); + processCommand(command); +} + +void UndoRedoController::handleMessage(MessageScrollGraph* message) +{ + if (sameMessageTypeAsLast(message)) + { + static_cast(lastMessage())->xValue = message->xValue; + static_cast(lastMessage())->yValue = message->yValue; + return; + } + + Command command(std::make_shared(*message), Command::ORDER_VIEW, true); + processCommand(command); +} + +void UndoRedoController::handleMessage(MessageShowError* message) +{ + if (sameMessageTypeAsLast(message) && + static_cast(lastMessage())->errorId == message->errorId) + { + return; + } + + Command command(std::make_shared(*message), Command::ORDER_ADAPT); + processCommand(command); +} + +void UndoRedoController::handleMessage(MessageShowReference* message) +{ + if (sameMessageTypeAsLast(message) && + static_cast(lastMessage())->refIndex == message->refIndex) + { + return; + } + + Command command(std::make_shared(*message), Command::ORDER_VIEW, true); + processCommand(command); +} + +void UndoRedoController::handleMessage(MessageShowScope* message) +{ + Command command(std::make_shared(*message), Command::ORDER_VIEW); + processCommand(command); +} + void UndoRedoController::replayCommands() { std::list::iterator startIterator = m_iterator; @@ -468,6 +468,9 @@ void UndoRedoController::replayCommand(std::list::iterator it) } m->dispatch(); + + m->setIsReplayed(false); + m->setIsLast(false); } void UndoRedoController::processCommand(Command command) @@ -549,16 +552,20 @@ MessageBase* UndoRedoController::lastMessage() const void UndoRedoController::updateHistory() { - const size_t historySize = 50; + const size_t historyListSize = 50; const size_t historyMenuSize = 20; - std::vector matches; - bool firstActiveMessage = false; + std::vector historyListMatches; + std::vector> historyMenuItems; + std::set uniqueMatches; size_t index = 0; int currentIndex = -1; m_historyOffset = 0; + bool historyMenuFull = false; + bool historyListFull = false; + for (std::list::const_reverse_iterator it = m_list.rbegin(); it != m_list.rend(); it++) { if (m_iterator == it.base()) @@ -566,96 +573,54 @@ void UndoRedoController::updateHistory() currentIndex = index; } - if (it->order == Command::ORDER_ACTIVATE) + if (it->order == Command::ORDER_ACTIVATE && dynamic_cast(it->message.get())) { index++; - SearchMatch match = getSearchMatchForMessage(it->message.get()); - if (match.text.empty()) + std::vector m = dynamic_cast(it->message.get())->getSearchMatches(); + if (!m.size() || m[0].text.empty()) { continue; } - if (!firstActiveMessage) - { - firstActiveMessage = true; + SearchMatch match = m[0]; - for (size_t i = 0; i < m_history.size(); i++) + if (!historyMenuFull && uniqueMatches.insert(match).second) + { + historyMenuItems.push_back(it->message); + + if (historyMenuItems.size() == historyMenuSize) { - if (m_history[i] == match) - { - m_history.erase(m_history.begin() + i); - break; - } - } - m_history.push_front(match); - if (m_history.size() > historyMenuSize) - { - m_history.pop_back(); + historyMenuFull = true; } } - matches.push_back(match); - - if (matches.size() > historySize) + if (!historyListFull) { - matches.erase(matches.begin()); - m_historyOffset++; + historyListMatches.push_back(match); + + if (historyListMatches.size() > historyListSize) + { + historyListMatches.erase(historyListMatches.begin()); + m_historyOffset++; + } + + if (historyListMatches.size() == historyListSize && + currentIndex != -1 && currentIndex - m_historyOffset != historyListSize - 1) + { + historyListFull = true; + } } - if (matches.size() == historySize && currentIndex != -1 && currentIndex - m_historyOffset != historySize - 1) + if (historyMenuFull && historyListFull) { break; } } } - getView()->updateHistory(matches, currentIndex - m_historyOffset); - Application::getInstance()->updateHistory(std::vector(m_history.begin(), m_history.end())); -} - -SearchMatch UndoRedoController::getSearchMatchForMessage(MessageBase* message) const -{ - if (message->getType() == MessageActivateAll::getStaticType()) - { - SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ALL); - if (dynamic_cast(message)->acceptedNodeTypes != NodeTypeSet::all()) - { - match.name = match.text = L"filter"; // TODO: show acceptedNodeTypes names or at least type ids - } - return match; - } - else if (message->getType() == MessageActivateTokens::getStaticType()) - { - MessageActivateTokens* msg = dynamic_cast(message); - if (msg->searchMatches.size()) - { - return msg->searchMatches.front(); - } - else if (msg->isAggregation) - { - SearchMatch match; - match.name = match.text = L"aggregation"; // TODO: show aggregation source and target - match.searchType = SearchMatch::SEARCH_TOKEN; - match.nodeType = NodeType::NODE_TYPE; - return match; - } - } - else if (message->getType() == MessageSearchFullText::getStaticType()) - { - MessageSearchFullText* msg = dynamic_cast(message); - std::wstring prefix(msg->caseSensitive ? 2 : 1, SearchMatch::FULLTEXT_SEARCH_CHARACTER); - - SearchMatch match(prefix + msg->searchTerm); - match.searchType = SearchMatch::SEARCH_FULLTEXT; - return match; - } - else if (message->getType() == MessageActivateErrors::getStaticType()) - { - return SearchMatch::createCommand(SearchMatch::COMMAND_ERROR); - } - - return SearchMatch(); + getView()->updateHistory(historyListMatches, currentIndex - m_historyOffset); + Application::getInstance()->updateHistoryMenu(historyMenuItems); } void UndoRedoController::dump() const diff --git a/src/lib/component/controller/UndoRedoController.h b/src/lib/component/controller/UndoRedoController.h index ffadbadb..b69e62f5 100644 --- a/src/lib/component/controller/UndoRedoController.h +++ b/src/lib/component/controller/UndoRedoController.h @@ -7,7 +7,11 @@ #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/error/MessageShowError.h" +#include "utility/messaging/type/history/MessageHistoryRedo.h" +#include "utility/messaging/type/history/MessageHistoryToPosition.h" +#include "utility/messaging/type/history/MessageHistoryUndo.h" #include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrail.h" @@ -19,15 +23,11 @@ #include "utility/messaging/type/MessageGraphNodeExpand.h" #include "utility/messaging/type/MessageGraphNodeHide.h" #include "utility/messaging/type/MessageGraphNodeMove.h" -#include "utility/messaging/type/MessageRedo.h" #include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageScrollCode.h" #include "utility/messaging/type/MessageScrollGraph.h" -#include "utility/messaging/type/MessageSearchFullText.h" #include "utility/messaging/type/MessageShowReference.h" #include "utility/messaging/type/MessageShowScope.h" -#include "utility/messaging/type/MessageToUndoRedoPosition.h" -#include "utility/messaging/type/MessageUndo.h" #include "component/controller/Controller.h" @@ -38,6 +38,7 @@ class UndoRedoController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -49,16 +50,15 @@ class UndoRedoController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener + , public MessageListener + , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener - , public MessageListener { public: UndoRedoController(StorageAccess* storageAccess); @@ -87,6 +87,7 @@ private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateFullTextSearch* message); virtual void handleMessage(MessageActivateLocalSymbols* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrail* message); @@ -98,16 +99,15 @@ private: virtual void handleMessage(MessageGraphNodeExpand* message); virtual void handleMessage(MessageGraphNodeHide* message); virtual void handleMessage(MessageGraphNodeMove* message); - virtual void handleMessage(MessageRedo* message); + virtual void handleMessage(MessageHistoryRedo* message); + virtual void handleMessage(MessageHistoryToPosition* message); + virtual void handleMessage(MessageHistoryUndo* message); virtual void handleMessage(MessageRefresh* message); virtual void handleMessage(MessageScrollCode* message); virtual void handleMessage(MessageScrollGraph* message); - virtual void handleMessage(MessageSearchFullText* message); virtual void handleMessage(MessageShowError* message); virtual void handleMessage(MessageShowReference* message); virtual void handleMessage(MessageShowScope* message); - virtual void handleMessage(MessageToUndoRedoPosition* message); - virtual void handleMessage(MessageUndo* message); void replayCommands(); void replayCommands(std::list::iterator it); @@ -119,7 +119,6 @@ private: MessageBase* lastMessage() const; void updateHistory(); - SearchMatch getSearchMatchForMessage(MessageBase* message) const; void dump() const; @@ -128,7 +127,6 @@ private: std::list m_list; std::list::iterator m_iterator; - std::deque m_history; size_t m_historyOffset; }; diff --git a/src/lib/component/view/MainView.h b/src/lib/component/view/MainView.h index 0dff385c..9d8804d6 100644 --- a/src/lib/component/view/MainView.h +++ b/src/lib/component/view/MainView.h @@ -9,6 +9,7 @@ struct SearchMatch; class Bookmark; +class MessageBase; class MainView : public ViewLayout @@ -27,7 +28,7 @@ public: virtual void activateWindow() = 0; virtual void updateRecentProjectMenu() = 0; - virtual void updateHistoryMenu(const std::vector& history) = 0; + virtual void updateHistoryMenu(const std::vector>& historyMenuItems) = 0; virtual void updateBookmarksMenu(const std::vector>& bookmarks) = 0; }; diff --git a/src/lib/data/search/SearchMatch.h b/src/lib/data/search/SearchMatch.h index dd55289e..17f99fc0 100644 --- a/src/lib/data/search/SearchMatch.h +++ b/src/lib/data/search/SearchMatch.h @@ -74,9 +74,8 @@ struct SearchMatch SearchType searchType; std::vector indices; - int score; - - bool hasChildren; + int score = 0; + bool hasChildren = false; }; diff --git a/src/lib/utility/messaging/type/MessageActivateAll.h b/src/lib/utility/messaging/type/MessageActivateAll.h index d5a0d9df..3b1b1cdd 100644 --- a/src/lib/utility/messaging/type/MessageActivateAll.h +++ b/src/lib/utility/messaging/type/MessageActivateAll.h @@ -1,23 +1,34 @@ #ifndef MESSAGE_ACTIVATE_ALL_H #define MESSAGE_ACTIVATE_ALL_H -#include "data/graph/Node.h" -#include "data/NodeTypeSet.h" #include "utility/messaging/Message.h" +#include "utility/messaging/type/MessageActivateBase.h" + +#include "data/NodeTypeSet.h" class MessageActivateAll : public Message + , public MessageActivateBase { public: + static const std::string getStaticType() + { + return "MessageActivateAll"; + } + MessageActivateAll(NodeTypeSet acceptedNodeTypes = NodeTypeSet::all()) : acceptedNodeTypes(acceptedNodeTypes) { setIsParallel(true); } - static const std::string getStaticType() + std::vector getSearchMatches() const override { - return "MessageActivateAll"; + if (acceptedNodeTypes != NodeTypeSet::all()) + { + return SearchMatch::createCommandsForNodeTypes(acceptedNodeTypes); + } + return { SearchMatch::createCommand(SearchMatch::COMMAND_ALL) }; } NodeTypeSet acceptedNodeTypes; diff --git a/src/lib/utility/messaging/type/MessageActivateBase.h b/src/lib/utility/messaging/type/MessageActivateBase.h new file mode 100644 index 00000000..dcd0eba9 --- /dev/null +++ b/src/lib/utility/messaging/type/MessageActivateBase.h @@ -0,0 +1,14 @@ +#ifndef MESSAGE_ACTIVATE_BASE_H +#define MESSAGE_ACTIVATE_BASE_H + +#include "data/search/SearchMatch.h" + +class MessageActivateBase +{ +public: + virtual ~MessageActivateBase() = default; + + virtual std::vector getSearchMatches() const = 0; +}; + +#endif // MESSAGE_ACTIVATE_BASE_H diff --git a/src/lib/utility/messaging/type/MessageActivateFullTextSearch.h b/src/lib/utility/messaging/type/MessageActivateFullTextSearch.h new file mode 100644 index 00000000..348558a7 --- /dev/null +++ b/src/lib/utility/messaging/type/MessageActivateFullTextSearch.h @@ -0,0 +1,40 @@ +#ifndef MESSAGE_ACTIVATE_FULLTEXT_SEARCH_H +#define MESSAGE_ACTIVATE_FULLTEXT_SEARCH_H + +#include "utility/messaging/Message.h" +#include "utility/messaging/type/MessageActivateBase.h" + +class MessageActivateFullTextSearch + : public Message + , public MessageActivateBase +{ +public: + static const std::string getStaticType() + { + return "MessageActivateFullTextSearch"; + } + + MessageActivateFullTextSearch(const std::wstring& searchTerm, bool caseSensitive = false) + : searchTerm(searchTerm) + , caseSensitive(caseSensitive) + { + } + + void print(std::wostream& os) const override + { + os << searchTerm; + } + + std::vector getSearchMatches() const override + { + std::wstring prefix(caseSensitive ? 2 : 1, SearchMatch::FULLTEXT_SEARCH_CHARACTER); + SearchMatch match(prefix + searchTerm); + match.searchType = SearchMatch::SEARCH_FULLTEXT; + return { match }; + } + + const std::wstring searchTerm; + bool caseSensitive; +}; + +#endif // MESSAGE_ACTIVATE_FULLTEXT_SEARCH_H diff --git a/src/lib/utility/messaging/type/MessageActivateTokens.h b/src/lib/utility/messaging/type/MessageActivateTokens.h index ce4b43d1..4ff1d08c 100644 --- a/src/lib/utility/messaging/type/MessageActivateTokens.h +++ b/src/lib/utility/messaging/type/MessageActivateTokens.h @@ -2,12 +2,14 @@ #define MESSAGE_ACTIVATE_TOKENS_H #include "utility/messaging/Message.h" +#include "utility/messaging/type/MessageActivateBase.h" #include "utility/types.h" #include "data/search/SearchMatch.h" class MessageActivateTokens : public Message + , public MessageActivateBase { public: static const std::string getStaticType() @@ -24,12 +26,31 @@ public: setKeepContent(other->keepContent()); } - virtual void print(std::wostream& os) const + void print(std::wostream& os) const override { for (const Id& id : tokenIds) { os << id << L" "; } + + for (const SearchMatch& match : searchMatches) + { + os << match.tokenName.getQualifiedName() << L" "; + } + } + + std::vector getSearchMatches() const override + { + if (isAggregation) + { + SearchMatch match; + match.name = match.text = L"aggregation"; // TODO: show aggregation source and target + match.searchType = SearchMatch::SEARCH_TOKEN; + match.nodeType = NodeType::NODE_TYPE; + return { match }; + } + + return searchMatches; } std::vector getTokenNamesOfMatches() const diff --git a/src/lib/utility/messaging/type/MessageNewErrors.h b/src/lib/utility/messaging/type/MessageNewErrors.h deleted file mode 100644 index 1cd6248e..00000000 --- a/src/lib/utility/messaging/type/MessageNewErrors.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef MESSAGE_NEW_ERRORS_H -#define MESSAGE_NEW_ERRORS_H - -#include "utility/messaging/Message.h" - -#include "data/ErrorCountInfo.h" -#include "data/ErrorInfo.h" - -class MessageNewErrors - : public Message -{ -public: - MessageNewErrors(const std::vector& errors, ErrorCountInfo errorCount) - : errors(errors) - , errorCount(errorCount) - { - setSendAsTask(false); - } - - static const std::string getStaticType() - { - return "MessageNewErrors"; - } - - virtual void print(std::wostream& os) const - { - os << errors.size() << L" errors"; - } - - std::vector errors; - const ErrorCountInfo errorCount; -}; - -#endif // MESSAGE_NEW_ERRORS_H diff --git a/src/lib/utility/messaging/type/MessageRedo.h b/src/lib/utility/messaging/type/MessageRedo.h deleted file mode 100644 index aa2f9152..00000000 --- a/src/lib/utility/messaging/type/MessageRedo.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef MESSAGE_REDO_H -#define MESSAGE_REDO_H - -#include "utility/messaging/Message.h" - -class MessageRedo - : public Message -{ -public: - MessageRedo() - { - } - - static const std::string getStaticType() - { - return "MessageRedo"; - } -}; - -#endif // MESSAGE_REDO_H diff --git a/src/lib/utility/messaging/type/MessageSearch.h b/src/lib/utility/messaging/type/MessageSearch.h index 6e3b84f3..e34c3565 100644 --- a/src/lib/utility/messaging/type/MessageSearch.h +++ b/src/lib/utility/messaging/type/MessageSearch.h @@ -15,9 +15,8 @@ public: return "MessageSearch"; } - MessageSearch(const std::vector& matches, NodeTypeSet acceptedNodeTypes = NodeTypeSet::all()) - : isFromSearch(true) - , acceptedNodeTypes(acceptedNodeTypes) + MessageSearch(const std::vector& matches, NodeTypeSet acceptedNodeTypes) + : acceptedNodeTypes(acceptedNodeTypes) , m_matches(matches) { } @@ -27,41 +26,14 @@ public: return m_matches; } - std::vector getTokenIdsOfMatches() const - { - std::vector tokenIds; - for (const SearchMatch& match : m_matches) - { - for (const Id tokenId : match.tokenIds) - { - if (tokenId) - { - tokenIds.push_back(tokenId); - } - } - } - return tokenIds; - } - - std::vector getTokenNamesOfMatches() const - { - std::vector tokenNames; - for (const SearchMatch& match : m_matches) - { - tokenNames.push_back(match.tokenName); - } - return tokenNames; - } - virtual void print(std::wostream& os) const { for (const SearchMatch& match : m_matches) { - os << " @" << match.name << "-" << match.tokenName.getQualifiedName(); + os << " @" << match.name; } } - bool isFromSearch; NodeTypeSet acceptedNodeTypes; private: diff --git a/src/lib/utility/messaging/type/MessageSearchFullText.h b/src/lib/utility/messaging/type/MessageSearchFullText.h deleted file mode 100644 index c98fb7f0..00000000 --- a/src/lib/utility/messaging/type/MessageSearchFullText.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef MESSAGE_SEARCH_FULLTEXT_H -#define MESSAGE_SEARCH_FULLTEXT_H - -#include "utility/messaging/Message.h" - -class MessageSearchFullText: public Message -{ -public: - MessageSearchFullText(const std::wstring& searchTerm, bool caseSensitive = false) - : searchTerm(searchTerm) - , caseSensitive(caseSensitive) - { - } - - static const std::string getStaticType() - { - return "MessageSearchFullText"; - } - - virtual void print(std::wostream& os) const - { - os << searchTerm; - } - - const std::wstring searchTerm; - bool caseSensitive; -}; - -#endif // MESSAGE_SEARCH_FULLTEXT_H diff --git a/src/lib/utility/messaging/type/MessageToUndoRedoPosition.h b/src/lib/utility/messaging/type/MessageToUndoRedoPosition.h deleted file mode 100644 index 1e3db364..00000000 --- a/src/lib/utility/messaging/type/MessageToUndoRedoPosition.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MESSAGE_TO_UNDO_REDO_POSITION_H -#define MESSAGE_TO_UNDO_REDO_POSITION_H - -#include "utility/messaging/Message.h" - -class MessageToUndoRedoPosition - : public Message -{ -public: - MessageToUndoRedoPosition(size_t index) - : index(index) - { - } - - static const std::string getStaticType() - { - return "MessageToUndoRedoPosition"; - } - - size_t index; -}; - -#endif // MESSAGE_TO_UNDO_REDO_POSITION_H diff --git a/src/lib/utility/messaging/type/MessageUndo.h b/src/lib/utility/messaging/type/MessageUndo.h deleted file mode 100644 index aeedb6e4..00000000 --- a/src/lib/utility/messaging/type/MessageUndo.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef MESSAGE_UNDO_H -#define MESSAGE_UNDO_H - -#include "utility/messaging/Message.h" - -class MessageUndo - : public Message -{ -public: - MessageUndo() - { - } - - static const std::string getStaticType() - { - return "MessageUndo"; - } -}; - -#endif // MESSAGE_UNDO_H diff --git a/src/lib/utility/messaging/type/error/MessageActivateErrors.h b/src/lib/utility/messaging/type/error/MessageActivateErrors.h index f05164fe..9a1434c4 100644 --- a/src/lib/utility/messaging/type/error/MessageActivateErrors.h +++ b/src/lib/utility/messaging/type/error/MessageActivateErrors.h @@ -1,11 +1,14 @@ #ifndef MESSAGE_ACTIVATE_ERRORS_H #define MESSAGE_ACTIVATE_ERRORS_H -#include "data/ErrorFilter.h" #include "utility/messaging/Message.h" +#include "utility/messaging/type/MessageActivateBase.h" + +#include "data/ErrorFilter.h" class MessageActivateErrors : public Message + , public MessageActivateBase { public: static const std::string getStaticType() @@ -19,6 +22,20 @@ public: { } + std::vector getSearchMatches() const override + { + std::vector matches = { SearchMatch::createCommand(SearchMatch::COMMAND_ERROR) }; + if (!file.empty()) + { + SearchMatch match; + match.name = match.text = file.fileName(); + match.searchType = SearchMatch::SEARCH_TOKEN; + match.nodeType = NodeType::NODE_FILE; + matches.push_back(match); + } + return matches; + } + const ErrorFilter filter; const FilePath file; }; diff --git a/src/lib/utility/messaging/type/history/MessageHistoryRedo.h b/src/lib/utility/messaging/type/history/MessageHistoryRedo.h new file mode 100644 index 00000000..01e35481 --- /dev/null +++ b/src/lib/utility/messaging/type/history/MessageHistoryRedo.h @@ -0,0 +1,20 @@ +#ifndef MESSAGE_HISTORY_REDO_H +#define MESSAGE_HISTORY_REDO_H + +#include "utility/messaging/Message.h" + +class MessageHistoryRedo + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageHistoryRedo"; + } + + MessageHistoryRedo() + { + } +}; + +#endif // MESSAGE_HISTORY_REDO_H diff --git a/src/lib/utility/messaging/type/history/MessageHistoryToPosition.h b/src/lib/utility/messaging/type/history/MessageHistoryToPosition.h new file mode 100644 index 00000000..e94d14b5 --- /dev/null +++ b/src/lib/utility/messaging/type/history/MessageHistoryToPosition.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_HISTORY_TO_POSITION_H +#define MESSAGE_HISTORY_TO_POSITION_H + +#include "utility/messaging/Message.h" + +class MessageHistoryToPosition + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageHistoryToPosition"; + } + + MessageHistoryToPosition(size_t index) + : index(index) + { + } + + const size_t index; +}; + +#endif // MESSAGE_HISTORY_TO_POSITION_H diff --git a/src/lib/utility/messaging/type/history/MessageHistoryUndo.h b/src/lib/utility/messaging/type/history/MessageHistoryUndo.h new file mode 100644 index 00000000..8158eb97 --- /dev/null +++ b/src/lib/utility/messaging/type/history/MessageHistoryUndo.h @@ -0,0 +1,20 @@ +#ifndef MESSAGE_HISTORY_UNDO_H +#define MESSAGE_HISTORY_UNDO_H + +#include "utility/messaging/Message.h" + +class MessageHistoryUndo + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageHistoryUndo"; + } + + MessageHistoryUndo() + { + } +}; + +#endif // MESSAGE_HISTORY_UNDO_H diff --git a/src/lib_gui/qt/element/QtHistoryList.cpp b/src/lib_gui/qt/element/QtHistoryList.cpp index 1bb04c02..c647a0c5 100644 --- a/src/lib_gui/qt/element/QtHistoryList.cpp +++ b/src/lib_gui/qt/element/QtHistoryList.cpp @@ -4,7 +4,7 @@ #include #include -#include "utility/messaging/type/MessageToUndoRedoPosition.h" +#include "utility/messaging/type/history/MessageHistoryToPosition.h" #include "utility/ResourcePaths.h" #include "utility/utilityString.h" @@ -168,7 +168,7 @@ void QtHistoryList::onItemClicked(QListWidgetItem *item) { if (historyItem->index != m_currentIndex) { - MessageToUndoRedoPosition(historyItem->index).dispatch(); + MessageHistoryToPosition(historyItem->index).dispatch(); } close(); } diff --git a/src/lib_gui/qt/element/QtSearchBar.cpp b/src/lib_gui/qt/element/QtSearchBar.cpp index 41339780..e6ca8bbd 100644 --- a/src/lib_gui/qt/element/QtSearchBar.cpp +++ b/src/lib_gui/qt/element/QtSearchBar.cpp @@ -2,7 +2,7 @@ #include -#include "utility/messaging/type/MessageSearch.h" +#include "utility/messaging/type/MessageActivateAll.h" #include "utility/ResourcePaths.h" #include "qt/element/QtSearchBarButton.h" @@ -96,5 +96,5 @@ void QtSearchBar::refreshStyle() void QtSearchBar::homeButtonClicked() { - MessageSearch({ SearchMatch::createCommand(SearchMatch::COMMAND_ALL) }).dispatch(); + MessageActivateAll().dispatch(); } diff --git a/src/lib_gui/qt/element/QtSmartSearchBox.cpp b/src/lib_gui/qt/element/QtSmartSearchBox.cpp index 43cf3658..c6b0611c 100644 --- a/src/lib_gui/qt/element/QtSmartSearchBox.cpp +++ b/src/lib_gui/qt/element/QtSmartSearchBox.cpp @@ -9,8 +9,8 @@ #include "component/view/GraphViewStyle.h" #include "data/NodeTypeSet.h" #include "settings/ColorScheme.h" +#include "utility/messaging/type/MessageActivateFullTextSearch.h" #include "utility/messaging/type/MessageSearch.h" -#include "utility/messaging/type/MessageSearchFullText.h" #include "utility/messaging/type/MessageSearchAutocomplete.h" #include "utility/utility.h" #include "utility/utilityString.h" @@ -89,7 +89,7 @@ void QtSmartSearchBox::fullTextSearch() caseSensitive = true; } - MessageSearchFullText(term, caseSensitive).dispatch(); + MessageActivateFullTextSearch(term, caseSensitive).dispatch(); } QtSmartSearchBox::QtSmartSearchBox(QWidget* parent) diff --git a/src/lib_gui/qt/element/QtStatusBar.cpp b/src/lib_gui/qt/element/QtStatusBar.cpp index 8487c040..f8cb9ae0 100644 --- a/src/lib_gui/qt/element/QtStatusBar.cpp +++ b/src/lib_gui/qt/element/QtStatusBar.cpp @@ -3,7 +3,7 @@ #include #include "qt/utility/utilityQt.h" -#include "utility/messaging/type/MessageSearch.h" +#include "utility/messaging/type/error/MessageErrorsAll.h" #include "utility/messaging/type/MessageShowStatus.h" #include "utility/ResourcePaths.h" @@ -118,5 +118,5 @@ void QtStatusBar::showStatus() void QtStatusBar::showErrors() { - MessageSearch({ SearchMatch::createCommand(SearchMatch::COMMAND_ERROR) }).dispatch(); + MessageErrorsAll().dispatch(); } diff --git a/src/lib_gui/qt/element/QtUndoRedo.cpp b/src/lib_gui/qt/element/QtUndoRedo.cpp index 30691621..0ec09dfe 100644 --- a/src/lib_gui/qt/element/QtUndoRedo.cpp +++ b/src/lib_gui/qt/element/QtUndoRedo.cpp @@ -3,8 +3,8 @@ #include #include -#include "utility/messaging/type/MessageUndo.h" -#include "utility/messaging/type/MessageRedo.h" +#include "utility/messaging/type/history/MessageHistoryUndo.h" +#include "utility/messaging/type/history/MessageHistoryRedo.h" #include "utility/ResourcePaths.h" #include "qt/element/QtHistoryList.h" @@ -91,7 +91,7 @@ void QtUndoRedo::undoReleased() if (m_pressed) { m_pressed = false; - MessageUndo().dispatch(); + MessageHistoryUndo().dispatch(); } } @@ -100,7 +100,7 @@ void QtUndoRedo::redoReleased() if (m_pressed) { m_pressed = false; - MessageRedo().dispatch(); + MessageHistoryRedo().dispatch(); } } diff --git a/src/lib_gui/qt/utility/QtContextMenu.cpp b/src/lib_gui/qt/utility/QtContextMenu.cpp index 7e63128d..a0dd7096 100644 --- a/src/lib_gui/qt/utility/QtContextMenu.cpp +++ b/src/lib_gui/qt/utility/QtContextMenu.cpp @@ -7,8 +7,8 @@ #include #include "utility/logging/logging.h" -#include "utility/messaging/type/MessageRedo.h" -#include "utility/messaging/type/MessageUndo.h" +#include "utility/messaging/type/history/MessageHistoryRedo.h" +#include "utility/messaging/type/history/MessageHistoryUndo.h" QtContextMenu* QtContextMenu::s_instance; @@ -103,12 +103,12 @@ void QtContextMenu::show() void QtContextMenu::undoActionTriggered() { - MessageUndo().dispatch(); + MessageHistoryUndo().dispatch(); } void QtContextMenu::redoActionTriggered() { - MessageRedo().dispatch(); + MessageHistoryRedo().dispatch(); } void QtContextMenu::copyFullPathActionTriggered() diff --git a/src/lib_gui/qt/view/QtMainView.cpp b/src/lib_gui/qt/view/QtMainView.cpp index a88a736e..b9fb4eda 100644 --- a/src/lib_gui/qt/view/QtMainView.cpp +++ b/src/lib_gui/qt/view/QtMainView.cpp @@ -133,12 +133,12 @@ void QtMainView::updateRecentProjectMenu() ); } -void QtMainView::updateHistoryMenu(const std::vector& history) +void QtMainView::updateHistoryMenu(const std::vector>& historyMenuItems) { m_onQtThread( [=]() { - m_window->updateHistoryMenu(history); + m_window->updateHistoryMenu(historyMenuItems); } ); } diff --git a/src/lib_gui/qt/view/QtMainView.h b/src/lib_gui/qt/view/QtMainView.h index 77e26661..fc49e294 100644 --- a/src/lib_gui/qt/view/QtMainView.h +++ b/src/lib_gui/qt/view/QtMainView.h @@ -54,7 +54,7 @@ public: virtual void activateWindow(); virtual void updateRecentProjectMenu(); - virtual void updateHistoryMenu(const std::vector& history); + virtual void updateHistoryMenu(const std::vector>& historyMenuItems); virtual void updateBookmarksMenu(const std::vector>& bookmarks); private: diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 3d1acc6a..4263e10f 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -29,6 +29,10 @@ #include "utility/file/FileSystem.h" #include "utility/logging/logging.h" #include "utility/messaging/type/error/MessageErrorsHelpMessage.h" +#include "utility/messaging/type/history/MessageHistoryRedo.h" +#include "utility/messaging/type/history/MessageHistoryUndo.h" +#include "utility/messaging/type/MessageActivateAll.h" +#include "utility/messaging/type/MessageActivateBase.h" #include "utility/messaging/type/MessageActivateBookmark.h" #include "utility/messaging/type/MessageCodeReference.h" #include "utility/messaging/type/MessageDisplayBookmarkCreator.h" @@ -37,11 +41,8 @@ #include "utility/messaging/type/MessageFind.h" #include "utility/messaging/type/MessageInterruptTasks.h" #include "utility/messaging/type/MessageLoadProject.h" -#include "utility/messaging/type/MessageRedo.h" #include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageResetZoom.h" -#include "utility/messaging/type/MessageSearch.h" -#include "utility/messaging/type/MessageUndo.h" #include "utility/messaging/type/MessageWindowClosed.h" #include "utility/messaging/type/MessageZoom.h" #include "utility/ResourcePaths.h" @@ -83,12 +84,12 @@ bool MouseReleaseFilter::eventFilter(QObject* obj, QEvent* event) if (mouseEvent->button() == m_backButton) { - MessageUndo().dispatch(); + MessageHistoryUndo().dispatch(); return true; } else if (mouseEvent->button() == m_forwardButton) { - MessageRedo().dispatch(); + MessageHistoryRedo().dispatch(); return true; } } @@ -344,9 +345,9 @@ void QtMainWindow::forceEnterLicense(LicenseChecker::LicenseState state) connect(window, &QtWindow::canceled, dynamic_cast(QCoreApplication::instance()), &QApplication::quit); } -void QtMainWindow::updateHistoryMenu(const std::vector& history) +void QtMainWindow::updateHistoryMenu(const std::vector>& historyMenuItems) { - m_history = history; + m_history = historyMenuItems; setupHistoryMenu(); } @@ -394,7 +395,7 @@ void QtMainWindow::keyPressEvent(QKeyEvent* event) switch (event->key()) { case Qt::Key_Backspace: - MessageUndo().dispatch(); + MessageHistoryUndo().dispatch(); break; case Qt::Key_Escape: @@ -626,7 +627,7 @@ void QtMainWindow::codeReferenceNext() void QtMainWindow::overview() { - MessageSearch({ SearchMatch::createCommand(SearchMatch::COMMAND_ALL) }).dispatch(); + MessageActivateAll().dispatch(); } void QtMainWindow::closeWindow() @@ -659,12 +660,12 @@ void QtMainWindow::forceRefresh() void QtMainWindow::undo() { - MessageUndo().dispatch(); + MessageHistoryUndo().dispatch(); } void QtMainWindow::redo() { - MessageRedo().dispatch(); + MessageHistoryRedo().dispatch(); } void QtMainWindow::zoomIn() @@ -755,9 +756,7 @@ void QtMainWindow::openHistoryAction() QAction* action = qobject_cast(sender()); if (action) { - MessageSearch msg({ m_history[action->data().toInt()] }); - msg.isFromSearch = false; - msg.dispatch(); + m_history[action->data().toInt()]->dispatch(); } } @@ -886,7 +885,13 @@ void QtMainWindow::setupHistoryMenu() for (size_t i = 0; i < m_history.size(); i++) { - SearchMatch& match = m_history[i]; + MessageActivateBase* msg = dynamic_cast(m_history[i].get()); + if (!msg) + { + continue; + } + + const SearchMatch match = msg->getSearchMatches()[0]; const std::wstring name = utility::elide(match.getFullName(), utility::ELIDE_RIGHT, 50); QAction* action = new QAction(); diff --git a/src/lib_gui/qt/window/QtMainWindow.h b/src/lib_gui/qt/window/QtMainWindow.h index aac84846..e8960798 100644 --- a/src/lib_gui/qt/window/QtMainWindow.h +++ b/src/lib_gui/qt/window/QtMainWindow.h @@ -75,7 +75,7 @@ public: void forceEnterLicense(LicenseChecker::LicenseState state); - void updateHistoryMenu(const std::vector& history); + void updateHistoryMenu(const std::vector>& historyMenuItems); void updateBookmarksMenu(const std::vector>& bookmarks); void setContentEnabled(bool enabled); @@ -183,7 +183,7 @@ private: QAction* m_viewSeparator; QMenu* m_historyMenu; - std::vector m_history; + std::vector> m_history; QMenu* m_bookmarksMenu; std::vector> m_bookmarks;