diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index d9eaa746..e570bb7f 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -3,8 +3,8 @@ #include "utility/interprocess/SharedMemoryGarbageCollector.h" #include "utility/logging/logging.h" #include "utility/logging/LogManager.h" +#include "utility/messaging/filter_types/MessageFilterErrorCountUpdate.h" #include "utility/messaging/filter_types/MessageFilterFocusInOut.h" -#include "utility/messaging/filter_types/MessageFilterNewErrors.h" #include "utility/messaging/filter_types/MessageFilterSearchAutocomplete.h" #include "utility/messaging/MessageQueue.h" #include "utility/messaging/type/MessageForceEnterLicense.h" @@ -359,8 +359,8 @@ void Application::startMessagingAndScheduling() TaskScheduler::getInstance()->startSchedulerLoopThreaded(); MessageQueue* queue = MessageQueue::getInstance().get(); + queue->addMessageFilter(std::make_shared()); queue->addMessageFilter(std::make_shared()); - queue->addMessageFilter(std::make_shared()); queue->addMessageFilter(std::make_shared()); queue->setSendMessagesAsTasks(true); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index f6dc1d89..76c82dd2 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -416,10 +416,18 @@ add_files( utility/math/Vector4.h utility/math/VectorBase.h + utility/messaging/filter_types/MessageFilterErrorCountUpdate.h utility/messaging/filter_types/MessageFilterFocusInOut.h - utility/messaging/filter_types/MessageFilterNewErrors.h utility/messaging/filter_types/MessageFilterSearchAutocomplete.h + utility/messaging/type/error/MessageActivateErrors.h + utility/messaging/type/error/MessageErrorCountClear.h + utility/messaging/type/error/MessageErrorCountUpdate.h + utility/messaging/type/error/MessageErrorsAll.h + utility/messaging/type/error/MessageErrorsForFile.h + utility/messaging/type/error/MessageErrorsHelpMessage.h + utility/messaging/type/error/MessageShowError.h + utility/messaging/type/MessageActivateAll.h utility/messaging/type/MessageActivateBookmark.h utility/messaging/type/MessageActivateEdge.h @@ -433,7 +441,6 @@ add_files( utility/messaging/type/MessageActivateTrailEdge.h utility/messaging/type/MessageActivateWindow.h utility/messaging/type/MessageChangeFileView.h - utility/messaging/type/MessageClearErrorCount.h utility/messaging/type/MessageClearLogView.h utility/messaging/type/MessageClearStatusView.h utility/messaging/type/MessageCodeReference.h @@ -441,7 +448,6 @@ add_files( utility/messaging/type/MessageDisplayBookmarkCreator.h utility/messaging/type/MessageDisplayBookmarks.h utility/messaging/type/MessageEnteredLicense.h - utility/messaging/type/MessageErrorFilterChanged.h utility/messaging/type/MessageFind.h utility/messaging/type/MessageFinishedParsing.h utility/messaging/type/MessageFlushUpdates.h @@ -457,7 +463,6 @@ add_files( utility/messaging/type/MessageLoadProject.h utility/messaging/type/MessageLogFilterChanged.h utility/messaging/type/MessageMoveIDECursor.h - utility/messaging/type/MessageNewErrors.h utility/messaging/type/MessagePingReceived.h utility/messaging/type/MessagePluginPortChange.h utility/messaging/type/MessageProjectEdit.h @@ -472,9 +477,6 @@ add_files( utility/messaging/type/MessageSearch.h utility/messaging/type/MessageSearchAutocomplete.h utility/messaging/type/MessageSearchFullText.h - utility/messaging/type/MessageShowErrorHelpMessage.h - utility/messaging/type/MessageShowErrors.h - utility/messaging/type/MessageShowErrorsForFile.h utility/messaging/type/MessageShowReference.h utility/messaging/type/MessageShowScope.h utility/messaging/type/MessageShowStatus.h diff --git a/src/lib/component/controller/ActivationController.cpp b/src/lib/component/controller/ActivationController.cpp index c29ecce7..b3c0de69 100644 --- a/src/lib/component/controller/ActivationController.cpp +++ b/src/lib/component/controller/ActivationController.cpp @@ -3,12 +3,12 @@ #include "data/access/StorageAccess.h" #include "settings/ApplicationSettings.h" +#include "utility/messaging/type/error/MessageErrorsAll.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageChangeFileView.h" #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageRefresh.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageStatus.h" #include "utility/messaging/type/MessageScrollToLine.h" @@ -153,8 +153,7 @@ void ActivationController::handleMessage(MessageSearch* message) case SearchMatch::COMMAND_ERROR: { - MessageShowErrors(m_storageAccess->getErrorCount()).dispatch(); - MessageFlushUpdates().dispatch(); + MessageErrorsAll().dispatch(); return; } } @@ -168,11 +167,6 @@ void ActivationController::handleMessage(MessageSearch* message) m.dispatchImmediately(); } -void ActivationController::handleMessage(MessageShowErrorsForFile* message) -{ - MessageShowErrors(m_storageAccess->getErrorIdsForFile(message->filePath)).dispatch(); -} - void ActivationController::handleMessage(MessageZoom* message) { bool zoomIn = message->zoomIn; diff --git a/src/lib/component/controller/ActivationController.h b/src/lib/component/controller/ActivationController.h index fd00c334..7d4af7a1 100644 --- a/src/lib/component/controller/ActivationController.h +++ b/src/lib/component/controller/ActivationController.h @@ -13,7 +13,6 @@ #include "utility/messaging/type/MessageActivateSourceLocations.h" #include "utility/messaging/type/MessageResetZoom.h" #include "utility/messaging/type/MessageSearch.h" -#include "utility/messaging/type/MessageShowErrorsForFile.h" #include "utility/messaging/type/MessageZoom.h" class StorageAccess; @@ -27,7 +26,6 @@ class ActivationController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener { public: @@ -44,7 +42,6 @@ private: virtual void handleMessage(MessageActivateSourceLocations* message); virtual void handleMessage(MessageResetZoom* message); virtual void handleMessage(MessageSearch* message); - virtual void handleMessage(MessageShowErrorsForFile* message); virtual void handleMessage(MessageZoom* message); StorageAccess* m_storageAccess; diff --git a/src/lib/component/controller/BookmarkController.cpp b/src/lib/component/controller/BookmarkController.cpp index e5148728..7b1251fc 100644 --- a/src/lib/component/controller/BookmarkController.cpp +++ b/src/lib/component/controller/BookmarkController.cpp @@ -302,6 +302,11 @@ void BookmarkController::handleMessage(MessageActivateBookmark* message) activateBookmark(message->bookmark); } +void BookmarkController::handleMessage(MessageActivateErrors* message) +{ + clear(); +} + void BookmarkController::handleMessage(MessageActivateTokens* message) { m_activeEdgeIds.clear(); @@ -352,11 +357,6 @@ void BookmarkController::handleMessage(MessageFinishedParsing* message) update(); } -void BookmarkController::handleMessage(MessageShowErrors* message) -{ - clear(); -} - std::vector BookmarkController::getActiveTokenDisplayNames() const { if (m_activeEdgeIds.size() > 0) diff --git a/src/lib/component/controller/BookmarkController.h b/src/lib/component/controller/BookmarkController.h index 88fad54c..80e0cc59 100644 --- a/src/lib/component/controller/BookmarkController.h +++ b/src/lib/component/controller/BookmarkController.h @@ -6,13 +6,13 @@ #include "data/bookmark/EdgeBookmark.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateBookmark.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageDisplayBookmarkCreator.h" #include "utility/messaging/type/MessageDisplayBookmarks.h" #include "utility/messaging/type/MessageFinishedParsing.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "component/controller/Controller.h" @@ -22,11 +22,11 @@ class BookmarkController : public Controller , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener { public: BookmarkController(StorageAccess* storageAccess); @@ -70,11 +70,11 @@ private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateBookmark* message); + virtual void handleMessage(MessageActivateErrors* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageDisplayBookmarkCreator* message); virtual void handleMessage(MessageDisplayBookmarks* message); virtual void handleMessage(MessageFinishedParsing* message); - virtual void handleMessage(MessageShowErrors* message); std::vector getActiveTokenDisplayNames() const; std::vector getDisplayNamesForNodeId(Id nodeId) const; diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 7bade76e..bcd5c0b9 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -81,10 +81,11 @@ void CodeController::handleMessage(MessageActivateAll* message) ss << "\t" + std::to_string(errorCount.total) + " errors (" + std::to_string(errorCount.fatal) + " fatal)\n"; ss << "\n"; - if (stats.completedFileCount != stats.fileCount) + if (errorCount.fatal) { - ss << "\tWarning: Indexing is incomplete as long as it yields fatal errors.\n"; - ss << "\tTry resolving them and refresh the project.\n"; + ss << "\tWarning: Your project has fatal errors, which cause\n"; + ss << "\t a lot of missing information in affected files.\n"; + ss << "\t Try to resolve them!\n"; ss << "\n"; } @@ -96,6 +97,41 @@ void CodeController::handleMessage(MessageActivateAll* message) showCodeSnippets({ statsSnippet }, params); } +void CodeController::handleMessage(MessageActivateErrors* message) +{ + TRACE("code errors"); + + saveOrRestoreViewMode(message); + + CodeView* view = getView(); + + CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION); + view->scrollTo(scrollParams); + + std::vector errors; + if (message->file.empty()) + { + errors = m_storageAccess->getErrorsLimited(message->filter); + } + else + { + errors = m_storageAccess->getErrorsForFileLimited(message->filter, message->file); + } + + m_collection = m_storageAccess->getErrorSourceLocations(errors); + std::vector snippets = getSnippetsForCollection(m_collection); + + std::sort(snippets.begin(), snippets.end(), CodeSnippetParams::sortById); + + CodeView::CodeParams params; + params.clearSnippets = true; + params.errorInfos = errors; + params.showContents = !message->isReplayed(); + params.useSingleFileCache = false; + + showCodeSnippets(snippets, params, false); +} + void CodeController::handleMessage(MessageActivateLocalSymbols* message) { CodeView* view = getView(); @@ -230,14 +266,6 @@ void CodeController::handleMessage(MessageChangeFileView* message) } } -void CodeController::handleMessage(MessageClearErrorCount* message) -{ - if (getView()->showsErrors()) - { - clear(); - } -} - void CodeController::handleMessage(MessageDeactivateEdge* message) { if (message->scrollToDefinition) @@ -249,6 +277,14 @@ void CodeController::handleMessage(MessageDeactivateEdge* message) } } +void CodeController::handleMessage(MessageErrorCountClear* message) +{ + if (getView()->showsErrors()) + { + clear(); + } +} + void CodeController::handleMessage(MessageFlushUpdates* message) { getView()->showContents(); @@ -289,44 +325,6 @@ void CodeController::handleMessage(MessageScrollCode* message) } } -void CodeController::handleMessage(MessageShowErrors* message) -{ - TRACE("code errors"); - - saveOrRestoreViewMode(message); - - CodeView* view = getView(); - if (!view->showsErrors() || !message->errorId) - { - CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION); - view->scrollTo(scrollParams); - - std::vector errors; - if (!message->showsOnlyErrorIds || message->errorIds.size()) - { - errors = m_storageAccess->getErrorsLimited(message->errorIds); - } - - m_collection = m_storageAccess->getErrorSourceLocations(errors); - std::vector snippets = getSnippetsForCollection(m_collection); - - std::sort(snippets.begin(), snippets.end(), CodeSnippetParams::sortById); - - CodeView::CodeParams params; - params.clearSnippets = true; - params.errorInfos = errors; - params.showContents = !message->isReplayed(); - params.useSingleFileCache = false; - - showCodeSnippets(snippets, params, false); - } - - if (message->errorId) - { - view->showActiveSnippet(std::vector(1, message->errorId), m_collection, message->isLast()); - } -} - void CodeController::handleMessage(MessageSearchFullText* message) { TRACE("code fulltext"); @@ -346,6 +344,15 @@ void CodeController::handleMessage(MessageSearchFullText* message) showCodeSnippets(getSnippetsForCollection(m_collection), params); } +void CodeController::handleMessage(MessageShowError* message) +{ + CodeView* view = getView(); + if (view->showsErrors()) + { + view->showActiveSnippet({ message->errorId }, m_collection, message->isLast()); + } +} + void CodeController::handleMessage(MessageShowScope* message) { TRACE("code scope"); diff --git a/src/lib/component/controller/CodeController.h b/src/lib/component/controller/CodeController.h index 6dc10a28..14a52ede 100644 --- a/src/lib/component/controller/CodeController.h +++ b/src/lib/component/controller/CodeController.h @@ -6,12 +6,14 @@ #include "utility/file/FilePath.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" +#include "utility/messaging/type/error/MessageErrorCountClear.h" +#include "utility/messaging/type/error/MessageShowError.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrailEdge.h" #include "utility/messaging/type/MessageChangeFileView.h" -#include "utility/messaging/type/MessageClearErrorCount.h" #include "utility/messaging/type/MessageDeactivateEdge.h" #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageFocusIn.h" @@ -19,7 +21,6 @@ #include "utility/messaging/type/MessageScrollCode.h" #include "utility/messaging/type/MessageScrollToLine.h" #include "utility/messaging/type/MessageSearchFullText.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageShowScope.h" #include "utility/types.h" @@ -35,19 +36,20 @@ class SourceLocationFile; class CodeController : public Controller , 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 MessageListener , public MessageListener { public: @@ -58,19 +60,20 @@ private: static const uint s_lineRadius; virtual void handleMessage(MessageActivateAll* message); + virtual void handleMessage(MessageActivateErrors* message); virtual void handleMessage(MessageActivateLocalSymbols* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrailEdge* message); virtual void handleMessage(MessageChangeFileView* message); - virtual void handleMessage(MessageClearErrorCount* message); virtual void handleMessage(MessageDeactivateEdge* message); + virtual void handleMessage(MessageErrorCountClear* message); virtual void handleMessage(MessageFlushUpdates* message); virtual void handleMessage(MessageFocusIn* message); virtual void handleMessage(MessageFocusOut* message); virtual void handleMessage(MessageScrollCode* message); virtual void handleMessage(MessageScrollToLine* message); virtual void handleMessage(MessageSearchFullText* message); - virtual void handleMessage(MessageShowErrors* message); + virtual void handleMessage(MessageShowError* message); virtual void handleMessage(MessageShowScope* message); CodeView* getView() const; diff --git a/src/lib/component/controller/ErrorController.cpp b/src/lib/component/controller/ErrorController.cpp index f041c1a5..9c28c8d6 100644 --- a/src/lib/component/controller/ErrorController.cpp +++ b/src/lib/component/controller/ErrorController.cpp @@ -12,51 +12,109 @@ ErrorController::~ErrorController() { } -void ErrorController::handleMessage(MessageClearErrorCount* message) +void ErrorController::errorFilterChanged(const ErrorFilter& filter) +{ + if (m_activeFilePath.empty()) + { + MessageActivateErrors(filter).dispatch(); + } + else + { + MessageActivateErrors(filter, m_activeFilePath).dispatch(); + } +} + +void ErrorController::showError(Id errorId) +{ + if (!m_showsErrors) + { + errorFilterChanged(getView()->getErrorFilter()); + } + + MessageShowError(errorId).dispatch(); +} + +void ErrorController::handleMessage(MessageActivateAll* message) +{ + m_showsErrors = false; +} + +void ErrorController::handleMessage(MessageActivateErrors* message) { clear(); - getView()->resetErrorLimit(); + m_showsErrors = true; + m_activeFilePath = message->file; + + ErrorView* view = getView(); + view->setErrorFilter(message->filter); + + if (showErrors(message->filter, true)) + { + view->showDockWidget(); + } } -void ErrorController::handleMessage(MessageFinishedParsing* message) +void ErrorController::handleMessage(MessageActivateTokens* message) +{ + m_showsErrors = false; +} + +void ErrorController::handleMessage(MessageErrorCountClear* message) { clear(); - getView()->setErrorCount(m_storageAccess->getErrorCount()); - getView()->addErrors(m_storageAccess->getErrorsLimited({ }), false); + ErrorView* view = getView(); + + ErrorFilter filter = view->getErrorFilter(); + filter.limit = ErrorFilter().limit; + view->setErrorFilter(filter); } -void ErrorController::handleMessage(MessageNewErrors* message) +void ErrorController::handleMessage(MessageErrorCountUpdate* message) { - ErrorFilter filter; - int room = message->errors.size() + filter.limit - message->errorCount.total; + ErrorFilter filter = getView()->getErrorFilter(); + + int room = filter.limit - m_errorCount; if (room > 0) { - std::vector errors = message->errors; - if (room < int(errors.size())) - { - errors.resize(room); - } + filter.limit = 0; + std::vector errors = m_storageAccess->getErrorsLimited(filter); + ErrorCountInfo errorCount(errors); - getView()->addErrors(message->errors, true); + auto startIt = errors.begin() + m_errorCount; + errors = std::vector( + startIt, + (errors.size() < m_errorCount + room) ? errors.end() : startIt + room + ); + + getView()->addErrors(errors, errorCount, true); getView()->showDockWidget(); + + m_errorCount += errors.size(); } - - getView()->setErrorCount(message->errorCount); - } -void ErrorController::handleMessage(MessageShowErrorHelpMessage* message) +void ErrorController::handleMessage(MessageErrorsAll* message) +{ + MessageActivateErrors(getView()->getErrorFilter()).dispatch(); +} + +void ErrorController::handleMessage(MessageErrorsForFile* message) +{ + MessageActivateErrors(ErrorFilter(), message->file).dispatch(); +} + +void ErrorController::handleMessage(MessageErrorsHelpMessage* message) { ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); - if (!message->force && appSettings->getSeenErrorHelpMessage()) - { - return; - } - if (!message->force) { + if (appSettings->getSeenErrorHelpMessage()) + { + return; + } + ErrorCountInfo info = m_storageAccess->getErrorCount(); if (!info.total) { @@ -70,29 +128,21 @@ void ErrorController::handleMessage(MessageShowErrorHelpMessage* message) getView()->showErrorHelpMessage(); } -void ErrorController::handleMessage(MessageShowErrors* message) +void ErrorController::handleMessage(MessageFinishedParsing* message) { - if (message->errorId) - { - getView()->setErrorId(message->errorId); - return; - } - clear(); - std::vector errors; - if (!message->showsOnlyErrorIds || message->errorIds.size()) - { - errors = m_storageAccess->getErrorsLimited(message->errorIds); - } + showErrors(getView()->getErrorFilter(), false); +} - if (errors.size()) - { - getView()->showDockWidget(); - } +void ErrorController::handleMessage(MessageShowError* message) +{ + getView()->setErrorId(message->errorId); +} - getView()->setErrorCount(message->errorCount); - getView()->addErrors(errors, false); +void ErrorController::handleMessage(MessageSearchFullText* message) +{ + m_showsErrors = false; } ErrorView* ErrorController::getView() const @@ -102,5 +152,37 @@ ErrorView* ErrorController::getView() const void ErrorController::clear() { + m_showsErrors = false; + m_errorCount = 0; + m_activeFilePath = FilePath(); + getView()->clear(); } + +bool ErrorController::showErrors(const ErrorFilter& filter, bool scrollTo) +{ + ErrorView* view = getView(); + + ErrorFilter filterUnlimited = filter; + filterUnlimited.limit = 0; + + std::vector errors; + if (m_activeFilePath.empty()) + { + errors = m_storageAccess->getErrorsLimited(filterUnlimited); + } + else + { + errors = m_storageAccess->getErrorsForFileLimited(filter, m_activeFilePath); + } + + ErrorCountInfo errorCount(errors); + if (filter.limit > 0 && errors.size() > filter.limit) + { + errors.resize(filter.limit); + } + + view->addErrors(errors, errorCount, scrollTo); + + return errors.size(); +} diff --git a/src/lib/component/controller/ErrorController.h b/src/lib/component/controller/ErrorController.h index 572799cf..28975967 100644 --- a/src/lib/component/controller/ErrorController.h +++ b/src/lib/component/controller/ErrorController.h @@ -2,11 +2,17 @@ #define ERROR_CONTROLLER_H #include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageClearErrorCount.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" +#include "utility/messaging/type/error/MessageErrorCountClear.h" +#include "utility/messaging/type/error/MessageErrorCountUpdate.h" +#include "utility/messaging/type/error/MessageErrorsAll.h" +#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/MessageFinishedParsing.h" -#include "utility/messaging/type/MessageNewErrors.h" -#include "utility/messaging/type/MessageShowErrorHelpMessage.h" -#include "utility/messaging/type/MessageShowErrors.h" +#include "utility/messaging/type/MessageSearchFullText.h" #include "component/controller/Controller.h" #include "component/view/ErrorView.h" @@ -15,28 +21,49 @@ class StorageAccess; class ErrorController : public Controller - , 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: ErrorController(StorageAccess* storageAccess); ~ErrorController(); + void errorFilterChanged(const ErrorFilter& filter); + void showError(Id errorId); + private: - virtual void handleMessage(MessageClearErrorCount* message); + virtual void handleMessage(MessageActivateAll* message); + virtual void handleMessage(MessageActivateErrors* message); + virtual void handleMessage(MessageActivateTokens* message); + virtual void handleMessage(MessageErrorCountClear* message); + virtual void handleMessage(MessageErrorCountUpdate* message); + virtual void handleMessage(MessageErrorsAll* message); + virtual void handleMessage(MessageErrorsForFile* message); + virtual void handleMessage(MessageErrorsHelpMessage* message); virtual void handleMessage(MessageFinishedParsing* message); - virtual void handleMessage(MessageNewErrors* message); - virtual void handleMessage(MessageShowErrorHelpMessage* message); - virtual void handleMessage(MessageShowErrors* message); + virtual void handleMessage(MessageShowError* message); + virtual void handleMessage(MessageSearchFullText* message); ErrorView* getView() const; virtual void clear(); + bool showErrors(const ErrorFilter& filter, bool scrollTo); + StorageAccess* m_storageAccess; + + bool m_showsErrors = false; + size_t m_errorCount = 0; + FilePath m_activeFilePath; }; #endif // ERROR_CONTROLLER_H diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index b3a14461..7b3e0120 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -64,6 +64,11 @@ void GraphController::handleMessage(MessageActivateAll* message) buildGraph(message, false, true, message->acceptedNodeTypes != NodeTypeSet::all()); } +void GraphController::handleMessage(MessageActivateErrors* message) +{ + clear(); +} + void GraphController::handleMessage(MessageActivateTokens* message) { TRACE("graph activate"); @@ -496,11 +501,6 @@ void GraphController::handleMessage(MessageGraphNodeMove* message) } } -void GraphController::handleMessage(MessageShowErrors* message) -{ - clear(); -} - void GraphController::handleMessage(MessageShowReference* message) { if (!message->tokenId || !message->fromUser) diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h index d0c0f12a..a7ac4c89 100644 --- a/src/lib/component/controller/GraphController.h +++ b/src/lib/component/controller/GraphController.h @@ -5,6 +5,7 @@ #include #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrail.h" @@ -18,7 +19,6 @@ #include "utility/messaging/type/MessageGraphNodeMove.h" #include "utility/messaging/type/MessageScrollGraph.h" #include "utility/messaging/type/MessageSearchFullText.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageShowReference.h" #include "component/controller/Controller.h" @@ -33,6 +33,7 @@ class StorageAccess; class GraphController : public Controller , 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: @@ -54,6 +54,7 @@ public: private: virtual void handleMessage(MessageActivateAll* message); + virtual void handleMessage(MessageActivateErrors* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrail* message); virtual void handleMessage(MessageActivateTrailEdge* message); @@ -66,7 +67,6 @@ private: virtual void handleMessage(MessageGraphNodeMove* message); virtual void handleMessage(MessageScrollGraph* message); virtual void handleMessage(MessageSearchFullText* message); - virtual void handleMessage(MessageShowErrors* 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 f45b192a..be8b822c 100644 --- a/src/lib/component/controller/SearchController.cpp +++ b/src/lib/component/controller/SearchController.cpp @@ -28,6 +28,12 @@ void SearchController::handleMessage(MessageActivateAll* message) getView()->setMatches(std::vector(1, SearchMatch::createCommand(SearchMatch::COMMAND_ALL))); } +void SearchController::handleMessage(MessageActivateErrors* message) +{ + SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ERROR); + getView()->setMatches(std::vector(1, match)); +} + void SearchController::handleMessage(MessageActivateTokens* message) { if ((message->isFromSearch && !message->isReplayed()) || message->keepContent()) @@ -100,12 +106,6 @@ void SearchController::handleMessage(MessageSearchFullText* message) getView()->setMatches(std::vector(1, match)); } -void SearchController::handleMessage(MessageShowErrors* message) -{ - SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ERROR); - 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 3644166b..45bd6349 100644 --- a/src/lib/component/controller/SearchController.h +++ b/src/lib/component/controller/SearchController.h @@ -3,12 +3,12 @@ #include "component/controller/Controller.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" #include "utility/messaging/type/MessageActivateAll.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" -#include "utility/messaging/type/MessageShowErrors.h" class StorageAccess; class SearchView; @@ -16,11 +16,11 @@ class SearchView; class SearchController : public Controller , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener { public: SearchController(StorageAccess* storageAccess); @@ -28,11 +28,11 @@ public: private: virtual void handleMessage(MessageActivateAll* message); + virtual void handleMessage(MessageActivateErrors* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageFind* message); virtual void handleMessage(MessageSearchAutocomplete* message); virtual void handleMessage(MessageSearchFullText* message); - virtual void handleMessage(MessageShowErrors* message); SearchView* getView(); diff --git a/src/lib/component/controller/StatusBarController.cpp b/src/lib/component/controller/StatusBarController.cpp index 24ec9f6b..44aff905 100644 --- a/src/lib/component/controller/StatusBarController.cpp +++ b/src/lib/component/controller/StatusBarController.cpp @@ -23,15 +23,19 @@ void StatusBarController::clear() getView()->setErrorCount(ErrorCountInfo()); } -void StatusBarController::handleMessage(MessageClearErrorCount* message) +void StatusBarController::handleMessage(MessageErrorCountClear* message) { getView()->setErrorCount(ErrorCountInfo()); } +void StatusBarController::handleMessage(MessageErrorCountUpdate* message) +{ + getView()->setErrorCount(message->errorCount); +} + void StatusBarController::handleMessage(MessageFinishedParsing* message) { - ErrorCountInfo errorCount = m_storageAccess->getErrorCount(); - getView()->setErrorCount(errorCount); + getView()->setErrorCount(m_storageAccess->getErrorCount()); } void StatusBarController::handleMessage(MessagePingReceived* message) @@ -57,16 +61,6 @@ void StatusBarController::handleMessage(MessageRefresh* message) getView()->setErrorCount(m_storageAccess->getErrorCount()); } -void StatusBarController::handleMessage(MessageShowErrors* message) -{ - if (message->errorId || message->errorIds.size() || message->isReplayed()) - { - return; - } - - getView()->setErrorCount(message->errorCount); -} - void StatusBarController::handleMessage(MessageStatus* message) { setStatus(message->status(), message->isError, message->showLoader); diff --git a/src/lib/component/controller/StatusBarController.h b/src/lib/component/controller/StatusBarController.h index 4eb967e4..d332286b 100644 --- a/src/lib/component/controller/StatusBarController.h +++ b/src/lib/component/controller/StatusBarController.h @@ -6,11 +6,11 @@ #include "component/controller/Controller.h" #include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageClearErrorCount.h" +#include "utility/messaging/type/error/MessageErrorCountClear.h" +#include "utility/messaging/type/error/MessageErrorCountUpdate.h" #include "utility/messaging/type/MessageFinishedParsing.h" #include "utility/messaging/type/MessagePingReceived.h" #include "utility/messaging/type/MessageRefresh.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageStatus.h" class StatusBarView; @@ -18,11 +18,11 @@ class StorageAccess; class StatusBarController : public Controller - , public MessageListener + , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener { public: @@ -34,11 +34,11 @@ public: virtual void clear(); private: - virtual void handleMessage(MessageClearErrorCount* message); + virtual void handleMessage(MessageErrorCountClear* message); + virtual void handleMessage(MessageErrorCountUpdate* message); virtual void handleMessage(MessageFinishedParsing* message); virtual void handleMessage(MessagePingReceived* message); virtual void handleMessage(MessageRefresh* message); - virtual void handleMessage(MessageShowErrors* message); virtual void handleMessage(MessageStatus* message); void setStatus(const std::wstring& status, bool isError, bool showLoader); diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 3005889d..bf4581b5 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -54,6 +54,19 @@ void UndoRedoController::handleMessage(MessageActivateAll* message) processCommand(command); } +void UndoRedoController::handleMessage(MessageActivateErrors* message) +{ + if (sameMessageTypeAsLast(message) && + static_cast(lastMessage())->filter == message->filter && + static_cast(lastMessage())->file == message->file) + { + return; + } + + Command command(std::make_shared(*message), Command::ORDER_ACTIVATE); + processCommand(command); +} + void UndoRedoController::handleMessage(MessageActivateLocalSymbols* message) { if (sameMessageTypeAsLast(message)) @@ -270,16 +283,15 @@ void UndoRedoController::handleMessage(MessageSearchFullText* message) processCommand(command); } -void UndoRedoController::handleMessage(MessageShowErrors* message) +void UndoRedoController::handleMessage(MessageShowError* message) { if (sameMessageTypeAsLast(message) && - static_cast(lastMessage())->errorId == message->errorId && - static_cast(lastMessage())->errorIds.size() == message->errorIds.size()) + static_cast(lastMessage())->errorId == message->errorId) { return; } - Command command(std::make_shared(*message), Command::ORDER_ACTIVATE); + Command command(std::make_shared(*message), Command::ORDER_ADAPT); processCommand(command); } @@ -637,7 +649,7 @@ SearchMatch UndoRedoController::getSearchMatchForMessage(MessageBase* message) c match.searchType = SearchMatch::SEARCH_FULLTEXT; return match; } - else if (message->getType() == MessageShowErrors::getStaticType()) + else if (message->getType() == MessageActivateErrors::getStaticType()) { return SearchMatch::createCommand(SearchMatch::COMMAND_ERROR); } diff --git a/src/lib/component/controller/UndoRedoController.h b/src/lib/component/controller/UndoRedoController.h index 01670821..ffadbadb 100644 --- a/src/lib/component/controller/UndoRedoController.h +++ b/src/lib/component/controller/UndoRedoController.h @@ -5,6 +5,8 @@ #include "utility/messaging/MessageBase.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageActivateErrors.h" +#include "utility/messaging/type/error/MessageShowError.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageActivateTokens.h" @@ -22,7 +24,6 @@ #include "utility/messaging/type/MessageScrollCode.h" #include "utility/messaging/type/MessageScrollGraph.h" #include "utility/messaging/type/MessageSearchFullText.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageShowReference.h" #include "utility/messaging/type/MessageShowScope.h" #include "utility/messaging/type/MessageToUndoRedoPosition.h" @@ -36,6 +37,7 @@ class UndoRedoView; class UndoRedoController : public Controller , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -52,7 +54,7 @@ class UndoRedoController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -84,6 +86,7 @@ private: }; virtual void handleMessage(MessageActivateAll* message); + virtual void handleMessage(MessageActivateErrors* message); virtual void handleMessage(MessageActivateLocalSymbols* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrail* message); @@ -100,7 +103,7 @@ private: virtual void handleMessage(MessageScrollCode* message); virtual void handleMessage(MessageScrollGraph* message); virtual void handleMessage(MessageSearchFullText* message); - virtual void handleMessage(MessageShowErrors* message); + virtual void handleMessage(MessageShowError* message); virtual void handleMessage(MessageShowReference* message); virtual void handleMessage(MessageShowScope* message); virtual void handleMessage(MessageToUndoRedoPosition* message); diff --git a/src/lib/component/view/ErrorView.h b/src/lib/component/view/ErrorView.h index eb3c196c..818717ce 100644 --- a/src/lib/component/view/ErrorView.h +++ b/src/lib/component/view/ErrorView.h @@ -5,6 +5,7 @@ #include "component/view/View.h" #include "data/ErrorCountInfo.h" +#include "data/ErrorFilter.h" #include "data/ErrorInfo.h" class ErrorView @@ -18,13 +19,13 @@ public: virtual void clear() = 0; - virtual void addErrors(const std::vector& errors, bool scrollTo) = 0; + virtual void addErrors(const std::vector& errors, const ErrorCountInfo& errorCount, bool scrollTo) = 0; virtual void setErrorId(Id errorId) = 0; - virtual void setErrorCount(ErrorCountInfo info) = 0; - virtual void resetErrorLimit() = 0; - virtual void showErrorHelpMessage() = 0; + + virtual ErrorFilter getErrorFilter() const = 0; + virtual void setErrorFilter(const ErrorFilter& filter) = 0; }; #endif // ERROR_VIEW_H diff --git a/src/lib/data/ErrorCountInfo.h b/src/lib/data/ErrorCountInfo.h index 299db8c2..ab21317d 100644 --- a/src/lib/data/ErrorCountInfo.h +++ b/src/lib/data/ErrorCountInfo.h @@ -1,6 +1,8 @@ #ifndef ERROR_COUNT_INFO_H #define ERROR_COUNT_INFO_H +#include "data/ErrorInfo.h" + struct ErrorCountInfo { ErrorCountInfo() @@ -13,6 +15,21 @@ struct ErrorCountInfo , fatal(fatal) {} + ErrorCountInfo(const std::vector& errors) + : total(0) + , fatal(0) + { + for (const ErrorInfo& error : errors) + { + total++; + + if (error.fatal) + { + fatal++; + } + } + } + size_t total; size_t fatal; }; diff --git a/src/lib/data/ErrorFilter.h b/src/lib/data/ErrorFilter.h index 69b6faf5..ccc674dc 100644 --- a/src/lib/data/ErrorFilter.h +++ b/src/lib/data/ErrorFilter.h @@ -8,7 +8,7 @@ struct ErrorFilter ErrorFilter() : error(true) , fatal(true) - , unindexedError(false) + , unindexedError(true) , unindexedFatal(true) , limit(1000) { @@ -27,6 +27,15 @@ struct ErrorFilter return true; } + bool operator==(const ErrorFilter& other) const + { + return error == other.error && + fatal == other.fatal && + unindexedError == other.unindexedError && + unindexedFatal == other.unindexedFatal && + limit == other.limit; + } + bool error; bool fatal; diff --git a/src/lib/data/access/StorageAccess.cpp b/src/lib/data/access/StorageAccess.cpp index 393f56c2..7e5df89d 100644 --- a/src/lib/data/access/StorageAccess.cpp +++ b/src/lib/data/access/StorageAccess.cpp @@ -3,8 +3,3 @@ StorageAccess::~StorageAccess() { } - -void StorageAccess::setErrorFilter(const ErrorFilter& filter) -{ - m_errorFilter = filter; -} diff --git a/src/lib/data/access/StorageAccess.h b/src/lib/data/access/StorageAccess.h index 4650a11e..ec23ea13 100644 --- a/src/lib/data/access/StorageAccess.h +++ b/src/lib/data/access/StorageAccess.h @@ -87,14 +87,12 @@ public: virtual StorageStats getStorageStats() const = 0; virtual ErrorCountInfo getErrorCount() const = 0; - // returns all errors if errorIds is empty - virtual std::vector getErrorsLimited(const std::vector& errorIds) const = 0; - virtual std::vector getErrorIdsForFile(const FilePath& filePath) const = 0; + virtual std::vector getErrorsLimited(const ErrorFilter& filter) const = 0; + virtual std::vector getErrorsForFileLimited( + const ErrorFilter& filter, const FilePath& filePath) const = 0; virtual std::shared_ptr getErrorSourceLocations( const std::vector& errors) const = 0; - virtual void setErrorFilter(const ErrorFilter& filter); - // todo: remove bookmark related methods from storage access virtual Id addNodeBookmark(const NodeBookmark& bookmark) = 0; virtual Id addEdgeBookmark(const EdgeBookmark& bookmark) = 0; @@ -112,9 +110,6 @@ public: virtual TooltipInfo getTooltipInfoForTokenIds(const std::vector& tokenIds, TooltipOrigin origin) const = 0; virtual TooltipInfo getTooltipInfoForSourceLocationIdsAndLocalSymbolIds( const std::vector& locationIds, const std::vector& localSymbolIds) const = 0; - -protected: - ErrorFilter m_errorFilter; }; #endif // STORAGE_ACCESS_H diff --git a/src/lib/data/access/StorageAccessProxy.cpp b/src/lib/data/access/StorageAccessProxy.cpp index d8de0de0..f2351802 100644 --- a/src/lib/data/access/StorageAccessProxy.cpp +++ b/src/lib/data/access/StorageAccessProxy.cpp @@ -8,7 +8,6 @@ #include "utility/file/FileInfo.h" #include "utility/file/FilePath.h" #include "utility/logging/logging.h" -#include "utility/messaging/type/MessageShowErrors.h" StorageAccessProxy::StorageAccessProxy() : m_subject(nullptr) @@ -33,8 +32,6 @@ bool StorageAccessProxy::hasSubject() const void StorageAccessProxy::setSubject(StorageAccess* subject) { m_subject = subject; - - setErrorFilter(m_errorFilter); } Id StorageAccessProxy::getNodeIdForFileNode(const FilePath& filePath) const @@ -354,24 +351,24 @@ ErrorCountInfo StorageAccessProxy::getErrorCount() const return ErrorCountInfo(); } -std::vector StorageAccessProxy::getErrorsLimited(const std::vector& errorIds) const +std::vector StorageAccessProxy::getErrorsLimited(const ErrorFilter& filter) const { if (hasSubject()) { - return m_subject->getErrorsLimited(errorIds); + return m_subject->getErrorsLimited(filter); } return std::vector(); } -std::vector StorageAccessProxy::getErrorIdsForFile(const FilePath& filePath) const +std::vector StorageAccessProxy::getErrorsForFileLimited(const ErrorFilter& filter, const FilePath& filePath) const { if (hasSubject()) { - return m_subject->getErrorIdsForFile(filePath); + return m_subject->getErrorsForFileLimited(filter, filePath); } - return std::vector(); + return std::vector(); } std::shared_ptr StorageAccessProxy::getErrorSourceLocations( @@ -489,23 +486,3 @@ TooltipInfo StorageAccessProxy::getTooltipInfoForSourceLocationIdsAndLocalSymbol return TooltipInfo(); } - -void StorageAccessProxy::setErrorFilter(const ErrorFilter& filter) -{ - StorageAccess::setErrorFilter(filter); - - if (hasSubject()) - { - m_subject->setErrorFilter(filter); - } -} - -void StorageAccessProxy::handleMessage(MessageErrorFilterChanged* message) -{ - setErrorFilter(message->errorFilter); - - if (message->showErrors) - { - MessageShowErrors(getErrorCount()).dispatch(); - } -} diff --git a/src/lib/data/access/StorageAccessProxy.h b/src/lib/data/access/StorageAccessProxy.h index 148e6199..6b041fa7 100644 --- a/src/lib/data/access/StorageAccessProxy.h +++ b/src/lib/data/access/StorageAccessProxy.h @@ -3,12 +3,8 @@ #include "data/access/StorageAccess.h" -#include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageErrorFilterChanged.h" - class StorageAccessProxy : public StorageAccess - , public MessageListener { public: StorageAccessProxy(); @@ -63,7 +59,7 @@ public: virtual std::shared_ptr getCommentLocationsInFile(const FilePath& filePath) const override; virtual std::shared_ptr getFileContent(const FilePath& filePath) const override; - + virtual FileInfo getFileInfoForFileId(Id id) const override; virtual FileInfo getFileInfoForFilePath(const FilePath& filePath) const override; @@ -72,8 +68,9 @@ public: virtual StorageStats getStorageStats() const override; virtual ErrorCountInfo getErrorCount() const override; - virtual std::vector getErrorsLimited(const std::vector& errorIds) const override; - virtual std::vector getErrorIdsForFile(const FilePath& filePath) const override; + virtual std::vector getErrorsLimited(const ErrorFilter& filter) const override; + virtual std::vector getErrorsForFileLimited( + const ErrorFilter& filter, const FilePath& filePath) const override; virtual std::shared_ptr getErrorSourceLocations( const std::vector& errors) const override; @@ -96,12 +93,7 @@ public: virtual TooltipInfo getTooltipInfoForSourceLocationIdsAndLocalSymbolIds( const std::vector& locationIds, const std::vector& localSymbolIds) const override; -protected: - virtual void setErrorFilter(const ErrorFilter& filter) override; - private: - void handleMessage(MessageErrorFilterChanged* message) override; - StorageAccess* m_subject; }; diff --git a/src/lib/data/storage/PersistentStorage.cpp b/src/lib/data/storage/PersistentStorage.cpp index 0f387459..56283cd4 100644 --- a/src/lib/data/storage/PersistentStorage.cpp +++ b/src/lib/data/storage/PersistentStorage.cpp @@ -18,7 +18,7 @@ #include "utility/file/FileInfo.h" #include "utility/file/FilePath.h" #include "utility/logging/logging.h" -#include "utility/messaging/type/MessageNewErrors.h" +#include "utility/messaging/type/error/MessageErrorCountUpdate.h" #include "utility/messaging/type/MessageStatus.h" #include "utility/text/TextAccess.h" #include "utility/TextCodec.h" @@ -224,7 +224,7 @@ void PersistentStorage::forEachError(std::function(errors.begin() + m_preInjectionErrorCount, errors.end()), - getErrorCount(errors) - ).dispatch(); + MessageErrorCountUpdate(getErrorCount()).dispatch(); } } @@ -1546,53 +1541,20 @@ StorageStats PersistentStorage::getStorageStats() const ErrorCountInfo PersistentStorage::getErrorCount() const { - return getErrorCount(getErrors()); + return ErrorCountInfo(m_sqliteIndexStorage.getAll()); } -ErrorCountInfo PersistentStorage::getErrorCount(const std::vector& errors) const -{ - ErrorCountInfo info; - - for (const ErrorInfo& error : errors) - { - info.total++; - - if (error.fatal) - { - info.fatal++; - } - } - - return info; -} - -std::vector PersistentStorage::getErrors() const +std::vector PersistentStorage::getErrorsLimited(const ErrorFilter& filter) const { std::vector errors; for (const ErrorInfo& error : m_sqliteIndexStorage.getAll()) { - if (m_errorFilter.filter(error)) - { - errors.push_back(error); - } - } - - return errors; -} - -std::vector PersistentStorage::getErrorsLimited(const std::vector& errorIds) const -{ - std::vector errors; - std::set ids(errorIds.begin(), errorIds.end()); - - for (const ErrorInfo& error : m_sqliteIndexStorage.getAll()) - { - if (m_errorFilter.filter(error) && (!ids.size() || ids.find(error.id) != ids.end())) + if (filter.filter(error)) { errors.push_back(error); - if (m_errorFilter.limit > 0 && errors.size() >= m_errorFilter.limit) + if (filter.limit > 0 && errors.size() >= filter.limit) { break; } @@ -1602,11 +1564,10 @@ std::vector PersistentStorage::getErrorsLimited(const std::vector return errors; } -std::vector PersistentStorage::getErrorIdsForFile(const FilePath& filePath) const +std::vector PersistentStorage::getErrorsForFileLimited(const ErrorFilter& filter, const FilePath& filePath) const { Id fileId = getFileNodeId(filePath); std::set fileIds = { fileId }; - std::vector errorIds; std::unordered_map> includedMap = getFileIdToIncludedFileIdMap(); std::set fileIdsToProcess = includedMap[getFileNodeId(filePath)]; @@ -1625,16 +1586,18 @@ std::vector PersistentStorage::getErrorIdsForFile(const FilePath& filePath) fileIdsToProcess = nextFileIdsToProcess; } + std::vector res; + std::vector errors = m_sqliteIndexStorage.getAll(); for (const StorageError& error : errors) { - if (m_errorFilter.filter(error) && fileIds.find(getFileNodeId(FilePath(error.filePath))) != fileIds.end()) + if (filter.filter(error) && fileIds.find(getFileNodeId(FilePath(error.filePath))) != fileIds.end()) { - errorIds.push_back(error.id); + res.push_back(error); } } - if (errorIds.empty()) + if (res.empty()) { std::unordered_map> includingMap = getFileIdToIncludingFileIdMap(); fileIds.clear(); @@ -1655,14 +1618,14 @@ std::vector PersistentStorage::getErrorIdsForFile(const FilePath& filePath) for (const ErrorInfo& error : errors) { - if (error.fatal && m_errorFilter.filter(error) && fileIds.find(getFileNodeId(FilePath(error.filePath))) != fileIds.end()) + if (error.fatal && filter.filter(error) && fileIds.find(getFileNodeId(FilePath(error.filePath))) != fileIds.end()) { - errorIds.push_back(error.id); + res.push_back(error); } } } - return errorIds; + return res; } std::shared_ptr PersistentStorage::getErrorSourceLocations( @@ -1671,7 +1634,7 @@ std::shared_ptr PersistentStorage::getErrorSourceLocat TRACE(); std::shared_ptr collection = std::make_shared(); - size_t count = 0; + for (const ErrorInfo& error : errors) { // Set first bit to 1 to avoid collisions @@ -1687,13 +1650,6 @@ std::shared_ptr PersistentStorage::getErrorSourceLocat error.lineNumber, error.columnNumber ); - - count++; - - if (m_errorFilter.limit > 0 && count >= m_errorFilter.limit) - { - break; - } } addCompleteFlagsToSourceLocationCollection(collection.get()); diff --git a/src/lib/data/storage/PersistentStorage.h b/src/lib/data/storage/PersistentStorage.h index dbc847cd..73148856 100644 --- a/src/lib/data/storage/PersistentStorage.h +++ b/src/lib/data/storage/PersistentStorage.h @@ -128,10 +128,9 @@ public: virtual StorageStats getStorageStats() const override; virtual ErrorCountInfo getErrorCount() const override; - virtual ErrorCountInfo getErrorCount(const std::vector& errors) const; - virtual std::vector getErrors() const; - virtual std::vector getErrorsLimited(const std::vector& errorIds) const override; - virtual std::vector getErrorIdsForFile(const FilePath& filePath) const override; + virtual std::vector getErrorsLimited(const ErrorFilter& filter) const override; + virtual std::vector getErrorsForFileLimited( + const ErrorFilter& filter, const FilePath& filePath) const override; virtual std::shared_ptr getErrorSourceLocations( const std::vector& errors) const override; @@ -190,7 +189,7 @@ private: void buildMemberEdgeIdOrderMap(); void buildHierarchyCache(); - size_t m_preInjectionErrorCount = 0; + int m_preInjectionErrorCount = 0; SearchIndex m_commandIndex; SearchIndex m_symbolIndex; diff --git a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp index 9f370357..ae04f89e 100644 --- a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp +++ b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp @@ -841,6 +841,11 @@ int SqliteIndexStorage::getSourceLocationCount() const return executeStatementScalar("SELECT COUNT(*) FROM source_location;", 0); } +int SqliteIndexStorage::getErrorCount() const +{ + return executeStatementScalar("SELECT COUNT(*) FROM error;", 0); +} + std::vector> SqliteIndexStorage::getIndices() const { std::vector> indices; diff --git a/src/lib/data/storage/sqlite/SqliteIndexStorage.h b/src/lib/data/storage/sqlite/SqliteIndexStorage.h index 08435346..0aed2aae 100644 --- a/src/lib/data/storage/sqlite/SqliteIndexStorage.h +++ b/src/lib/data/storage/sqlite/SqliteIndexStorage.h @@ -141,6 +141,7 @@ public: int getCompletedFileCount() const; int getFileLineSum() const; int getSourceLocationCount() const; + int getErrorCount() const; private: static const size_t s_storageVersion; diff --git a/src/lib/project/Project.cpp b/src/lib/project/Project.cpp index ddd06a82..d79e6960 100644 --- a/src/lib/project/Project.cpp +++ b/src/lib/project/Project.cpp @@ -22,7 +22,7 @@ #include "utility/file/FilePath.h" #include "utility/file/FileSystem.h" -#include "utility/messaging/type/MessageClearErrorCount.h" +#include "utility/messaging/type/error/MessageErrorCountClear.h" #include "utility/messaging/type/MessageFinishedParsing.h" #include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageStatus.h" @@ -342,7 +342,7 @@ void Project::buildIndex(const RefreshInfo& info, DialogView* dialogView) } MessageStatus(L"Preparing Indexing", false, true).dispatch(); - MessageClearErrorCount().dispatch(); + MessageErrorCountClear().dispatch(); dialogView->showUnknownProgressDialog(L"Preparing Indexing", L"Setting up Indexers"); diff --git a/src/lib/utility/messaging/filter_types/MessageFilterErrorCountUpdate.h b/src/lib/utility/messaging/filter_types/MessageFilterErrorCountUpdate.h new file mode 100644 index 00000000..b6af55a2 --- /dev/null +++ b/src/lib/utility/messaging/filter_types/MessageFilterErrorCountUpdate.h @@ -0,0 +1,32 @@ +#ifndef MESSAGE_FILTER_ERROR_COUNT_UPDATE_H +#define MESSAGE_FILTER_ERROR_COUNT_UPDATE_H + +#include "utility/messaging/MessageFilter.h" +#include "utility/messaging/type/error/MessageErrorCountUpdate.h" + +class MessageFilterErrorCountUpdate + : public MessageFilter +{ + void filter(MessageQueue::MessageBufferType* messageBuffer) override + { + if (messageBuffer->size() < 2) + { + return; + } + + MessageBase* message = messageBuffer->front().get(); + if (message->getType() == MessageErrorCountUpdate::getStaticType()) + { + for (auto it = messageBuffer->begin() + 1; it != messageBuffer->end(); it++) + { + if ((*it)->getType() == MessageErrorCountUpdate::getStaticType()) + { + messageBuffer->pop_front(); + return; + } + } + } + } +}; + +#endif // MESSAGE_FILTER_ERROR_COUNT_UPDATE_H diff --git a/src/lib/utility/messaging/filter_types/MessageFilterNewErrors.h b/src/lib/utility/messaging/filter_types/MessageFilterNewErrors.h deleted file mode 100644 index 90d67abc..00000000 --- a/src/lib/utility/messaging/filter_types/MessageFilterNewErrors.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef MESSAGE_FILTER_NEW_ERRORS_H -#define MESSAGE_FILTER_NEW_ERRORS_H - -#include "utility/messaging/MessageFilter.h" -#include "utility/messaging/type/MessageNewErrors.h" - -class MessageFilterNewErrors - : public MessageFilter -{ - void filter(MessageQueue::MessageBufferType* messageBuffer) override - { - if (messageBuffer->size() < 2) - { - return; - } - - MessageBase* message = messageBuffer->front().get(); - if (message->getType() == MessageNewErrors::getStaticType()) - { - for (auto it = messageBuffer->begin() + 1; it != messageBuffer->end(); it++) - { - if ((*it)->getType() == MessageNewErrors::getStaticType()) - { - MessageNewErrors* frontErrorsMessage = dynamic_cast(message); - MessageNewErrors* backErrorsMessage = dynamic_cast(it->get()); - - backErrorsMessage->errors.insert( - backErrorsMessage->errors.begin(), - frontErrorsMessage->errors.begin(), - frontErrorsMessage->errors.end() - ); - - messageBuffer->pop_front(); - return; - } - } - } - } -}; - -#endif // MESSAGE_FILTER_NEW_ERRORS_H diff --git a/src/lib/utility/messaging/type/MessageClearErrorCount.h b/src/lib/utility/messaging/type/MessageClearErrorCount.h deleted file mode 100644 index cc0fac79..00000000 --- a/src/lib/utility/messaging/type/MessageClearErrorCount.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MESSAGE_CLEAR_ERROR_COUNT_H -#define MESSAGE_CLEAR_ERROR_COUNT_H - -#include "utility/messaging/Message.h" - -class MessageClearErrorCount - : public Message -{ -public: - MessageClearErrorCount() - { - setSendAsTask(false); - } - - static const std::string getStaticType() - { - return "MessageClearErrorCount"; - } -}; - -#endif // MESSAGE_CLEAR_ERROR_COUNT_H diff --git a/src/lib/utility/messaging/type/MessageErrorFilterChanged.h b/src/lib/utility/messaging/type/MessageErrorFilterChanged.h deleted file mode 100644 index 3da1ed95..00000000 --- a/src/lib/utility/messaging/type/MessageErrorFilterChanged.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef MESSAGE_ERROR_FILTER_CHANGED_H -#define MESSAGE_ERROR_FILTER_CHANGED_H - -#include "utility/messaging/Message.h" -#include "data/ErrorFilter.h" - -class MessageErrorFilterChanged - : public Message -{ -public: - MessageErrorFilterChanged(const ErrorFilter& filter, bool showErrors) - : errorFilter(filter) - , showErrors(showErrors) - { - } - - static const std::string getStaticType() - { - return "MessageErrorFilterChanged"; - } - - const ErrorFilter errorFilter; - const bool showErrors; -}; - -#endif // MESSAGE_ERROR_FILTER_CHANGED_H diff --git a/src/lib/utility/messaging/type/MessageShowErrorHelpMessage.h b/src/lib/utility/messaging/type/MessageShowErrorHelpMessage.h deleted file mode 100644 index da2e4df2..00000000 --- a/src/lib/utility/messaging/type/MessageShowErrorHelpMessage.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MESSAGE_SHOW_ERROR_HELP_MESSAGE_H -#define MESSAGE_SHOW_ERROR_HELP_MESSAGE_H - -#include "utility/messaging/Message.h" - -class MessageShowErrorHelpMessage: - public Message -{ -public: - MessageShowErrorHelpMessage(bool force = false) - : force(force) - { - } - - static const std::string getStaticType() - { - return "MessageShowErrorHelpMessage"; - } - - const bool force; -}; - -#endif // MESSAGE_SHOW_ERROR_HELP_MESSAGE_H diff --git a/src/lib/utility/messaging/type/MessageShowErrors.h b/src/lib/utility/messaging/type/MessageShowErrors.h deleted file mode 100644 index 364effa9..00000000 --- a/src/lib/utility/messaging/type/MessageShowErrors.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef MESSAGE_SHOW_ERRORS_H -#define MESSAGE_SHOW_ERRORS_H - -#include "utility/messaging/Message.h" - -#include "data/ErrorCountInfo.h" - -class MessageShowErrors - : public Message -{ -public: - MessageShowErrors(ErrorCountInfo errorCount) - : errorCount(errorCount) - , errorId(0) - { - } - - MessageShowErrors(const std::vector& errorIds) - : errorIds(errorIds) - , errorId(0) - , showsOnlyErrorIds(true) - { - } - - MessageShowErrors(Id errorId) - : errorId(errorId) - { - } - - static const std::string getStaticType() - { - return "MessageShowErrors"; - } - - const ErrorCountInfo errorCount; - const std::vector errorIds; - const Id errorId; - - bool showsOnlyErrorIds = false; -}; - -#endif // MESSAGE_SHOW_ERRORS_H diff --git a/src/lib/utility/messaging/type/MessageShowErrorsForFile.h b/src/lib/utility/messaging/type/MessageShowErrorsForFile.h deleted file mode 100644 index fdb6b275..00000000 --- a/src/lib/utility/messaging/type/MessageShowErrorsForFile.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef MESSAGE_SHOW_ERRORS_FOR_FILE_H -#define MESSAGE_SHOW_ERRORS_FOR_FILE_H - -#include "utility/file/FilePath.h" -#include "utility/messaging/Message.h" - -class MessageShowErrorsForFile - : public Message -{ -public: - MessageShowErrorsForFile(const FilePath& filePath) - : filePath(filePath) - { - } - - static const std::string getStaticType() - { - return "MessageShowErrorsForFile"; - } - - const FilePath filePath; -}; - -#endif // MESSAGE_SHOW_ERRORS_FOR_FILE_H diff --git a/src/lib/utility/messaging/type/error/MessageActivateErrors.h b/src/lib/utility/messaging/type/error/MessageActivateErrors.h new file mode 100644 index 00000000..f05164fe --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageActivateErrors.h @@ -0,0 +1,26 @@ +#ifndef MESSAGE_ACTIVATE_ERRORS_H +#define MESSAGE_ACTIVATE_ERRORS_H + +#include "data/ErrorFilter.h" +#include "utility/messaging/Message.h" + +class MessageActivateErrors + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageActivateErrors"; + } + + MessageActivateErrors(const ErrorFilter& filter, const FilePath& file = FilePath()) + : filter(filter) + , file(file) + { + } + + const ErrorFilter filter; + const FilePath file; +}; + +#endif // MESSAGE_ACTIVATE_ERRORS_H diff --git a/src/lib/utility/messaging/type/error/MessageErrorCountClear.h b/src/lib/utility/messaging/type/error/MessageErrorCountClear.h new file mode 100644 index 00000000..209c9a02 --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageErrorCountClear.h @@ -0,0 +1,21 @@ +#ifndef MESSAGE_ERROR_COUNT_CLEAR_H +#define MESSAGE_ERROR_COUNT_CLEAR_H + +#include "utility/messaging/Message.h" + +class MessageErrorCountClear + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageErrorCountClear"; + } + + MessageErrorCountClear() + { + setSendAsTask(false); + } +}; + +#endif // MESSAGE_ERROR_COUNT_CLEAR_H diff --git a/src/lib/utility/messaging/type/error/MessageErrorCountUpdate.h b/src/lib/utility/messaging/type/error/MessageErrorCountUpdate.h new file mode 100644 index 00000000..8dba840f --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageErrorCountUpdate.h @@ -0,0 +1,26 @@ +#ifndef MESSAGE_ERROR_COUNT_UPDATE_H +#define MESSAGE_ERROR_COUNT_UPDATE_H + +#include "utility/messaging/Message.h" + +#include "data/ErrorCountInfo.h" + +class MessageErrorCountUpdate + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageErrorCountUpdate"; + } + + MessageErrorCountUpdate(const ErrorCountInfo& errorCount) + : errorCount(errorCount) + { + setSendAsTask(false); + } + + const ErrorCountInfo errorCount; +}; + +#endif // MESSAGE_ERROR_COUNT_UPDATE_H diff --git a/src/lib/utility/messaging/type/error/MessageErrorsAll.h b/src/lib/utility/messaging/type/error/MessageErrorsAll.h new file mode 100644 index 00000000..b94f52d8 --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageErrorsAll.h @@ -0,0 +1,20 @@ +#ifndef MESSAGE_ERRORS_ALL_H +#define MESSAGE_ERRORS_ALL_H + +#include "utility/messaging/Message.h" + +class MessageErrorsAll: + public Message +{ +public: + static const std::string getStaticType() + { + return "MessageErrorsAll"; + } + + MessageErrorsAll() + { + } +}; + +#endif // MESSAGE_ERRORS_ALL_H diff --git a/src/lib/utility/messaging/type/error/MessageErrorsForFile.h b/src/lib/utility/messaging/type/error/MessageErrorsForFile.h new file mode 100644 index 00000000..35294bee --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageErrorsForFile.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_ERRORS_FOR_FILE_H +#define MESSAGE_ERRORS_FOR_FILE_H + +#include "utility/messaging/Message.h" + +class MessageErrorsForFile: + public Message +{ +public: + static const std::string getStaticType() + { + return "MessageErrorsForFile"; + } + + MessageErrorsForFile(const FilePath& file) + : file(file) + { + } + + const FilePath& file; +}; + +#endif // MESSAGE_ERRORS_FOR_FILE_H diff --git a/src/lib/utility/messaging/type/error/MessageErrorsHelpMessage.h b/src/lib/utility/messaging/type/error/MessageErrorsHelpMessage.h new file mode 100644 index 00000000..1ea7ee55 --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageErrorsHelpMessage.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_ERRORS_HELP_MESSAGE_H +#define MESSAGE_ERRORS_HELP_MESSAGE_H + +#include "utility/messaging/Message.h" + +class MessageErrorsHelpMessage: + public Message +{ +public: + static const std::string getStaticType() + { + return "MessageErrorsHelpMessage"; + } + + MessageErrorsHelpMessage(bool force = false) + : force(force) + { + } + + const bool force; +}; + +#endif // MESSAGE_ERRORS_HELP_MESSAGE_H diff --git a/src/lib/utility/messaging/type/error/MessageShowError.h b/src/lib/utility/messaging/type/error/MessageShowError.h new file mode 100644 index 00000000..a7356904 --- /dev/null +++ b/src/lib/utility/messaging/type/error/MessageShowError.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_SHOW_ERROR_H +#define MESSAGE_SHOW_ERROR_H + +#include "utility/messaging/Message.h" + +class MessageShowError + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageShowError"; + } + + MessageShowError(Id errorId) + : errorId(errorId) + { + } + + const Id errorId; +}; + +#endif // MESSAGE_SHOW_ERROR_H diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index a884594c..77788c35 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -17,11 +17,11 @@ #include "qt/utility/QtContextMenu.h" #include "settings/ApplicationSettings.h" #include "settings/ColorScheme.h" +#include "utility/messaging/type/error/MessageShowError.h" #include "utility/messaging/type/MessageActivateLocalSymbols.h" #include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusOut.h" #include "utility/messaging/type/MessageMoveIDECursor.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/TextCodec.h" #include "utility/utility.h" #include "utility/utilityApp.h" @@ -715,7 +715,7 @@ void QtCodeArea::activateErrors(const std::vector& annotation if (errorIds.size() == 1) { - MessageShowErrors(errorIds[0]).dispatch(); + MessageShowError(errorIds[0]).dispatch(); } } diff --git a/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp b/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp index 3aca71fc..de698f23 100644 --- a/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp +++ b/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp @@ -5,7 +5,7 @@ #include #include "utility/ResourcePaths.h" -#include "utility/messaging/type/MessageShowErrorsForFile.h" +#include "utility/messaging/type/error/MessageErrorsForFile.h" QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool isSingle) : QtHoverButton(parent) @@ -44,7 +44,7 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is m_showErrorsButton = new QPushButton("show errors"); m_showErrorsButton->setObjectName("screen_button"); - m_showErrorsButton->setToolTip("Show all errors related to this file"); + m_showErrorsButton->setToolTip("Show all errors causing this file to be incomplete"); m_showErrorsButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_showErrorsButton->hide(); titleLayout->addWidget(m_showErrorsButton); @@ -52,7 +52,7 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is connect(m_showErrorsButton, &QPushButton::clicked, [this]() { - MessageShowErrorsForFile(m_titleButton->getFilePath()).dispatch(); + MessageErrorsForFile(m_titleButton->getFilePath()).dispatch(); } ); diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index e6670c46..ee216cb5 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -7,8 +7,8 @@ #include #include "utility/logging/logging.h" +#include "utility/messaging/type/error/MessageShowError.h" #include "utility/messaging/type/MessageScrollCode.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/ResourcePaths.h" #include "data/location/SourceLocation.h" @@ -918,7 +918,7 @@ void QtCodeNavigator::handleMessage(MessageShowReference* message) if (ref.locationType == LOCATION_ERROR) { - MessageShowErrors(ref.tokenId).dispatch(); + MessageShowError(ref.tokenId).dispatch(); } } diff --git a/src/lib_gui/qt/view/QtDialogView.cpp b/src/lib_gui/qt/view/QtDialogView.cpp index 76a65e64..4bf3d760 100644 --- a/src/lib_gui/qt/view/QtDialogView.cpp +++ b/src/lib_gui/qt/view/QtDialogView.cpp @@ -424,25 +424,8 @@ void QtDialogView::handleMessage(MessageInterruptTasks* message) ); } -void QtDialogView::handleMessage(MessageNewErrors* message) +void QtDialogView::handleMessage(MessageErrorCountUpdate* message) { - ErrorCountInfo errorInfo = m_storageAccess->getErrorCount(); - - m_onQtThread3( - [=]() - { - updateErrorCount(errorInfo.total, errorInfo.fatal); - } - ); -} - -void QtDialogView::handleMessage(MessageShowErrors* message) -{ - if (message->isReplayed()) - { - return; - } - ErrorCountInfo errorInfo = message->errorCount; m_onQtThread3( diff --git a/src/lib_gui/qt/view/QtDialogView.h b/src/lib_gui/qt/view/QtDialogView.h index 81dc8878..256944b7 100644 --- a/src/lib_gui/qt/view/QtDialogView.h +++ b/src/lib_gui/qt/view/QtDialogView.h @@ -7,9 +7,8 @@ #include "qt/window/QtWindowStack.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/error/MessageErrorCountUpdate.h" #include "utility/messaging/type/MessageInterruptTasks.h" -#include "utility/messaging/type/MessageNewErrors.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageWindowClosed.h" class QtMainWindow; @@ -18,9 +17,8 @@ class QtWindow; class QtDialogView : public QObject , public DialogView + , public MessageListener , public MessageListener - , public MessageListener - , public MessageListener , public MessageListener { Q_OBJECT @@ -57,9 +55,8 @@ private slots: void setUIBlocked(bool blocked); private: + void handleMessage(MessageErrorCountUpdate* message) override; void handleMessage(MessageInterruptTasks* message) override; - void handleMessage(MessageNewErrors* message) override; - void handleMessage(MessageShowErrors* message) override; void handleMessage(MessageWindowClosed* message) override; void updateErrorCount(size_t errorCount, size_t fatalCount); diff --git a/src/lib_gui/qt/view/QtErrorView.cpp b/src/lib_gui/qt/view/QtErrorView.cpp index c09d2704..0f84a787 100644 --- a/src/lib_gui/qt/view/QtErrorView.cpp +++ b/src/lib_gui/qt/view/QtErrorView.cpp @@ -19,9 +19,7 @@ #include "qt/utility/utilityQt.h" #include "qt/view/QtViewWidgetWrapper.h" #include "settings/ColorScheme.h" -#include "utility/messaging/type/MessageErrorFilterChanged.h" #include "utility/messaging/type/MessageProjectEdit.h" -#include "utility/messaging/type/MessageShowErrors.h" #include "utility/ResourcePaths.h" QIcon QtErrorView::s_errorIcon; @@ -56,6 +54,7 @@ QWidget* SelectableDelegate::createEditor( QtErrorView::QtErrorView(ViewLayout* viewLayout) : ErrorView(viewLayout) + , m_controllerProxy(this) , m_ignoreRowSelection(false) { s_errorIcon = QIcon(QString::fromStdWString(ResourcePaths::getGuiPath().concatenate(L"indexing_dialog/error.png").wstr())); @@ -107,7 +106,9 @@ void QtErrorView::initView() return; } - MessageShowErrors(m_model->item(index.row(), COLUMN::ID)->text().toUInt()).dispatch(); + Id errorId = m_model->item(index.row(), COLUMN::ID)->text().toUInt(); + + m_controllerProxy.executeAsTaskWithArgs(&ErrorController::showError, errorId); } }); @@ -153,11 +154,9 @@ void QtErrorView::initView() m_allLabel = new QLabel(""); checkboxes->addWidget(m_allLabel); m_allLabel->hide(); - } - checkboxes->addSpacing(5); + checkboxes->addSpacing(5); - { m_allButton = new QPushButton(""); m_allButton->setObjectName("screen_button"); connect(m_allButton, &QPushButton::clicked, @@ -169,6 +168,9 @@ void QtErrorView::initView() ); checkboxes->addWidget(m_allButton); m_allButton->hide(); + + m_errorLabel = new QLabel(""); + checkboxes->addWidget(m_errorLabel); } checkboxes->addSpacing(10); @@ -215,10 +217,14 @@ void QtErrorView::clear() } m_table->updateRows(); + + m_allLabel->setVisible(false); + m_allButton->setVisible(false); + m_errorLabel->setVisible(false); }); } -void QtErrorView::addErrors(const std::vector& errors, bool scrollTo) +void QtErrorView::addErrors(const std::vector& errors, const ErrorCountInfo& errorCount, bool scrollTo) { m_onQtThread([=]() { @@ -236,6 +242,20 @@ void QtErrorView::addErrors(const std::vector& errors, bool scrollTo) { m_table->showFirstRow(); } + + bool limited = m_errorFilter.limit > 0 && errorCount.total > m_errorFilter.limit; + + m_allLabel->setVisible(limited); + m_allLabel->setText("Only displaying first " + QString::number(m_errorFilter.limit) + " errors"); + + m_allButton->setVisible(limited); + m_allButton->setText("Show all " + QString::number(errorCount.total)); + + m_errorLabel->setVisible(!limited); + m_errorLabel->setText("displaying " + + QString::number(errorCount.total) + " error" + (errorCount.total != 1 ? "s" : "") + + (errorCount.fatal > 0 ? " (" + QString::number(errorCount.fatal) + " fatal)" : "") + "" + ); }); } @@ -254,26 +274,6 @@ void QtErrorView::setErrorId(Id errorId) }); } -void QtErrorView::setErrorCount(ErrorCountInfo info) -{ - m_onQtThread([=]() - { - m_allLabel->setVisible(m_errorFilter.limit > 0 && info.total > m_errorFilter.limit); - m_allButton->setVisible(m_errorFilter.limit > 0 && info.total > m_errorFilter.limit); - - m_allLabel->setText("Only showing first " + QString::number(m_errorFilter.limit) + " errors"); - m_allButton->setText("Show all " + QString::number(info.total)); - }); -} - -void QtErrorView::resetErrorLimit() -{ - ErrorFilter filter; - - m_errorFilter.limit = filter.limit; - errorFilterChanged(0, false); -} - void QtErrorView::showErrorHelpMessage() { m_onQtThread([=]() @@ -282,12 +282,40 @@ void QtErrorView::showErrorHelpMessage() }); } -void QtErrorView::errorFilterChanged(int i) +ErrorFilter QtErrorView::getErrorFilter() const { - errorFilterChanged(i, true); + return m_errorFilter; } -void QtErrorView::errorFilterChanged(int i, bool showErrors) +void QtErrorView::setErrorFilter(const ErrorFilter& filter) +{ + if (m_errorFilter == filter) + { + return; + } + + m_errorFilter = filter; + + m_onQtThread([=]() + { + m_showErrors->blockSignals(true); + m_showFatals->blockSignals(true); + m_showNonIndexedErrors->blockSignals(true); + m_showNonIndexedFatals->blockSignals(true); + + m_showErrors->setChecked(m_errorFilter.error); + m_showFatals->setChecked(m_errorFilter.fatal); + m_showNonIndexedErrors->setChecked(m_errorFilter.unindexedError); + m_showNonIndexedFatals->setChecked(m_errorFilter.unindexedFatal); + + m_showErrors->blockSignals(false); + m_showFatals->blockSignals(false); + m_showNonIndexedErrors->blockSignals(false); + m_showNonIndexedFatals->blockSignals(false); + }); +} + +void QtErrorView::errorFilterChanged(int i) { m_table->selectionModel()->clearSelection(); @@ -296,7 +324,7 @@ void QtErrorView::errorFilterChanged(int i, bool showErrors) m_errorFilter.unindexedError = m_showNonIndexedErrors->isChecked(); m_errorFilter.unindexedFatal = m_showNonIndexedFatals->isChecked(); - MessageErrorFilterChanged(m_errorFilter, showErrors).dispatch(); + m_controllerProxy.executeAsTaskWithArgs(&ErrorController::errorFilterChanged, m_errorFilter); } void QtErrorView::setStyleSheet() const diff --git a/src/lib_gui/qt/view/QtErrorView.h b/src/lib_gui/qt/view/QtErrorView.h index 5f44d8f9..f5cd7150 100644 --- a/src/lib_gui/qt/view/QtErrorView.h +++ b/src/lib_gui/qt/view/QtErrorView.h @@ -3,6 +3,8 @@ #include +#include "component/controller/ErrorController.h" +#include "component/controller/helper/ControllerProxy.h" #include "component/view/ErrorView.h" #include "data/ErrorFilter.h" #include "qt/utility/QtThreadedFunctor.h" @@ -33,17 +35,17 @@ public: // ErrorView implementation virtual void clear(); - virtual void addErrors(const std::vector& errors, bool scrollTo); - virtual void setErrorId(Id errorId); - virtual void setErrorCount(ErrorCountInfo info); - virtual void resetErrorLimit(); + virtual void addErrors(const std::vector& errors, const ErrorCountInfo& errorCount, bool scrollTo); + virtual void setErrorId(Id errorId); virtual void showErrorHelpMessage(); + virtual ErrorFilter getErrorFilter() const; + virtual void setErrorFilter(const ErrorFilter& filter); + private slots: void errorFilterChanged(int i = 0); - void errorFilterChanged(int i, bool showErrors); private: enum COLUMN { @@ -65,10 +67,12 @@ private: static QIcon s_errorIcon; + ControllerProxy m_controllerProxy; QtThreadedLambdaFunctor m_onQtThread; ErrorFilter m_errorFilter; + QLabel* m_errorLabel; QLabel* m_allLabel; QPushButton* m_allButton; diff --git a/src/lib_gui/qt/window/QtIndexingDialog.cpp b/src/lib_gui/qt/window/QtIndexingDialog.cpp index 6bf5a3f4..811377b9 100644 --- a/src/lib_gui/qt/window/QtIndexingDialog.cpp +++ b/src/lib_gui/qt/window/QtIndexingDialog.cpp @@ -8,8 +8,8 @@ #include "qt/utility/utilityQt.h" #include "qt/element/QtHelpButton.h" #include "qt/element/QtProgressBar.h" +#include "utility/messaging/type/error/MessageErrorsHelpMessage.h" #include "utility/messaging/type/MessageInterruptTasks.h" -#include "utility/messaging/type/MessageShowErrorHelpMessage.h" #include "utility/ResourcePaths.h" #include "utility/utility.h" @@ -359,7 +359,7 @@ void QtIndexingDialog::handleNext() if (m_type == DIALOG_REPORT) { - MessageShowErrorHelpMessage().dispatch(); + MessageErrorsHelpMessage().dispatch(); } QtWindow::handleNext(); @@ -486,7 +486,7 @@ void QtIndexingDialog::addErrorWidget(QBoxLayout* layout) connect(helpButton, &QtHelpButton::clicked, []() { - MessageShowErrorHelpMessage(true).dispatch(); + MessageErrorsHelpMessage(true).dispatch(); } ); diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 1c800cf1..8e93c785 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -28,6 +28,7 @@ #include "settings/ApplicationSettings.h" #include "utility/file/FileSystem.h" #include "utility/logging/logging.h" +#include "utility/messaging/type/error/MessageErrorsHelpMessage.h" #include "utility/messaging/type/MessageActivateBookmark.h" #include "utility/messaging/type/MessageCodeReference.h" #include "utility/messaging/type/MessageDisplayBookmarkCreator.h" @@ -40,7 +41,6 @@ #include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageResetZoom.h" #include "utility/messaging/type/MessageSearch.h" -#include "utility/messaging/type/MessageShowErrorHelpMessage.h" #include "utility/messaging/type/MessageUndo.h" #include "utility/messaging/type/MessageWindowClosed.h" #include "utility/messaging/type/MessageZoom.h" @@ -455,7 +455,7 @@ void QtMainWindow::showKeyboardShortcuts() void QtMainWindow::showErrorHelpMessage() { - MessageShowErrorHelpMessage(true).dispatch(); + MessageErrorsHelpMessage(true).dispatch(); } void QtMainWindow::showBugtracker()