logic: Refactored Code View to process all contents in one update
* Use unified showCodeSnippets method for setting file information on CodeView * Made async initial file and snippet expansion synced * Add ScrollParams API to CodeView * Regard scope size when scrolling to definition * Only use QtThreadedLambdaFunctor in QtCodeView now
This commit is contained in:
@@ -357,7 +357,6 @@ add_files(
|
||||
utility/messaging/type/MessageClearLogView.h
|
||||
utility/messaging/type/MessageClearStatusView.h
|
||||
utility/messaging/type/MessageCodeReference.h
|
||||
utility/messaging/type/MessageCodeViewExpandedInitialFiles.h
|
||||
utility/messaging/type/MessageColorSchemeTest.h
|
||||
utility/messaging/type/MessageCreateBookmark.h
|
||||
utility/messaging/type/MessageCreateBookmarkCategory.h
|
||||
@@ -424,7 +423,7 @@ add_files(
|
||||
utility/messaging/MessageListenerBase.h
|
||||
utility/messaging/MessageQueue.cpp
|
||||
utility/messaging/MessageQueue.h
|
||||
|
||||
|
||||
utility/migration/Migration.h
|
||||
utility/migration/Migrator.h
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ void ActivationController::handleMessage(MessageActivateFile* message)
|
||||
|
||||
if (message->line > 0)
|
||||
{
|
||||
MessageScrollToLine(message->filePath, message->line, true).dispatch();
|
||||
MessageScrollToLine(message->filePath, message->line).dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
|
||||
CodeController::CodeController(StorageAccess* storageAccess)
|
||||
: m_storageAccess(storageAccess)
|
||||
, m_scrollToDefinition(false)
|
||||
, m_scrollToValue(-1)
|
||||
, m_scrollToLine(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -94,10 +91,10 @@ void CodeController::handleMessage(MessageActivateAll* message)
|
||||
|
||||
statsSnippet.code = ss.str();
|
||||
|
||||
CodeView* view = getView();
|
||||
view->showCodeSnippets(std::vector<CodeSnippetParams>(1, statsSnippet), std::vector<Id>(), true);
|
||||
|
||||
showContents(message);
|
||||
CodeView::CodeParams params;
|
||||
params.clearSnippets = true;
|
||||
params.showContents = !message->isReplayed();
|
||||
getView()->showCodeSnippets(std::vector<CodeSnippetParams>(1, statsSnippet), params);
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageActivateLocalSymbols* message)
|
||||
@@ -112,47 +109,47 @@ void CodeController::handleMessage(MessageActivateTokens* message)
|
||||
|
||||
CodeView* view = getView();
|
||||
|
||||
std::vector<Id> activeTokenIds = message->tokenIds;
|
||||
if (!activeTokenIds.size())
|
||||
CodeView::CodeParams params;
|
||||
params.activeTokenIds = message->tokenIds;
|
||||
if (!params.activeTokenIds.size())
|
||||
{
|
||||
view->clear();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!message->keepContent())
|
||||
{
|
||||
view->clearCodeSnippets();
|
||||
}
|
||||
params.clearSnippets = !message->keepContent();
|
||||
params.showContents = !message->isReplayed();
|
||||
|
||||
Id declarationId = 0; // 0 means that no token is found.
|
||||
if (!message->isAggregation)
|
||||
{
|
||||
activeTokenIds = m_storageAccess->getActiveTokenIdsForId(activeTokenIds[0], &declarationId);
|
||||
params.activeTokenIds = m_storageAccess->getActiveTokenIdsForId(params.activeTokenIds[0], &declarationId);
|
||||
}
|
||||
|
||||
if (message->isEdge)
|
||||
{
|
||||
std::shared_ptr<SourceLocationCollection> collection = m_storageAccess->getSourceLocationsForTokenIds(activeTokenIds);
|
||||
view->showActiveSnippet(activeTokenIds, collection, message->isLast());
|
||||
std::shared_ptr<SourceLocationCollection> collection =
|
||||
m_storageAccess->getSourceLocationsForTokenIds(params.activeTokenIds);
|
||||
view->showActiveSnippet(params.activeTokenIds, collection, message->isLast());
|
||||
return;
|
||||
}
|
||||
else if (message->keepContent())
|
||||
|
||||
if (message->keepContent())
|
||||
{
|
||||
view->showActiveTokenIds(activeTokenIds);
|
||||
if (m_scrollToDefinition)
|
||||
{
|
||||
getView()->scrollToDefinition(true);
|
||||
m_scrollToDefinition = false;
|
||||
}
|
||||
view->showActiveTokenIds(params.activeTokenIds);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_collection = m_storageAccess->getSourceLocationsForTokenIds(activeTokenIds);
|
||||
view->showCodeSnippets(
|
||||
getSnippetsForActiveSourceLocations(m_collection.get(), declarationId),
|
||||
activeTokenIds,
|
||||
!message->isReplayed() || message->isReplayCleared()
|
||||
);
|
||||
m_scrollToDefinition = !message->isReplayed() || message->isReplayCleared();
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
scrollParams.ignoreActiveReference = true;
|
||||
view->scrollTo(scrollParams);
|
||||
|
||||
m_collection = m_storageAccess->getSourceLocationsForTokenIds(params.activeTokenIds);
|
||||
|
||||
std::vector<CodeSnippetParams> snippets = getSnippetsForActiveSourceLocations(m_collection.get(), declarationId);
|
||||
expandVisibleSnippets(&snippets);
|
||||
|
||||
view->showCodeSnippets(snippets, params);
|
||||
|
||||
size_t fileCount = m_collection->getSourceLocationFileCount();
|
||||
size_t referenceCount = m_collection->getSourceLocationCount();
|
||||
@@ -177,27 +174,23 @@ void CodeController::handleMessage(MessageActivateTokens* message)
|
||||
|
||||
MessageStatus(ss.str()).dispatch();
|
||||
}
|
||||
|
||||
showContents(message);
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageActivateTrailEdge* message)
|
||||
{
|
||||
TRACE("trail edge activate");
|
||||
|
||||
CodeView* view = getView();
|
||||
view->clearCodeSnippets();
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
getView()->scrollTo(scrollParams);
|
||||
|
||||
std::vector<Id> activeTokenIds = { message->tokenId };
|
||||
m_collection = m_storageAccess->getSourceLocationsForTokenIds(activeTokenIds);
|
||||
CodeView::CodeParams params;
|
||||
params.clearSnippets = true;
|
||||
params.showContents = !message->isReplayed();
|
||||
params.activeTokenIds.push_back(message->tokenId);
|
||||
|
||||
view->showCodeSnippets(
|
||||
getSnippetsForActiveSourceLocations(m_collection.get(), 0),
|
||||
activeTokenIds,
|
||||
!message->isReplayed() || message->isReplayCleared()
|
||||
);
|
||||
m_collection = m_storageAccess->getSourceLocationsForTokenIds(params.activeTokenIds);
|
||||
|
||||
showContents(message);
|
||||
getView()->showCodeSnippets(getSnippetsForActiveSourceLocations(m_collection.get(), 0), params);
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageChangeFileView* message)
|
||||
@@ -212,87 +205,38 @@ void CodeController::handleMessage(MessageChangeFileView* message)
|
||||
CodeView* view = getView();
|
||||
bool inListMode = view->isInListMode();
|
||||
|
||||
MessageChangeFileView::FileState state = message->state;
|
||||
if (state == MessageChangeFileView::FILE_DEFAULT_FOR_MODE)
|
||||
{
|
||||
state = inListMode ? MessageChangeFileView::FILE_SNIPPETS : MessageChangeFileView::FILE_MAXIMIZED;
|
||||
}
|
||||
|
||||
switch (state)
|
||||
CodeView::FileState state;
|
||||
switch (message->state)
|
||||
{
|
||||
case MessageChangeFileView::FILE_MINIMIZED:
|
||||
view->setFileState(message->filePath, CodeView::FILE_MINIMIZED);
|
||||
state = CodeView::FILE_MINIMIZED;
|
||||
break;
|
||||
|
||||
case MessageChangeFileView::FILE_SNIPPETS:
|
||||
if (message->needsData && inListMode)
|
||||
{
|
||||
std::shared_ptr<SourceLocationFile> file = m_collection->getSourceLocationFileByPath(message->filePath);
|
||||
if (!file)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (message->showErrors)
|
||||
{
|
||||
file->setIsWhole(false);
|
||||
}
|
||||
|
||||
view->addCodeSnippets(getSnippetsForFile(file, !message->showErrors), false);
|
||||
}
|
||||
view->setFileState(message->filePath, CodeView::FILE_SNIPPETS);
|
||||
state = CodeView::FILE_SNIPPETS;
|
||||
break;
|
||||
|
||||
case MessageChangeFileView::FILE_MAXIMIZED:
|
||||
if (message->needsData)
|
||||
{
|
||||
CodeSnippetParams params;
|
||||
params.startLineNumber = 1;
|
||||
params.refCount = -1;
|
||||
|
||||
std::shared_ptr<TextAccess> textAccess = m_storageAccess->getFileContent(message->filePath);
|
||||
params.code = textAccess->getText();
|
||||
|
||||
params.modificationTime = m_storageAccess->getFileInfoForFilePath(message->filePath).lastWriteTime;
|
||||
|
||||
if (message->showErrors)
|
||||
{
|
||||
params.locationFile = m_collection->getSourceLocationFileByPath(message->filePath);
|
||||
if (!params.locationFile)
|
||||
{
|
||||
return;
|
||||
}
|
||||
params.locationFile->setIsWhole(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::shared_ptr<SourceLocationFile> file =
|
||||
m_storageAccess->getSourceLocationsForFile(message->filePath);
|
||||
|
||||
SourceLocationFile* activeLocations = m_collection->getSourceLocationFileByPath(message->filePath).get();
|
||||
if (activeLocations)
|
||||
{
|
||||
activeLocations->forEachSourceLocation(
|
||||
[&file](SourceLocation* location)
|
||||
{
|
||||
file->addSourceLocationCopy(location);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
params.locationFile = file;
|
||||
}
|
||||
|
||||
getView()->addCodeSnippets(std::vector<CodeSnippetParams>(1, params), false);
|
||||
}
|
||||
|
||||
view->setFileState(message->filePath, CodeView::FILE_MAXIMIZED);
|
||||
state = CodeView::FILE_MAXIMIZED;
|
||||
break;
|
||||
default:
|
||||
|
||||
case MessageChangeFileView::FILE_DEFAULT_FOR_MODE:
|
||||
state = inListMode ? CodeView::FILE_SNIPPETS : CodeView::FILE_MAXIMIZED;
|
||||
break;
|
||||
}
|
||||
|
||||
showContents(message);
|
||||
if (message->needsData)
|
||||
{
|
||||
CodeView::CodeParams params;
|
||||
view->showCodeSnippets(getSnippetsForFileWithState(message->filePath, state, !message->showErrors), params);
|
||||
}
|
||||
|
||||
view->setFileState(message->filePath, state);
|
||||
|
||||
if (!message->isReplayed())
|
||||
{
|
||||
view->showContents();
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageClearErrorCount* message)
|
||||
@@ -307,16 +251,16 @@ void CodeController::handleMessage(MessageDeactivateEdge* message)
|
||||
{
|
||||
if (message->scrollToDefinition)
|
||||
{
|
||||
m_scrollToDefinition = true;
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
scrollParams.animated = true;
|
||||
scrollParams.ignoreActiveReference = true;
|
||||
getView()->scrollTo(scrollParams);
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageFlushUpdates* message)
|
||||
{
|
||||
MessageCodeViewExpandedInitialFiles* msgPtr = nullptr;
|
||||
handleMessage(msgPtr);
|
||||
|
||||
showContents(message);
|
||||
getView()->showContents();
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageFocusIn* message)
|
||||
@@ -329,54 +273,28 @@ void CodeController::handleMessage(MessageFocusOut* message)
|
||||
getView()->defocusTokenIds();
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageCodeViewExpandedInitialFiles* message)
|
||||
{
|
||||
if (m_scrollToDefinition || (message && message->scrollToDefinition))
|
||||
{
|
||||
getView()->scrollToDefinition(false);
|
||||
m_scrollToDefinition = false;
|
||||
}
|
||||
|
||||
if (m_scrollToValue != -1)
|
||||
{
|
||||
getView()->scrollToValue(m_scrollToValue, m_scrollInListMode);
|
||||
m_scrollToValue = -1;
|
||||
}
|
||||
|
||||
if (m_scrollToLine)
|
||||
{
|
||||
getView()->scrollToLine(m_scrollToFilePath, m_scrollToLine);
|
||||
m_scrollToLine = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageScrollToLine* message)
|
||||
{
|
||||
m_scrollToFilePath = message->filePath;
|
||||
m_scrollToLine = message->line;
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_LINE);
|
||||
scrollParams.filePath = message->filePath;
|
||||
scrollParams.line = message->line;
|
||||
getView()->scrollTo(scrollParams);
|
||||
|
||||
if (message->isModified)
|
||||
{
|
||||
MessageStatus(
|
||||
"Showing source location: " + message->filePath.str()
|
||||
+ " : " + std::to_string(message->line) + ". The file was modified, please refresh.",
|
||||
true
|
||||
).dispatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageStatus(
|
||||
"Showing source location: " + message->filePath.str() + " : " + std::to_string(message->line)
|
||||
).dispatch();
|
||||
}
|
||||
MessageStatus(
|
||||
"Showing source location: " + message->filePath.str()
|
||||
+ " : " + std::to_string(message->line) + ". The file was modified, please refresh.",
|
||||
true
|
||||
).dispatch();
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageScrollCode* message)
|
||||
{
|
||||
if (message->isReplayed())
|
||||
{
|
||||
m_scrollToValue = message->value;
|
||||
m_scrollInListMode = message->inListMode;
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_VALUE);
|
||||
scrollParams.value = message->value;
|
||||
scrollParams.inListMode = message->inListMode;
|
||||
getView()->scrollTo(scrollParams);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,23 +305,28 @@ void CodeController::handleMessage(MessageShowErrors* message)
|
||||
CodeView* view = getView();
|
||||
if (!view->showsErrors() || !message->errorId)
|
||||
{
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
view->scrollTo(scrollParams);
|
||||
|
||||
std::vector<ErrorInfo> errors;
|
||||
m_collection = m_storageAccess->getErrorSourceLocationsLimited(&errors);
|
||||
std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection);
|
||||
|
||||
std::sort(snippets.begin(), snippets.end(), CodeSnippetParams::sortById);
|
||||
|
||||
view->clear();
|
||||
view->setErrorInfos(errors);
|
||||
view->showCodeSnippets(
|
||||
snippets, std::vector<Id>(), !message->errorId && (!message->isReplayed() || message->isReplayCleared()));
|
||||
expandVisibleSnippets(&snippets);
|
||||
|
||||
showContents(message);
|
||||
CodeView::CodeParams params;
|
||||
params.clearSnippets = true;
|
||||
params.errorInfos = errors;
|
||||
params.showContents = !message->isReplayed();
|
||||
|
||||
view->showCodeSnippets(snippets, params);
|
||||
}
|
||||
|
||||
if (message->errorId)
|
||||
{
|
||||
view->showActiveSnippet(std::vector<Id>(1, message->errorId), m_collection, true);
|
||||
view->showActiveSnippet(std::vector<Id>(1, message->errorId), m_collection, message->isLast());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -411,14 +334,18 @@ void CodeController::handleMessage(MessageSearchFullText* message)
|
||||
{
|
||||
TRACE("code fulltext");
|
||||
|
||||
CodeView* view = getView();
|
||||
view->clear();
|
||||
|
||||
m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive);
|
||||
view->showCodeSnippets(
|
||||
getSnippetsForCollection(m_collection, true), std::vector<Id>(), !message->isReplayed() || message->isReplayCleared());
|
||||
|
||||
showContents(message);
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
getView()->scrollTo(scrollParams);
|
||||
|
||||
std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection, true);
|
||||
expandVisibleSnippets(&snippets);
|
||||
|
||||
CodeView::CodeParams params;
|
||||
params.clearSnippets = true;
|
||||
params.showContents = !message->isReplayed();
|
||||
getView()->showCodeSnippets(snippets, params);
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageShowScope* message)
|
||||
@@ -443,32 +370,23 @@ void CodeController::handleMessage(MessageShowScope* message)
|
||||
return;
|
||||
}
|
||||
|
||||
snippets[0].insertSnippet = true;
|
||||
|
||||
if (message->showErrors)
|
||||
{
|
||||
snippets[0].locationFile = m_collection->getSourceLocationFileByPath(snippets[0].locationFile->getFilePath());
|
||||
}
|
||||
else
|
||||
{
|
||||
SourceLocationFile* activeLocations =
|
||||
m_collection->getSourceLocationFileByPath(snippets[0].locationFile->getFilePath()).get();
|
||||
if (activeLocations)
|
||||
{
|
||||
std::shared_ptr<SourceLocationFile> file = snippets[0].locationFile;
|
||||
activeLocations->forEachSourceLocation(
|
||||
[&file](SourceLocation* location)
|
||||
{
|
||||
file->addSourceLocationCopy(location);
|
||||
}
|
||||
);
|
||||
}
|
||||
addActiveSourceLocations(snippets[0].locationFile);
|
||||
}
|
||||
|
||||
getView()->addCodeSnippets(snippets, true);
|
||||
|
||||
showContents(message);
|
||||
CodeView::CodeParams params;
|
||||
params.showContents = !message->isReplayed();
|
||||
getView()->showCodeSnippets(snippets, params);
|
||||
}
|
||||
|
||||
CodeView* CodeController::getView()
|
||||
CodeView* CodeController::getView() const
|
||||
{
|
||||
return Controller::getView<CodeView>();
|
||||
}
|
||||
@@ -480,14 +398,103 @@ void CodeController::clear()
|
||||
m_collection.reset();
|
||||
}
|
||||
|
||||
void CodeController::showContents(MessageBase* message)
|
||||
void CodeController::expandVisibleSnippets(std::vector<CodeSnippetParams>* snippets) const
|
||||
{
|
||||
if (!message->isReplayed())
|
||||
bool inListMode = getView()->isInListMode();
|
||||
|
||||
size_t filesToExpand = inListMode ? std::min(int(snippets->size()), 3) : 1;
|
||||
CodeView::FileState state = inListMode ? CodeView::FILE_SNIPPETS : CodeView::FILE_MAXIMIZED;
|
||||
|
||||
for (size_t i = 0; i < filesToExpand; i++)
|
||||
{
|
||||
getView()->showContents();
|
||||
CodeSnippetParams& oldSnippet = snippets->at(i);
|
||||
|
||||
if (!inListMode && getView()->hasSingleFileCached(oldSnippet.locationFile->getFilePath()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
std::vector<CodeSnippetParams> newSnippets =
|
||||
getSnippetsForFileWithState(oldSnippet.locationFile->getFilePath(), state, true);
|
||||
if (!newSnippets.size())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (CodeSnippetParams newSnippet : newSnippets)
|
||||
{
|
||||
newSnippet.isDeclaration = oldSnippet.isDeclaration;
|
||||
newSnippet.isDefinition = oldSnippet.isDefinition;
|
||||
|
||||
newSnippet.isCollapsed = false;
|
||||
}
|
||||
|
||||
snippets->insert(snippets->end(), newSnippets.begin(), newSnippets.end());
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<CodeSnippetParams> CodeController::getSnippetsForFileWithState(
|
||||
const FilePath& filePath, CodeView::FileState state, bool addSourceLocations) const
|
||||
{
|
||||
TRACE();
|
||||
|
||||
std::vector<CodeSnippetParams> snippets;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case CodeView::FILE_SNIPPETS:
|
||||
{
|
||||
std::shared_ptr<SourceLocationFile> file = m_collection->getSourceLocationFileByPath(filePath);
|
||||
if (!file)
|
||||
{
|
||||
return snippets;
|
||||
}
|
||||
|
||||
if (!addSourceLocations)
|
||||
{
|
||||
file->setIsWhole(false);
|
||||
}
|
||||
|
||||
snippets = getSnippetsForFile(file, addSourceLocations);
|
||||
}
|
||||
break;
|
||||
|
||||
case CodeView::FILE_MAXIMIZED:
|
||||
{
|
||||
CodeSnippetParams params;
|
||||
params.startLineNumber = 1;
|
||||
params.refCount = -1;
|
||||
|
||||
std::shared_ptr<TextAccess> textAccess = m_storageAccess->getFileContent(filePath);
|
||||
params.code = textAccess->getText();
|
||||
|
||||
params.modificationTime = m_storageAccess->getFileInfoForFilePath(filePath).lastWriteTime;
|
||||
|
||||
if (!addSourceLocations)
|
||||
{
|
||||
params.locationFile = m_collection->getSourceLocationFileByPath(filePath);
|
||||
if (!params.locationFile)
|
||||
{
|
||||
break;
|
||||
}
|
||||
params.locationFile->setIsWhole(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
params.locationFile = m_storageAccess->getSourceLocationsForFile(filePath);
|
||||
addActiveSourceLocations(params.locationFile);
|
||||
}
|
||||
|
||||
snippets.push_back(params);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return snippets;
|
||||
}
|
||||
|
||||
std::vector<CodeSnippetParams> CodeController::getSnippetsForActiveSourceLocations(
|
||||
const SourceLocationCollection* collection, Id declarationId
|
||||
) const {
|
||||
@@ -857,3 +864,17 @@ void CodeController::addModificationTimes(std::vector<CodeSnippetParams>& snippe
|
||||
snippet.modificationTime = fileInfoMap[snippet.locationFile->getFilePath()].lastWriteTime;
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::addActiveSourceLocations(std::shared_ptr<SourceLocationFile> locationFile) const
|
||||
{
|
||||
SourceLocationFile* activeLocations = m_collection->getSourceLocationFileByPath(locationFile->getFilePath()).get();
|
||||
if (activeLocations)
|
||||
{
|
||||
activeLocations->forEachSourceLocation(
|
||||
[&locationFile](SourceLocation* location)
|
||||
{
|
||||
locationFile->addSourceLocationCopy(location);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "utility/messaging/type/MessageActivateTrailEdge.h"
|
||||
#include "utility/messaging/type/MessageChangeFileView.h"
|
||||
#include "utility/messaging/type/MessageClearErrorCount.h"
|
||||
#include "utility/messaging/type/MessageCodeViewExpandedInitialFiles.h"
|
||||
#include "utility/messaging/type/MessageDeactivateEdge.h"
|
||||
#include "utility/messaging/type/MessageFlushUpdates.h"
|
||||
#include "utility/messaging/type/MessageFocusIn.h"
|
||||
@@ -41,7 +40,6 @@ class CodeController
|
||||
, public MessageListener<MessageActivateTrailEdge>
|
||||
, public MessageListener<MessageChangeFileView>
|
||||
, public MessageListener<MessageClearErrorCount>
|
||||
, public MessageListener<MessageCodeViewExpandedInitialFiles>
|
||||
, public MessageListener<MessageDeactivateEdge>
|
||||
, public MessageListener<MessageFlushUpdates>
|
||||
, public MessageListener<MessageFocusIn>
|
||||
@@ -65,7 +63,6 @@ private:
|
||||
virtual void handleMessage(MessageActivateTrailEdge* message);
|
||||
virtual void handleMessage(MessageChangeFileView* message);
|
||||
virtual void handleMessage(MessageClearErrorCount* message);
|
||||
virtual void handleMessage(MessageCodeViewExpandedInitialFiles* message);
|
||||
virtual void handleMessage(MessageDeactivateEdge* message);
|
||||
virtual void handleMessage(MessageFlushUpdates* message);
|
||||
virtual void handleMessage(MessageFocusIn* message);
|
||||
@@ -76,11 +73,14 @@ private:
|
||||
virtual void handleMessage(MessageShowErrors* message);
|
||||
virtual void handleMessage(MessageShowScope* message);
|
||||
|
||||
CodeView* getView();
|
||||
CodeView* getView() const;
|
||||
|
||||
virtual void clear();
|
||||
|
||||
void showContents(MessageBase* message);
|
||||
void expandVisibleSnippets(std::vector<CodeSnippetParams>* snippets) const;
|
||||
|
||||
std::vector<CodeSnippetParams> getSnippetsForFileWithState(
|
||||
const FilePath& filePath, CodeView::FileState state, bool addSourceLocations) const;
|
||||
|
||||
std::vector<CodeSnippetParams> getSnippetsForActiveSourceLocations(
|
||||
const SourceLocationCollection* collection, Id declarationId) const;
|
||||
@@ -98,15 +98,10 @@ private:
|
||||
std::vector<std::string> getProjectDescription(SourceLocationFile* locationFile) const;
|
||||
|
||||
void addModificationTimes(std::vector<CodeSnippetParams>& snippets) const;
|
||||
void addActiveSourceLocations(std::shared_ptr<SourceLocationFile> locationFile) const;
|
||||
|
||||
StorageAccess* m_storageAccess;
|
||||
mutable std::shared_ptr<SourceLocationCollection> m_collection;
|
||||
|
||||
bool m_scrollToDefinition;
|
||||
int m_scrollToValue;
|
||||
bool m_scrollInListMode;
|
||||
FilePath m_scrollToFilePath;
|
||||
size_t m_scrollToLine;
|
||||
};
|
||||
|
||||
#endif // CODE_CONTROLLER_H
|
||||
|
||||
@@ -369,7 +369,7 @@ void GraphController::handleMessage(MessageShowErrors* message)
|
||||
|
||||
void GraphController::handleMessage(MessageShowReference* message)
|
||||
{
|
||||
if (!message->tokenId || !message->animated)
|
||||
if (!message->tokenId || !message->fromUser)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -152,7 +152,6 @@ void UndoRedoController::handleMessage(MessageFinishedParsing* message)
|
||||
msg->isFromSearch = false;
|
||||
}
|
||||
|
||||
command.message->setIsReplayCleared(true);
|
||||
newList.insert(newList.end(), command);
|
||||
}
|
||||
}
|
||||
@@ -469,7 +468,6 @@ void UndoRedoController::replayCommand(std::list<Command>::iterator it)
|
||||
}
|
||||
|
||||
m->dispatch();
|
||||
m->setIsReplayCleared(false);
|
||||
}
|
||||
|
||||
void UndoRedoController::processCommand(Command command)
|
||||
|
||||
@@ -23,21 +23,60 @@ public:
|
||||
FILE_MAXIMIZED
|
||||
};
|
||||
|
||||
struct CodeParams
|
||||
{
|
||||
CodeParams()
|
||||
: clearSnippets(false)
|
||||
, showContents(false)
|
||||
{}
|
||||
|
||||
bool clearSnippets;
|
||||
bool showContents;
|
||||
std::vector<Id> activeTokenIds;
|
||||
std::vector<ErrorInfo> errorInfos;
|
||||
};
|
||||
|
||||
struct ScrollParams
|
||||
{
|
||||
enum ScrollType
|
||||
{
|
||||
SCROLL_NONE,
|
||||
SCROLL_TO_DEFINITION,
|
||||
SCROLL_TO_LINE,
|
||||
SCROLL_TO_VALUE
|
||||
} type;
|
||||
|
||||
ScrollParams(ScrollType type = SCROLL_NONE)
|
||||
: type(type)
|
||||
, line(0)
|
||||
, value(0)
|
||||
, animated(false)
|
||||
, ignoreActiveReference(false)
|
||||
, inListMode(false)
|
||||
{}
|
||||
|
||||
FilePath filePath;
|
||||
size_t line;
|
||||
|
||||
size_t value;
|
||||
|
||||
bool animated;
|
||||
bool ignoreActiveReference;
|
||||
bool inListMode;
|
||||
};
|
||||
|
||||
CodeView(ViewLayout* viewLayout);
|
||||
virtual ~CodeView();
|
||||
|
||||
virtual std::string getName() const;
|
||||
|
||||
virtual void clear() = 0;
|
||||
virtual void clearCodeSnippets() = 0;
|
||||
|
||||
virtual void setErrorInfos(const std::vector<ErrorInfo>& errorInfos) = 0;
|
||||
virtual void showCodeSnippets(const std::vector<CodeSnippetParams>& snippets, const CodeParams params) = 0;
|
||||
virtual void scrollTo(const ScrollParams params) = 0;
|
||||
|
||||
virtual bool showsErrors() const = 0;
|
||||
|
||||
virtual void showCodeSnippets(
|
||||
const std::vector<CodeSnippetParams>& snippets, const std::vector<Id>& activeTokenIds, bool setupFiles) = 0;
|
||||
virtual void addCodeSnippets(const std::vector<CodeSnippetParams>& snippets, bool insert) = 0;
|
||||
|
||||
virtual void setFileState(const FilePath filePath, FileState state) = 0;
|
||||
|
||||
virtual void showActiveSnippet(
|
||||
@@ -50,11 +89,8 @@ public:
|
||||
|
||||
virtual void showContents() = 0;
|
||||
|
||||
virtual void scrollToValue(int value, bool inListMode) = 0;
|
||||
virtual void scrollToLine(const FilePath filePath, unsigned int line) = 0;
|
||||
virtual void scrollToDefinition(bool ignoreActiveReference) = 0;
|
||||
|
||||
virtual bool isInListMode() const = 0;
|
||||
virtual bool hasSingleFileCached(const FilePath& filePath) const = 0;
|
||||
|
||||
private:
|
||||
CodeController* getController();
|
||||
|
||||
@@ -7,11 +7,11 @@ CodeSnippetParams::CodeSnippetParams()
|
||||
, endLineNumber(0)
|
||||
, titleId(0)
|
||||
, footerId(0)
|
||||
, locationFile()
|
||||
, refCount(0)
|
||||
, isCollapsed(false)
|
||||
, isDeclaration(false)
|
||||
, isDefinition(false)
|
||||
, insertSnippet(false)
|
||||
, reduced(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ struct CodeSnippetParams
|
||||
bool isDeclaration;
|
||||
bool isDefinition;
|
||||
|
||||
bool insertSnippet;
|
||||
bool reduced;
|
||||
};
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ public:
|
||||
MessageBase()
|
||||
: m_isParallel(false)
|
||||
, m_isReplayed(false)
|
||||
, m_isReplayCleared(false)
|
||||
, m_sendAsTask(true)
|
||||
, m_keepContent(false)
|
||||
, m_isLast(true)
|
||||
@@ -55,16 +54,6 @@ public:
|
||||
m_isReplayed = isReplayed;
|
||||
}
|
||||
|
||||
bool isReplayCleared() const
|
||||
{
|
||||
return m_isReplayCleared;
|
||||
}
|
||||
|
||||
void setIsReplayCleared(bool isReplayCleared)
|
||||
{
|
||||
m_isReplayCleared = isReplayCleared;
|
||||
}
|
||||
|
||||
bool isLast() const
|
||||
{
|
||||
return m_isLast;
|
||||
@@ -107,9 +96,7 @@ public:
|
||||
|
||||
private:
|
||||
bool m_isParallel;
|
||||
|
||||
bool m_isReplayed;
|
||||
bool m_isReplayCleared;
|
||||
|
||||
bool m_sendAsTask;
|
||||
bool m_keepContent;
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#ifndef MESSAGE_CODE_VIEW_EXPANDED_INITIAL_FILES_H
|
||||
#define MESSAGE_CODE_VIEW_EXPANDED_INITIAL_FILES_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
|
||||
class MessageCodeViewExpandedInitialFiles
|
||||
: public Message<MessageCodeViewExpandedInitialFiles>
|
||||
{
|
||||
public:
|
||||
MessageCodeViewExpandedInitialFiles(bool scrollToDefinition)
|
||||
: scrollToDefinition(scrollToDefinition)
|
||||
{
|
||||
}
|
||||
|
||||
static const std::string getStaticType()
|
||||
{
|
||||
return "MessageCodeViewExpandedInitialFiles";
|
||||
}
|
||||
|
||||
bool scrollToDefinition;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_CODE_VIEW_EXPANDED_INITIAL_FILES_H
|
||||
@@ -1,17 +1,16 @@
|
||||
#ifndef MESSAGE_SCROLL_TO_LINE_h
|
||||
#define MESSAGE_SCROLL_TO_LINE_h
|
||||
#ifndef MESSAGE_SCROLL_TO_LINE_H
|
||||
#define MESSAGE_SCROLL_TO_LINE_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
#include "utility/file/FilePath.h"
|
||||
#include "utility/messaging/Message.h"
|
||||
|
||||
class MessageScrollToLine
|
||||
: public Message<MessageScrollToLine>
|
||||
{
|
||||
public:
|
||||
MessageScrollToLine(const FilePath& filePath, unsigned int line, bool isModified = false)
|
||||
MessageScrollToLine(const FilePath& filePath, size_t line)
|
||||
: filePath(filePath)
|
||||
, line(line)
|
||||
, isModified(isModified)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -21,8 +20,7 @@ public:
|
||||
}
|
||||
|
||||
const FilePath filePath;
|
||||
unsigned int line;
|
||||
bool isModified;
|
||||
size_t line;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_SCROLL_TO_LINE_h
|
||||
#endif // MESSAGE_SCROLL_TO_LINE_H
|
||||
|
||||
@@ -8,11 +8,11 @@ class MessageShowReference
|
||||
: public Message<MessageShowReference>
|
||||
{
|
||||
public:
|
||||
MessageShowReference(size_t refIndex, Id tokenId, Id locationId, bool animated)
|
||||
MessageShowReference(size_t refIndex, Id tokenId, Id locationId, bool fromUser)
|
||||
: refIndex(refIndex)
|
||||
, tokenId(tokenId)
|
||||
, locationId(locationId)
|
||||
, animated(animated)
|
||||
, fromUser(fromUser)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
const size_t refIndex;
|
||||
const Id tokenId;
|
||||
const Id locationId;
|
||||
const bool animated;
|
||||
const bool fromUser;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_SHOW_REFERENCE_H
|
||||
|
||||
Reference in New Issue
Block a user