logic: scroll code when no symbol
Scrolling to line, when comming from plugin and the file is was modified. Since there we dont know from the position data if the symbol on position is the right one, we scroll to the line if modified.
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 672 B |
@@ -256,6 +256,7 @@ add_files(
|
||||
utility/messaging/type/MessageRefresh.h
|
||||
utility/messaging/type/MessageResetZoom.h
|
||||
utility/messaging/type/MessageScrollCode.h
|
||||
utility/messaging/type/MessageScrollToLine.h
|
||||
utility/messaging/type/MessageSearch.h
|
||||
utility/messaging/type/MessageSearchAutocomplete.h
|
||||
utility/messaging/type/MessageSearchFullText.h
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
#include "utility/messaging/type/MessageScrollToLine.h"
|
||||
#include "utility/text/TextAccess.h"
|
||||
#include "utility/tracing.h"
|
||||
#include "utility/utility.h"
|
||||
@@ -234,6 +235,26 @@ void CodeController::handleMessage(MessageFocusOut* message)
|
||||
getView()->defocusTokenIds();
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageScrollToLine* message)
|
||||
{
|
||||
getView()->scrollToLine(message->filename, message->line);
|
||||
|
||||
if ( message->isModified )
|
||||
{
|
||||
MessageStatus(
|
||||
"File was modified. Showing the File: " + message->filename
|
||||
+ " at line " + std::to_string(message->line) + " now. Please refresh."
|
||||
).dispatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageStatus(
|
||||
"Showing the File: " + message->filename
|
||||
+ " at line " + std::to_string(message->line) + "."
|
||||
).dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::handleMessage(MessageScrollCode* message)
|
||||
{
|
||||
if (message->isReplayed())
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "utility/messaging/type/MessageFocusIn.h"
|
||||
#include "utility/messaging/type/MessageFocusOut.h"
|
||||
#include "utility/messaging/type/MessageScrollCode.h"
|
||||
#include "utility/messaging/type/MessageScrollToLine.h"
|
||||
#include "utility/messaging/type/MessageSearchFullText.h"
|
||||
#include "utility/messaging/type/MessageShowErrors.h"
|
||||
#include "utility/messaging/type/MessageShowScope.h"
|
||||
@@ -37,6 +38,7 @@ class CodeController
|
||||
, public MessageListener<MessageFocusIn>
|
||||
, public MessageListener<MessageFocusOut>
|
||||
, public MessageListener<MessageScrollCode>
|
||||
, public MessageListener<MessageScrollToLine>
|
||||
, public MessageListener<MessageSearchFullText>
|
||||
, public MessageListener<MessageShowErrors>
|
||||
, public MessageListener<MessageShowScope>
|
||||
@@ -56,6 +58,7 @@ private:
|
||||
virtual void handleMessage(MessageFocusIn* message);
|
||||
virtual void handleMessage(MessageFocusOut* message);
|
||||
virtual void handleMessage(MessageScrollCode* message);
|
||||
virtual void handleMessage(MessageScrollToLine* message);
|
||||
virtual void handleMessage(MessageSearchFullText* message);
|
||||
virtual void handleMessage(MessageShowErrors* message);
|
||||
virtual void handleMessage(MessageShowScope* message);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "utility/messaging/type/MessageRefresh.h"
|
||||
#include "utility/messaging/type/MessageShowErrors.h"
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
#include "utility/messaging/type/MessageScrollToLine.h"
|
||||
|
||||
FeatureController::FeatureController(StorageAccess* storageAccess)
|
||||
: m_storageAccess(storageAccess)
|
||||
@@ -76,6 +77,10 @@ void FeatureController::handleMessage(MessageActivateFile* message)
|
||||
msg.setKeepContent(message->keepContent());
|
||||
msg.dispatchImmediately();
|
||||
}
|
||||
if( message->line > 0 )
|
||||
{
|
||||
MessageScrollToLine(message->filePath.str(), message->line, true).dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
void FeatureController::handleMessage(MessageActivateNodes* message)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include <src/lib/utility/file/FileSystem.h>
|
||||
#include <src/lib/settings/ApplicationSettings.h>
|
||||
#include "IDECommunicationController.h"
|
||||
|
||||
#include "data/access/StorageAccess.h"
|
||||
@@ -7,12 +9,11 @@
|
||||
#include "utility/messaging/type/MessageActivateTokenLocations.h"
|
||||
#include "utility/messaging/type/MessageActivateWindow.h"
|
||||
#include "utility/messaging/type/MessageDispatchWhenLicenseValid.h"
|
||||
#include "utility/messaging/type/MessageLoadProject.h"
|
||||
#include "utility/messaging/type/MessageProjectNew.h"
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
#include "utility/logging/logging.h"
|
||||
|
||||
#include "settings/ProjectSettings.h"
|
||||
#include "utility/messaging/type/MessageActivateFile.h"
|
||||
#include "utility/messaging/type/MessageScrollCode.h"
|
||||
#include "utility/messaging/type/MessageScrollToLine.h"
|
||||
|
||||
IDECommunicationController::IDECommunicationController(StorageAccess* storageAccess)
|
||||
: m_storageAccess(storageAccess)
|
||||
@@ -61,40 +62,61 @@ void IDECommunicationController::setEnabled(const bool enabled)
|
||||
m_enabled = enabled;
|
||||
}
|
||||
|
||||
void IDECommunicationController::handleSetActiveTokenMessage(const NetworkProtocolHelper::SetActiveTokenMessage& message)
|
||||
void IDECommunicationController::handleSetActiveTokenMessage(
|
||||
const NetworkProtocolHelper::SetActiveTokenMessage& message
|
||||
)
|
||||
{
|
||||
if (message.valid)
|
||||
{
|
||||
const unsigned int cursorColumn = message.column;
|
||||
|
||||
std::shared_ptr<TokenLocationFile> tokenLocationFile = m_storageAccess->getTokenLocationsForLinesInFile(
|
||||
message.fileLocation, message.row, message.row
|
||||
if(FileSystem::getFileInfoForPath(message.fileLocation).lastWriteTime
|
||||
== m_storageAccess->getFileInfoForFilePath(message.fileLocation).lastWriteTime)
|
||||
{
|
||||
// file was not modified
|
||||
std::shared_ptr<TokenLocationFile> tokenLocationFile = m_storageAccess->getTokenLocationsForLinesInFile(
|
||||
message.fileLocation, message.row, message.row
|
||||
);
|
||||
|
||||
std::vector<Id> selectedLocationIds;
|
||||
tokenLocationFile->forEachStartTokenLocation(
|
||||
[&](TokenLocation* startLocation)
|
||||
{
|
||||
TokenLocation* endLocation = startLocation->getEndTokenLocation();
|
||||
std::vector<Id> selectedLocationIds;
|
||||
tokenLocationFile->forEachStartTokenLocation(
|
||||
[&](TokenLocation* startLocation)
|
||||
{
|
||||
TokenLocation* endLocation = startLocation->getEndTokenLocation();
|
||||
|
||||
if (!startLocation->isScopeTokenLocation() &&
|
||||
startLocation->getColumnNumber() <= cursorColumn && endLocation->getColumnNumber() + 1 >= cursorColumn)
|
||||
if (!startLocation->isScopeTokenLocation()
|
||||
&& startLocation->getColumnNumber() <= cursorColumn
|
||||
&& endLocation->getColumnNumber() + 1 >= cursorColumn)
|
||||
{
|
||||
selectedLocationIds.push_back(startLocation->getId());
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (selectedLocationIds.size() > 0)
|
||||
{
|
||||
selectedLocationIds.push_back(startLocation->getId());
|
||||
MessageStatus("Activating a source location from external succeeded.").dispatch();
|
||||
MessageDispatchWhenLicenseValid(
|
||||
std::make_shared<MessageActivateTokenLocations>(selectedLocationIds)
|
||||
).dispatch();
|
||||
MessageActivateWindow().dispatch();
|
||||
return;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (selectedLocationIds.size() > 0)
|
||||
Id fileId = m_storageAccess->getTokenIdForFileNode(message.fileLocation);
|
||||
if( fileId > 0)
|
||||
{
|
||||
MessageStatus("Activating a source location from external succeeded.").dispatch();
|
||||
MessageDispatchWhenLicenseValid(std::make_shared<MessageActivateTokenLocations>(selectedLocationIds)).dispatch();
|
||||
MessageDispatchWhenLicenseValid(
|
||||
std::make_shared<MessageActivateFile>(message.fileLocation, message.row)
|
||||
).dispatchImmediately();
|
||||
MessageActivateWindow().dispatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageStatus(
|
||||
"Activating a source location from external failed. No symbol(s) have been found at the selected location."
|
||||
"Activating a source location from external failed. No file " + message.fileLocation
|
||||
+ " have been found at in indexed source."
|
||||
).dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
virtual void showContents() = 0;
|
||||
|
||||
virtual void scrollToValue(int value) = 0;
|
||||
virtual void scrollToLine(std::string filename, unsigned int line) = 0;
|
||||
|
||||
private:
|
||||
CodeController* getController();
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
class MessageActivateFile: public Message<MessageActivateFile>
|
||||
{
|
||||
public:
|
||||
MessageActivateFile(const FilePath& filePath)
|
||||
MessageActivateFile(const FilePath& filePath, unsigned int line = 0)
|
||||
: filePath(filePath)
|
||||
, line(line)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -23,6 +24,7 @@ public:
|
||||
}
|
||||
|
||||
const FilePath filePath;
|
||||
unsigned int line;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_ACTIVATE_FILE_H
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef MESSAGE_SCROLL_TO_LINE_h
|
||||
#define MESSAGE_SCROLL_TO_LINE_h
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
|
||||
class MessageScrollToLine
|
||||
: public Message<MessageScrollToLine>
|
||||
{
|
||||
public:
|
||||
MessageScrollToLine(std::string filename, unsigned int line, bool isModified = false)
|
||||
: filename(filename)
|
||||
, line(line)
|
||||
, isModified(isModified)
|
||||
{
|
||||
setIsLogged(false);
|
||||
}
|
||||
|
||||
static const std::string getStaticType()
|
||||
{
|
||||
return "MessageScrollToLine";
|
||||
}
|
||||
|
||||
std::string filename;
|
||||
unsigned int line;
|
||||
bool isModified;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_SCROLL_TO_LINE_h
|
||||
@@ -264,6 +264,11 @@ QtCodeSnippet* QtCodeFile::insertCodeSnippet(const CodeSnippetParams& params)
|
||||
return snippet.get();
|
||||
}
|
||||
|
||||
QtCodeSnippet* QtCodeFile::getFileSnippet() const
|
||||
{
|
||||
return m_fileSnippet.get();
|
||||
}
|
||||
|
||||
QtCodeSnippet* QtCodeFile::findFirstActiveSnippet() const
|
||||
{
|
||||
if (m_locationFile)
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
QtCodeSnippet* insertCodeSnippet(const CodeSnippetParams& params);
|
||||
|
||||
QtCodeSnippet* findFirstActiveSnippet() const;
|
||||
QtCodeSnippet* getFileSnippet() const;
|
||||
bool isCollapsedActiveFile() const;
|
||||
|
||||
void updateContent();
|
||||
|
||||
@@ -225,6 +225,19 @@ void QtCodeFileList::showContents()
|
||||
}
|
||||
}
|
||||
|
||||
void QtCodeFileList::scrollToLine(std::string filename, unsigned int line)
|
||||
{
|
||||
for (std::shared_ptr<QtCodeFile> file: m_files)
|
||||
{
|
||||
if( filename == file->getFilePath().str() )
|
||||
{
|
||||
emit shouldScrollToSnippet(file->getFileSnippet(), line);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void QtCodeFileList::scrollToValue(int value)
|
||||
{
|
||||
m_value = value;
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
void updateFiles();
|
||||
void showContents();
|
||||
void scrollToValue(int value);
|
||||
void scrollToLine(std::string, unsigned int line);
|
||||
void scrollToActiveFileIfRequested();
|
||||
|
||||
private slots:
|
||||
|
||||
@@ -43,7 +43,7 @@ void QtTcpWrapper::sendMessage(const std::string& message) const
|
||||
data.append(message.c_str());
|
||||
|
||||
QTcpSocket socket;
|
||||
socket.connectToHost(QHostAddress::LocalHost, 6666);
|
||||
socket.connectToHost(QHostAddress::LocalHost, m_clientPort);
|
||||
|
||||
if (socket.waitForConnected())
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@ QtCodeView::QtCodeView(ViewLayout* viewLayout)
|
||||
, m_defocusTokenIdsFunctor(std::bind(&QtCodeView::doDefocusTokenIds, this))
|
||||
, m_showContentsFunctor(std::bind(&QtCodeView::doShowContents, this))
|
||||
, m_scrollToValueFunctor(std::bind(&QtCodeView::doScrollToValue, this, std::placeholders::_1))
|
||||
, m_scrollToLineFunctor(std::bind(&QtCodeView::doScrollToLine, this, std::placeholders::_1, std::placeholders::_2))
|
||||
{
|
||||
m_widget = new QtCodeFileList();
|
||||
setStyleSheet();
|
||||
@@ -121,6 +122,11 @@ void QtCodeView::scrollToValue(int value)
|
||||
m_scrollToValueFunctor(value);
|
||||
}
|
||||
|
||||
void QtCodeView::scrollToLine(std::string filename, unsigned int line)
|
||||
{
|
||||
m_scrollToLineFunctor(filename, line);
|
||||
}
|
||||
|
||||
void QtCodeView::doRefreshView()
|
||||
{
|
||||
setStyleSheet();
|
||||
@@ -232,6 +238,11 @@ void QtCodeView::doScrollToValue(int value)
|
||||
m_widget->scrollToValue(value);
|
||||
}
|
||||
|
||||
void QtCodeView::doScrollToLine(std::string filename, unsigned int line)
|
||||
{
|
||||
m_widget->scrollToLine(filename, line);
|
||||
}
|
||||
|
||||
void QtCodeView::setStyleSheet() const
|
||||
{
|
||||
utility::setWidgetBackgroundColor(m_widget, ColorScheme::getInstance()->getColor("code/background"));
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
virtual void showContents();
|
||||
|
||||
virtual void scrollToValue(int value);
|
||||
virtual void scrollToLine(std::string filename, unsigned int line);
|
||||
|
||||
private:
|
||||
void doRefreshView();
|
||||
@@ -68,6 +69,7 @@ private:
|
||||
void doShowContents();
|
||||
|
||||
void doScrollToValue(int value);
|
||||
void doScrollToLine(std::string filename, unsigned int line);
|
||||
|
||||
void setStyleSheet() const;
|
||||
|
||||
@@ -84,6 +86,7 @@ private:
|
||||
QtThreadedFunctor<> m_defocusTokenIdsFunctor;
|
||||
QtThreadedFunctor<> m_showContentsFunctor;
|
||||
QtThreadedFunctor<int> m_scrollToValueFunctor;
|
||||
QtThreadedFunctor<std::string, unsigned int> m_scrollToLineFunctor;
|
||||
|
||||
QtCodeFileList* m_widget;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user