diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 5720e053c..b4235c4b2 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -214,18 +214,6 @@ void CodeController::handleMessage(MessageActivateTokens* message) return; } - if (message->keepContent()) // deactivating an edge - { - m_codeParams.activeTokenIds = params.activeTokenIds; - m_codeParams.activeLocationIds.clear(); - m_codeParams.activeLocalSymbolIds.clear(); - m_codeParams.currentActiveLocalLocationIds.clear(); - clearLocalReferences(); - - showFiles(m_codeParams, CodeScrollParams(), !message->isReplayed()); - return; - } - m_collection = m_storageAccess->getSourceLocationsForTokenIds(params.activeTokenIds); m_files = getFilesForActiveSourceLocations(m_collection.get(), declarationId); @@ -414,19 +402,19 @@ void CodeController::handleMessage(MessageCodeShowDefinition* message) void CodeController::handleMessage(MessageDeactivateEdge* message) { + CodeScrollParams scrollParams; + m_codeParams.activeLocationIds.clear(); + m_codeParams.activeLocalSymbolIds.clear(); + m_codeParams.currentActiveLocalLocationIds.clear(); + m_referenceIndex = -1; + clearLocalReferences(); + if (message->scrollToDefinition) { - CodeScrollParams scrollParams = definitionReferenceScrollParams(m_codeParams.activeTokenIds); - - if (message->isReplayed()) - { - m_scrollParams = scrollParams; - } - else - { - getView()->scrollTo(scrollParams, true); - } + scrollParams = definitionReferenceScrollParams(m_codeParams.activeTokenIds); } + + showFiles(m_codeParams, scrollParams, !message->isReplayed()); } void CodeController::handleMessage(MessageErrorCountClear* message) diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 7347922e8..9999fc088 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -316,6 +316,16 @@ void GraphController::handleMessage(MessageActivateTrailEdge* message) getView()->activateEdge(message->edgeIds.back()); } +void GraphController::handleMessage(MessageDeactivateEdge* message) +{ + TRACE("edge deactivate"); + + m_activeEdgeIds.clear(); + setActive(utility::concat(m_activeNodeIds, m_activeEdgeIds), false); + + getView()->activateEdge(0); +} + void GraphController::handleMessage(MessageFlushUpdates* message) { GraphView::GraphParams params; diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h index 9856d3fee..606888c7c 100644 --- a/src/lib/component/controller/GraphController.h +++ b/src/lib/component/controller/GraphController.h @@ -11,6 +11,7 @@ #include "MessageActivateTokens.h" #include "MessageActivateTrail.h" #include "MessageActivateTrailEdge.h" +#include "MessageDeactivateEdge.h" #include "MessageFlushUpdates.h" #include "MessageFocusIn.h" #include "MessageFocusOut.h" @@ -40,6 +41,7 @@ class GraphController , public MessageListener , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -64,6 +66,7 @@ class GraphController void handleMessage(MessageActivateTokens* message) override; void handleMessage(MessageActivateTrail* message) override; void handleMessage(MessageActivateTrailEdge* message) override; + void handleMessage(MessageDeactivateEdge* message) override; void handleMessage(MessageFlushUpdates* message) override; void handleMessage(MessageFocusIn* message) override; void handleMessage(MessageFocusOut* message) override; diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 9058988b1..2514a3ba9 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -172,25 +172,14 @@ void UndoRedoController::handleMessage(MessageCodeShowDefinition* message) void UndoRedoController::handleMessage(MessageDeactivateEdge* message) { - if (m_iterator == m_list.begin()) + if (sameMessageTypeAsLast(message) && + static_cast(lastMessage())->scrollToDefinition == message->scrollToDefinition) { return; } - std::list::iterator it = m_iterator; - do - { - std::advance(it, -1); - } while (it != m_list.begin() && it->order != Command::ORDER_ACTIVATE); - - MessageBase* m = it->message.get(); - bool keepContent = m->keepContent(); - - m->setIsReplayed(false); - m->setKeepContent(true); - m->dispatch(); - - m->setKeepContent(keepContent); + Command command(std::make_shared(*message), Command::ORDER_ADAPT); + processCommand(command); } void UndoRedoController::handleMessage(MessageGraphNodeBundleSplit* message) diff --git a/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp b/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp index 57ce221da..c64614b41 100644 --- a/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp +++ b/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp @@ -174,7 +174,14 @@ void QtCodeFileSingle::scrollTo( { if (m_currentFilePath != filePath) { - return; + FileData file = getFileData(filePath); + if (!file.area) + { + return; + } + + setFileData(file); + animated = false; } size_t endLineNumber = 0;