logic: Codeview Snippet order
Sorting the Snippets in. the Codeview. Active Token first then declaration, filename and extension
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
#include "data/location/TokenLocationFile.h"
|
||||
#include "utility/text/TextAccess.h"
|
||||
|
||||
const uint CodeController::s_lineRadius = 2;
|
||||
|
||||
CodeController::CodeController(GraphAccess* graphAccess, LocationAccess* locationAccess)
|
||||
: m_graphAccess(graphAccess)
|
||||
, m_locationAccess(locationAccess)
|
||||
@@ -18,26 +20,29 @@ CodeController::~CodeController()
|
||||
{
|
||||
}
|
||||
|
||||
void CodeController::setActiveTokenIds(const std::vector<Id>& ids)
|
||||
void CodeController::setActiveTokenIds(const std::vector<Id>& ids, Id activeId, Id declarationId)
|
||||
{
|
||||
const uint lineRadius = 2;
|
||||
|
||||
getView()->clearCodeSnippets();
|
||||
getView()->setActiveTokenIds(ids);
|
||||
|
||||
std::vector<Id> locationIds = m_graphAccess->getLocationIdsForTokenIds(ids);
|
||||
|
||||
std::vector<CodeView::CodeSnippetParams> snippets;
|
||||
|
||||
TokenLocationCollection collection = m_locationAccess->getTokenLocationsForLocationIds(locationIds);
|
||||
|
||||
collection.forEachTokenLocationFile(
|
||||
[&](TokenLocationFile* file) -> void
|
||||
{
|
||||
const std::string filePath = file->getFilePath();
|
||||
std::shared_ptr<TextAccess> textAccess = TextAccess::createFromFile(filePath);
|
||||
|
||||
std::vector<std::pair<uint, uint>> ranges = getSnippetRangesForFile(file, lineRadius);
|
||||
std::vector<std::pair<uint, uint>> ranges = getSnippetRangesForFile(file, s_lineRadius);
|
||||
|
||||
for (const std::pair<uint, uint>& range: ranges)
|
||||
{
|
||||
unsigned int firstLineNumber = std::max<int>(1, range.first - lineRadius);
|
||||
unsigned int lastLineNumber = std::min<int>(textAccess->getLineCount(), range.second + lineRadius);
|
||||
unsigned int firstLineNumber = std::max<int>(1, range.first - s_lineRadius);
|
||||
unsigned int lastLineNumber = std::min<int>(textAccess->getLineCount(), range.second + s_lineRadius);
|
||||
|
||||
CodeView::CodeSnippetParams params;
|
||||
for (const std::string& line: textAccess->getLines(firstLineNumber, lastLineNumber))
|
||||
@@ -47,31 +52,52 @@ void CodeController::setActiveTokenIds(const std::vector<Id>& ids)
|
||||
|
||||
params.startLineNumber = firstLineNumber;
|
||||
params.locationFile =
|
||||
m_locationAccess->getTokenLocationsForLinesInFile(filePath, firstLineNumber, lastLineNumber);
|
||||
params.activeTokenIds = ids;
|
||||
m_locationAccess->getTokenLocationsForLinesInFile(filePath, firstLineNumber, lastLineNumber);
|
||||
params.locationFile.forEachTokenLocation(
|
||||
[&](TokenLocation* location)
|
||||
{
|
||||
if(location->getTokenId() == activeId && activeId != 0)
|
||||
{
|
||||
params.isActive = true;
|
||||
}
|
||||
if(location->getTokenId() == declarationId && declarationId != 0)
|
||||
{
|
||||
params.isDeclaration = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
getView()->addCodeSnippet(params);
|
||||
snippets.push_back(params);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
std::sort(snippets.begin(), snippets.end(), CodeView::CodeSnippetParams::sort);
|
||||
|
||||
for( CodeView::CodeSnippetParams p : snippets)
|
||||
{
|
||||
getView()->addCodeSnippet(p);
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageActivateToken* message)
|
||||
{
|
||||
std::vector<Id> activeTokenIds = m_graphAccess->getActiveTokenIdsForId(message->tokenId);
|
||||
setActiveTokenIds(activeTokenIds);
|
||||
Id declarationId;
|
||||
std::vector<Id> activeTokenIds = m_graphAccess->getActiveTokenIdsForId(message->tokenId, declarationId);
|
||||
setActiveTokenIds(activeTokenIds, message->tokenId, declarationId);
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageActivateTokens* message)
|
||||
{
|
||||
if (message->tokenIds.size() == 1)
|
||||
if (message->tokenIds.size () == 1)
|
||||
{
|
||||
std::vector<Id> activeTokenIds = m_graphAccess->getActiveTokenIdsForId(message->tokenIds[0]);
|
||||
setActiveTokenIds(activeTokenIds);
|
||||
Id declarationId;
|
||||
std::vector<Id> activeTokenIds = m_graphAccess->getActiveTokenIdsForId(message->tokenIds[0], declarationId);
|
||||
setActiveTokenIds(activeTokenIds, message->tokenIds[0], declarationId);
|
||||
}
|
||||
else
|
||||
{
|
||||
setActiveTokenIds(message->tokenIds);
|
||||
setActiveTokenIds(message->tokenIds, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +111,7 @@ void CodeController::handleMessage(MessageShowFile* message)
|
||||
CodeView::CodeSnippetParams params;
|
||||
params.startLineNumber = message->startLineNumber;
|
||||
params.endLineNumber = message->endLineNumber;
|
||||
params.activeTokenIds = message->activeTokenIds;
|
||||
getView()->setActiveTokenIds(message->activeTokenIds);
|
||||
|
||||
std::shared_ptr<TextAccess> textAccess = TextAccess::createFromFile(message->filePath);
|
||||
params.lineCount = textAccess->getLineCount();
|
||||
|
||||
Reference in New Issue
Block a user