diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index ba16ac8c..3e23b6b4 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -350,7 +350,7 @@ Id QtCodeArea::getLocationIdOfFirstActiveLocation(Id tokenId) const for (const Annotation& annotation : m_annotations) { if (annotation.locationType == LocationType::LOCATION_TOKEN && annotation.isActive && - annotation.tokenIds.find(tokenId) != annotation.tokenIds.end()) + (!tokenId || annotation.tokenIds.find(tokenId) != annotation.tokenIds.end())) { return annotation.locationId; } diff --git a/src/lib_gui/qt/element/QtCodeFile.cpp b/src/lib_gui/qt/element/QtCodeFile.cpp index c55ad649..118a6063 100644 --- a/src/lib_gui/qt/element/QtCodeFile.cpp +++ b/src/lib_gui/qt/element/QtCodeFile.cpp @@ -408,13 +408,26 @@ void QtCodeFile::clickedSnippetButton() void QtCodeFile::clickedMaximizeButton() { - uint firstLineNumber = 1; - std::vector snippets = getVisibleSnippets(); - if (snippets.size()) + uint lineNumber = 0; + Id locationId = 0; + + std::pair snippet = getFirstSnippetWithActiveLocationId(0); + if (snippet.first) { - firstLineNumber = snippets[0]->getStartLineNumber(); + locationId = snippet.second; } - m_navigator->requestScroll(m_filePath, firstLineNumber, 0, false, QtCodeNavigateable::SCROLL_CENTER); + else + { + lineNumber = 1; + + std::vector snippets = getVisibleSnippets(); + if (snippets.size()) + { + lineNumber = snippets[0]->getStartLineNumber(); + } + } + + m_navigator->requestScroll(m_filePath, lineNumber, locationId, false, QtCodeNavigateable::SCROLL_CENTER); MessageChangeFileView( m_filePath, diff --git a/src/lib_gui/qt/element/QtCodeFileList.cpp b/src/lib_gui/qt/element/QtCodeFileList.cpp index 15f45c08..3f34bfdf 100644 --- a/src/lib_gui/qt/element/QtCodeFileList.cpp +++ b/src/lib_gui/qt/element/QtCodeFileList.cpp @@ -323,6 +323,25 @@ void QtCodeFileList::maximizeFirstFile() } } +std::pair QtCodeFileList::getFirstFileWithActiveLocationId() const +{ + for (QtCodeFile* file : m_files) + { + if (file->isCollapsed()) + { + continue; + } + + std::pair snippet = file->getFirstSnippetWithActiveLocationId(0); + if (snippet.first != nullptr) + { + return std::make_pair(file, snippet.second); + } + } + + return std::make_pair(nullptr, 0); +} + std::pair QtCodeFileList::getFirstSnippetWithActiveLocationId(Id tokenId) const { std::pair result(nullptr, 0); diff --git a/src/lib_gui/qt/element/QtCodeFileList.h b/src/lib_gui/qt/element/QtCodeFileList.h index dca21499..5c6eb6d7 100644 --- a/src/lib_gui/qt/element/QtCodeFileList.h +++ b/src/lib_gui/qt/element/QtCodeFileList.h @@ -53,6 +53,7 @@ public: void maximizeFirstFile(); + std::pair getFirstFileWithActiveLocationId() const; std::pair getFirstSnippetWithActiveLocationId(Id tokenId) const; protected: diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index e27dba00..aaadcc06 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -821,12 +821,30 @@ void QtCodeNavigator::nextReference(bool fromUI) void QtCodeNavigator::setModeList() { + if (m_mode == MODE_LIST) + { + return; + } + m_single->clickedSnippetButton(); } void QtCodeNavigator::setModeSingle() { - m_list->maximizeFirstFile(); + if (m_mode == MODE_SINGLE) + { + return; + } + + QtCodeFile* file = m_list->getFirstFileWithActiveLocationId().first; + if (file) + { + file->clickedMaximizeButton(); + } + else + { + m_list->maximizeFirstFile(); + } } void QtCodeNavigator::showCurrentReference(bool fromUI)