diff --git a/src/app/qt/element/QtCodeFile.cpp b/src/app/qt/element/QtCodeFile.cpp index 9a76e873..779303c3 100644 --- a/src/app/qt/element/QtCodeFile.cpp +++ b/src/app/qt/element/QtCodeFile.cpp @@ -36,7 +36,7 @@ const std::string& QtCodeFile::getFileName() const } void QtCodeFile::addCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds diff --git a/src/app/qt/element/QtCodeFile.h b/src/app/qt/element/QtCodeFile.h index 6502301c..721df269 100644 --- a/src/app/qt/element/QtCodeFile.h +++ b/src/app/qt/element/QtCodeFile.h @@ -21,7 +21,7 @@ public: const std::string& getFileName() const; void addCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds diff --git a/src/app/qt/element/QtCodeFileList.cpp b/src/app/qt/element/QtCodeFileList.cpp index c442c4cc..c51467af 100644 --- a/src/app/qt/element/QtCodeFileList.cpp +++ b/src/app/qt/element/QtCodeFileList.cpp @@ -29,7 +29,7 @@ QtCodeFileList::~QtCodeFileList() } void QtCodeFileList::addCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds diff --git a/src/app/qt/element/QtCodeFileList.h b/src/app/qt/element/QtCodeFileList.h index 7ad3f718..2a3fa433 100644 --- a/src/app/qt/element/QtCodeFileList.h +++ b/src/app/qt/element/QtCodeFileList.h @@ -21,7 +21,7 @@ public: virtual ~QtCodeFileList(); void addCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds diff --git a/src/app/qt/element/QtCodeSnippet.cpp b/src/app/qt/element/QtCodeSnippet.cpp index d2b2b1bd..44b649fc 100644 --- a/src/app/qt/element/QtCodeSnippet.cpp +++ b/src/app/qt/element/QtCodeSnippet.cpp @@ -35,7 +35,7 @@ void QtCodeSnippet::LineNumberArea::paintEvent(QPaintEvent *event) QtCodeSnippet::QtCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds, @@ -133,7 +133,7 @@ void QtCodeSnippet::lineNumberAreaPaintEvent(QPaintEvent *event) int QtCodeSnippet::lineNumberDigits() const { int digits = 1; - int max = qMax(1, m_startLineNumber + blockCount()); + int max = qMax(1, int(m_startLineNumber) + blockCount()); while (max >= 10) { @@ -272,7 +272,7 @@ void QtCodeSnippet::createAnnotations(const TokenLocationFile& locationFile) } Annotation annotation; - if (location->isStartTokenLocation()) + if (location->isStartTokenLocation() && location->getLineNumber() >= m_startLineNumber) { annotation.start = toTextEditPosition(location->getLineNumber(), location->getColumnNumber() - 1); } diff --git a/src/app/qt/element/QtCodeSnippet.h b/src/app/qt/element/QtCodeSnippet.h index 92abef6b..8cf683d9 100644 --- a/src/app/qt/element/QtCodeSnippet.h +++ b/src/app/qt/element/QtCodeSnippet.h @@ -36,7 +36,7 @@ public: }; QtCodeSnippet( - int startLineNumber, + uint startLineNumber, const std::string& code, const TokenLocationFile& locationFile, const std::vector& activeTokenIds, @@ -90,7 +90,7 @@ private: QPushButton* m_maximizeButton; bool m_showMaximizeButton; - const int m_startLineNumber; + const uint m_startLineNumber; const std::string m_filePath; std::vector m_activeTokenIds; diff --git a/src/lib/component/view/CodeView.h b/src/lib/component/view/CodeView.h index b0f83a73..4d00d090 100644 --- a/src/lib/component/view/CodeView.h +++ b/src/lib/component/view/CodeView.h @@ -14,8 +14,8 @@ public: { CodeSnippetParams(); - int startLineNumber; - int endLineNumber; + uint startLineNumber; + uint endLineNumber; uint lineCount; std::string code; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 7051c968..da22b247 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -501,7 +501,9 @@ TokenLocationFile Storage::getTokenLocationsForLinesInFile( return ret; } - for (uint i = firstLineNumber; i <= lastLineNumber; i++) + uint endLineNumber = locationFile->getTokenLocationLines().rbegin()->first; + + for (uint i = firstLineNumber; i <= endLineNumber; i++) { TokenLocationLine* locationLine = locationFile->findTokenLocationLineByNumber(i); if (!locationLine) @@ -509,12 +511,29 @@ TokenLocationFile Storage::getTokenLocationsForLinesInFile( continue; } - locationLine->forEachTokenLocation( - [&](TokenLocation* tokenLocation) -> void - { - ret.addTokenLocationAsPlainCopy(tokenLocation); - } - ); + if (locationLine->getLineNumber() <= lastLineNumber) + { + locationLine->forEachTokenLocation( + [&](TokenLocation* tokenLocation) -> void + { + ret.addTokenLocationAsPlainCopy(tokenLocation); + } + ); + } + else + { + // Save start locations of TokenLocations that span accross the line range. + locationLine->forEachTokenLocation( + [&](TokenLocation* tokenLocation) -> void + { + if (tokenLocation->isEndTokenLocation() && + tokenLocation->getStartTokenLocation()->getLineNumber() < firstLineNumber) + { + ret.addTokenLocationAsPlainCopy(tokenLocation->getStartTokenLocation()); + } + } + ); + } } return ret;