ui: Added shortcuts for navigating to next and previous reference in code view
* Added new class QtCodeNavigator between QtCodeView and QtCodeFileList that handles active ids and navigation * Pass all files as initially collapsed to code view and decide in QtCodeNavigator which ones show content * Rewrote requesting of active snippet display to top down approach * Display other locations focused when active location changes * Show corresponding edges when navigating references
This commit is contained in:
@@ -128,13 +128,13 @@ add_files(
|
||||
|
||||
data/parser/cxx/TaskParseCxx.h
|
||||
data/parser/cxx/TaskParseWrapper.h
|
||||
|
||||
|
||||
data/parser/java/JavaEnvironment.cpp
|
||||
data/parser/java/JavaEnvironment.h
|
||||
data/parser/java/JavaEnvironmentFactory.cpp
|
||||
data/parser/java/JavaEnvironmentFactory.h
|
||||
data/parser/java/TaskParseJava.h
|
||||
|
||||
|
||||
data/parser/AccessKind.cpp
|
||||
data/parser/AccessKind.h
|
||||
data/parser/ParseLocation.cpp
|
||||
@@ -245,6 +245,7 @@ add_files(
|
||||
utility/messaging/type/MessageAutoRefreshChanged.h
|
||||
utility/messaging/type/MessageChangeFileView.h
|
||||
utility/messaging/type/MessageClearErrorCount.h
|
||||
utility/messaging/type/MessageCodeReference.h
|
||||
utility/messaging/type/MessageColorSchemeTest.h
|
||||
utility/messaging/type/MessageDeactivateEdge.h
|
||||
utility/messaging/type/MessageDispatchWhenLicenseValid.h
|
||||
@@ -272,6 +273,7 @@ add_files(
|
||||
utility/messaging/type/MessageSearchAutocomplete.h
|
||||
utility/messaging/type/MessageSearchFullText.h
|
||||
utility/messaging/type/MessageShowErrors.h
|
||||
utility/messaging/type/MessageShowReference.h
|
||||
utility/messaging/type/MessageShowScope.h
|
||||
utility/messaging/type/MessageShowStartScreen.h
|
||||
utility/messaging/type/MessageStatus.h
|
||||
|
||||
@@ -122,7 +122,8 @@ void CodeController::handleMessage(MessageActivateTokens* message)
|
||||
|
||||
if (message->isEdge)
|
||||
{
|
||||
view->showFirstActiveSnippet(activeTokenIds, message->isLast());
|
||||
std::shared_ptr<TokenLocationCollection> collection = m_storageAccess->getTokenLocationsForTokenIds(activeTokenIds);
|
||||
view->showActiveSnippet(activeTokenIds, collection, message->isLast());
|
||||
}
|
||||
else if (message->keepContent())
|
||||
{
|
||||
@@ -365,9 +366,6 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForActiveTokenLocation
|
||||
TRACE();
|
||||
|
||||
std::vector<CodeSnippetParams> snippets;
|
||||
size_t definitionFileCount = 0;
|
||||
size_t declarationFileCount = 0;
|
||||
|
||||
collection->forEachTokenLocationFile(
|
||||
[&](std::shared_ptr<TokenLocationFile> file) -> void
|
||||
{
|
||||
@@ -388,38 +386,15 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForActiveTokenLocation
|
||||
}
|
||||
);
|
||||
|
||||
if (collection->getTokenLocationFileCount() < 5 || file->isWholeCopy ||
|
||||
(isDefinitionFile && definitionFileCount < 3) ||
|
||||
(!isDefinitionFile && isDeclarationFile && declarationFileCount < 3))
|
||||
{
|
||||
std::vector<CodeSnippetParams> fileSnippets = getSnippetsForFile(file, true);
|
||||
CodeSnippetParams params;
|
||||
params.locationFile = file;
|
||||
params.refCount = file->getUnscopedStartTokenLocationCount();
|
||||
|
||||
for (CodeSnippetParams& snippet : fileSnippets)
|
||||
{
|
||||
snippet.isDeclaration = isDeclarationFile;
|
||||
snippet.isDefinition = isDefinitionFile;
|
||||
}
|
||||
params.isDeclaration = isDeclarationFile;
|
||||
params.isDefinition = isDefinitionFile;
|
||||
|
||||
utility::append(snippets, fileSnippets);
|
||||
}
|
||||
else
|
||||
{
|
||||
CodeSnippetParams params;
|
||||
params.locationFile = file;
|
||||
params.refCount = file->getUnscopedStartTokenLocationCount();
|
||||
|
||||
params.isCollapsed = true;
|
||||
snippets.push_back(params);
|
||||
}
|
||||
|
||||
if (isDefinitionFile)
|
||||
{
|
||||
definitionFileCount++;
|
||||
}
|
||||
else if (isDeclarationFile)
|
||||
{
|
||||
declarationFileCount++;
|
||||
}
|
||||
params.isCollapsed = true;
|
||||
snippets.push_back(params);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -439,20 +414,12 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForCollection(
|
||||
collection->forEachTokenLocationFile(
|
||||
[&](std::shared_ptr<TokenLocationFile> file) -> void
|
||||
{
|
||||
if (snippets.size() < 10)
|
||||
{
|
||||
std::vector<CodeSnippetParams> fileSnippets = getSnippetsForFile(file, addTokenLocations);
|
||||
snippets.insert(snippets.end(), fileSnippets.begin(), fileSnippets.end());
|
||||
}
|
||||
else
|
||||
{
|
||||
CodeSnippetParams params;
|
||||
params.locationFile = file;
|
||||
params.refCount = file->getUnscopedStartTokenLocationCount();
|
||||
CodeSnippetParams params;
|
||||
params.locationFile = file;
|
||||
params.refCount = file->getUnscopedStartTokenLocationCount();
|
||||
|
||||
params.isCollapsed = true;
|
||||
snippets.push_back(params);
|
||||
}
|
||||
params.isCollapsed = true;
|
||||
snippets.push_back(params);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -176,6 +176,18 @@ void GraphController::handleMessage(MessageShowErrors* message)
|
||||
clear();
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageShowReference* message)
|
||||
{
|
||||
if (!message->tokenId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_activeEdgeIds = std::vector<Id>(1, message->tokenId);
|
||||
setActiveAndVisibility(utility::concat(m_activeNodeIds, m_activeEdgeIds));
|
||||
buildGraph(message, false);
|
||||
}
|
||||
|
||||
GraphView* GraphController::getView() const
|
||||
{
|
||||
return Controller::getView<GraphView>();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "utility/messaging/type/MessageGraphNodeMove.h"
|
||||
#include "utility/messaging/type/MessageSearchFullText.h"
|
||||
#include "utility/messaging/type/MessageShowErrors.h"
|
||||
#include "utility/messaging/type/MessageShowReference.h"
|
||||
|
||||
#include "component/controller/Controller.h"
|
||||
#include "component/controller/helper/DummyEdge.h"
|
||||
@@ -41,6 +42,7 @@ class GraphController
|
||||
, public MessageListener<MessageGraphNodeMove>
|
||||
, public MessageListener<MessageSearchFullText>
|
||||
, public MessageListener<MessageShowErrors>
|
||||
, public MessageListener<MessageShowReference>
|
||||
{
|
||||
public:
|
||||
GraphController(StorageAccess* storageAccess);
|
||||
@@ -57,6 +59,7 @@ private:
|
||||
virtual void handleMessage(MessageGraphNodeMove* message);
|
||||
virtual void handleMessage(MessageSearchFullText* message);
|
||||
virtual void handleMessage(MessageShowErrors* message);
|
||||
virtual void handleMessage(MessageShowReference* message);
|
||||
|
||||
GraphView* getView() const;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "component/view/View.h"
|
||||
|
||||
class CodeController;
|
||||
class TokenLocationCollection;
|
||||
|
||||
class CodeView
|
||||
: public View
|
||||
@@ -29,7 +30,6 @@ public:
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual void setActiveTokenIds(const std::vector<Id>& activeTokenIds) = 0;
|
||||
virtual void setErrorInfos(const std::vector<ErrorInfo>& errorInfos) = 0;
|
||||
|
||||
virtual void showCodeSnippets(const std::vector<CodeSnippetParams>& snippets, const std::vector<Id>& activeTokenIds) = 0;
|
||||
@@ -38,7 +38,8 @@ public:
|
||||
|
||||
virtual void setFileState(const FilePath filePath, FileState state) = 0;
|
||||
|
||||
virtual void showFirstActiveSnippet(const std::vector<Id>& activeTokenIds, bool scrollTo) = 0;
|
||||
virtual void showActiveSnippet(
|
||||
const std::vector<Id>& activeTokenIds, std::shared_ptr<TokenLocationCollection> collection, bool scrollTo) = 0;
|
||||
virtual void showActiveTokenIds(const std::vector<Id>& activeTokenIds) = 0;
|
||||
virtual void showActiveLocalSymbolIds(const std::vector<Id>& activeLocalSymbolIds) = 0;
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ CodeSnippetParams::CodeSnippetParams()
|
||||
, footerId(0)
|
||||
, locationFile()
|
||||
, refCount(0)
|
||||
, isActive(false)
|
||||
, isCollapsed(false)
|
||||
, isDeclaration(false)
|
||||
, isDefinition(false)
|
||||
@@ -19,16 +18,6 @@ CodeSnippetParams::CodeSnippetParams()
|
||||
|
||||
bool CodeSnippetParams::sort(const CodeSnippetParams& a, const CodeSnippetParams& b)
|
||||
{
|
||||
// sort active snippet first
|
||||
if (a.isActive && !b.isActive)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (!a.isActive && b.isActive)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// sort definitions
|
||||
if (a.isDefinition && !b.isDefinition)
|
||||
{
|
||||
|
||||
@@ -30,7 +30,6 @@ struct CodeSnippetParams
|
||||
|
||||
int refCount;
|
||||
|
||||
bool isActive;
|
||||
bool isCollapsed;
|
||||
|
||||
bool isDeclaration;
|
||||
|
||||
@@ -480,8 +480,11 @@ std::shared_ptr<TokenLocationCollection> PersistentStorage::getFullTextSearchLoc
|
||||
|
||||
if ( addHit )
|
||||
{
|
||||
// Set first bit to 1 to avoid collisions
|
||||
Id locationId = ~(~size_t(0) >> 1) + collection->getTokenLocationCount();
|
||||
|
||||
collection->addTokenLocation(
|
||||
collection->getTokenLocationCount(),
|
||||
locationId,
|
||||
0,
|
||||
filepath,
|
||||
location.startLineNumber,
|
||||
@@ -1012,8 +1015,11 @@ std::shared_ptr<TokenLocationCollection> PersistentStorage::getErrorTokenLocatio
|
||||
const StorageError& error = storageErrors[i];
|
||||
if (error.fatal || error.indexed || showExternalNonFatalErrors)
|
||||
{
|
||||
// Set first bit to 1 to avoid collisions
|
||||
Id locationId = ~(~size_t(0) >> 1) + i;
|
||||
|
||||
errorCollection->addTokenLocation(
|
||||
i, i, error.filePath, error.lineNumber, error.columnNumber, error.lineNumber, error.columnNumber
|
||||
locationId, i, error.filePath, error.lineNumber, error.columnNumber, error.lineNumber, error.columnNumber
|
||||
)->setType(LOCATION_ERROR);
|
||||
errors->push_back(ErrorInfo(error.message, error.filePath, i, error.fatal));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
#ifndef MESSAGE_CODE_REFERENCE_H
|
||||
#define MESSAGE_CODE_REFERENCE_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
|
||||
class MessageCodeReference
|
||||
: public Message<MessageCodeReference>
|
||||
{
|
||||
public:
|
||||
enum ReferenceType
|
||||
{
|
||||
REFERENCE_PREVIOUS,
|
||||
REFERENCE_NEXT
|
||||
};
|
||||
|
||||
MessageCodeReference(ReferenceType type)
|
||||
: type(type)
|
||||
{
|
||||
}
|
||||
|
||||
static const std::string getStaticType()
|
||||
{
|
||||
return "MessageCodeReference";
|
||||
}
|
||||
|
||||
virtual void print(std::ostream& os) const
|
||||
{
|
||||
if (type == REFERENCE_PREVIOUS)
|
||||
{
|
||||
os << "previous";
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "next";
|
||||
}
|
||||
}
|
||||
|
||||
const ReferenceType type;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_CODE_REFERENCE_H
|
||||
@@ -2,9 +2,9 @@
|
||||
#define MESSAGE_REDO_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
class MessageRedo: public Message<MessageRedo>
|
||||
class MessageRedo
|
||||
: public Message<MessageRedo>
|
||||
{
|
||||
public:
|
||||
MessageRedo()
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef MESSAGE_SHOW_REFERENCE_H
|
||||
#define MESSAGE_SHOW_REFERENCE_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
class MessageShowReference
|
||||
: public Message<MessageShowReference>
|
||||
{
|
||||
public:
|
||||
MessageShowReference(size_t refIndex, Id tokenId, Id locationId)
|
||||
: refIndex(refIndex)
|
||||
, tokenId(tokenId)
|
||||
, locationId(locationId)
|
||||
{
|
||||
}
|
||||
|
||||
static const std::string getStaticType()
|
||||
{
|
||||
return "MessageShowReference";
|
||||
}
|
||||
|
||||
virtual void print(std::ostream& os) const
|
||||
{
|
||||
os << "index: " << refIndex << " token: " << tokenId << " location: " << locationId;
|
||||
}
|
||||
|
||||
const size_t refIndex;
|
||||
const Id tokenId;
|
||||
const Id locationId;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_SHOW_REFERENCE_H
|
||||
@@ -2,9 +2,9 @@
|
||||
#define MESSAGE_UNDO_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
class MessageUndo: public Message<MessageUndo>
|
||||
class MessageUndo
|
||||
: public Message<MessageUndo>
|
||||
{
|
||||
public:
|
||||
MessageUndo()
|
||||
|
||||
Reference in New Issue
Block a user