diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index a6a21558..d07847ae 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -248,13 +248,26 @@ void CodeController::handleMessage(MessageShowScope* message) } std::vector snippets = getSnippetsForActiveTokenLocations(collection.get(), 0); - if (snippets.size() != 1) { LOG_ERROR("MessageShowScope didn't result in one single snippet to be created"); return; } + if (message->showErrors) + { + std::vector errorMessages; + std::vector errorSnippets = getSnippetsForErrorLocations(&errorMessages); + + for (const CodeSnippetParams& error : errorSnippets) + { + if (error.locationFile->getFilePath() == snippets[0].locationFile->getFilePath()) + { + snippets[0].locationFile = error.locationFile; + } + } + } + getView()->addCodeSnippets(snippets, true); showContents(message); diff --git a/src/lib/utility/messaging/type/MessageShowScope.h b/src/lib/utility/messaging/type/MessageShowScope.h index d6b59968..7b5d2cc7 100644 --- a/src/lib/utility/messaging/type/MessageShowScope.h +++ b/src/lib/utility/messaging/type/MessageShowScope.h @@ -8,8 +8,9 @@ class MessageShowScope : public Message { public: - MessageShowScope(Id scopeLocationId) + MessageShowScope(Id scopeLocationId, bool showErrors) : scopeLocationId(scopeLocationId) + , showErrors(showErrors) { } @@ -24,6 +25,7 @@ public: } const Id scopeLocationId; + const bool showErrors; }; #endif // MESSAGE_SHOW_SCOPE_H diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index a9459012..03da4352 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -640,7 +640,7 @@ void QtCodeArea::annotateText() const std::vector& activeIds = m_fileWidget->getActiveTokenIds(); const std::vector& focusIds = m_fileWidget->getFocusedTokenIds(); - bool isError = m_fileWidget->getErrorMessages().size() > 0; + bool isError = m_fileWidget->hasErrors(); bool needsUpdate = false; for (Annotation& annotation: m_annotations) diff --git a/src/lib_gui/qt/element/QtCodeFile.cpp b/src/lib_gui/qt/element/QtCodeFile.cpp index 7388f6e4..c053db61 100644 --- a/src/lib_gui/qt/element/QtCodeFile.cpp +++ b/src/lib_gui/qt/element/QtCodeFile.cpp @@ -139,6 +139,11 @@ const std::vector& QtCodeFile::getErrorMessages() const return m_parent->getErrorMessages(); } +bool QtCodeFile::hasErrors() const +{ + return getErrorMessages().size() > 0; +} + void QtCodeFile::addCodeSnippet(const CodeSnippetParams& params) { m_locationFile.reset(); @@ -376,7 +381,7 @@ void QtCodeFile::clickedMinimizeButton() const m_filePath, MessageChangeFileView::FILE_MINIMIZED, false, - false, + hasErrors(), nullptr ).dispatch(); } @@ -387,7 +392,7 @@ void QtCodeFile::clickedSnippetButton() const m_filePath, MessageChangeFileView::FILE_SNIPPETS, (m_locationFile != nullptr), - false, + hasErrors(), m_locationFile ).dispatch(); } @@ -398,7 +403,7 @@ void QtCodeFile::clickedMaximizeButton() const m_filePath, MessageChangeFileView::FILE_MAXIMIZED, (m_fileSnippet == nullptr), - false, + hasErrors(), nullptr ).dispatch(); } @@ -416,7 +421,7 @@ void QtCodeFile::requestSnippets() const m_filePath, MessageChangeFileView::FILE_SNIPPETS, (m_locationFile != nullptr), - false, + hasErrors(), m_locationFile ); msg.undoRedoType = MessageBase::UNDOTYPE_IGNORE; diff --git a/src/lib_gui/qt/element/QtCodeFile.h b/src/lib_gui/qt/element/QtCodeFile.h index c716685c..0c26cb6a 100644 --- a/src/lib_gui/qt/element/QtCodeFile.h +++ b/src/lib_gui/qt/element/QtCodeFile.h @@ -40,7 +40,9 @@ public: const std::vector& getActiveTokenIds() const; const std::vector& getFocusedTokenIds() const; + const std::vector& getErrorMessages() const; + bool hasErrors() const; void addCodeSnippet(const CodeSnippetParams& params); QtCodeSnippet* insertCodeSnippet(const CodeSnippetParams& params); diff --git a/src/lib_gui/qt/element/QtCodeSnippet.cpp b/src/lib_gui/qt/element/QtCodeSnippet.cpp index a4d45473..580f5cae 100644 --- a/src/lib_gui/qt/element/QtCodeSnippet.cpp +++ b/src/lib_gui/qt/element/QtCodeSnippet.cpp @@ -170,7 +170,7 @@ void QtCodeSnippet::clickedTitle() { if (m_titleId > 0) { - MessageShowScope(m_titleId).dispatch(); + MessageShowScope(m_titleId, dynamic_cast(parent())->hasErrors()).dispatch(); } else { @@ -182,7 +182,7 @@ void QtCodeSnippet::clickedFooter() { if (m_footerId > 0) { - MessageShowScope(m_footerId).dispatch(); + MessageShowScope(m_footerId, dynamic_cast(parent())->hasErrors()).dispatch(); } }