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:
Andreas Stallinger
2016-07-28 14:16:15 +02:00
parent acaf58c3f8
commit d5e9cecef3
16 changed files with 139 additions and 22 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 672 B

+1
View File
@@ -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();
}
}
+1
View File
@@ -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
+5
View File
@@ -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)
+1
View File
@@ -50,6 +50,7 @@ public:
QtCodeSnippet* insertCodeSnippet(const CodeSnippetParams& params);
QtCodeSnippet* findFirstActiveSnippet() const;
QtCodeSnippet* getFileSnippet() const;
bool isCollapsedActiveFile() const;
void updateContent();
+13
View File
@@ -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;
+1
View File
@@ -64,6 +64,7 @@ public:
void updateFiles();
void showContents();
void scrollToValue(int value);
void scrollToLine(std::string, unsigned int line);
void scrollToActiveFileIfRequested();
private slots:
+1 -1
View File
@@ -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())
{
+11
View File
@@ -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"));
+3
View File
@@ -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;