logic: MessageFlushUpdates to send new Graph to GraphView when restoring Graph
This commit is contained in:
@@ -420,8 +420,20 @@ void QtGraphView::createTransition()
|
|||||||
|
|
||||||
if (!vanishingNodes.size() && !appearingNodes.size())
|
if (!vanishingNodes.size() && !appearingNodes.size())
|
||||||
{
|
{
|
||||||
switchToNewGraphData();
|
bool nodesMoved = false;
|
||||||
return;
|
for (const std::pair<QtGraphNode*, QtGraphNode*>& p : remainingNodes)
|
||||||
|
{
|
||||||
|
if (p.first->getPosition() != p.second->getPosition() && p.first->getSize() != p.second->getSize())
|
||||||
|
{
|
||||||
|
nodesMoved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nodesMoved)
|
||||||
|
{
|
||||||
|
switchToNewGraphData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const std::shared_ptr<QtGraphNode>& node : m_nodes)
|
for (const std::shared_ptr<QtGraphNode>& node : m_nodes)
|
||||||
|
|||||||
@@ -259,6 +259,7 @@ add_files(
|
|||||||
utility/messaging/type/MessageAutoRefreshChanged.h
|
utility/messaging/type/MessageAutoRefreshChanged.h
|
||||||
utility/messaging/type/MessageFind.h
|
utility/messaging/type/MessageFind.h
|
||||||
utility/messaging/type/MessageFinishedParsing.h
|
utility/messaging/type/MessageFinishedParsing.h
|
||||||
|
utility/messaging/type/MessageFlushUpdates.h
|
||||||
utility/messaging/type/MessageFocusIn.h
|
utility/messaging/type/MessageFocusIn.h
|
||||||
utility/messaging/type/MessageFocusOut.h
|
utility/messaging/type/MessageFocusOut.h
|
||||||
utility/messaging/type/MessageGraphNodeBundleSplit.h
|
utility/messaging/type/MessageGraphNodeBundleSplit.h
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
|
|
||||||
GraphController::GraphController(StorageAccess* storageAccess)
|
GraphController::GraphController(StorageAccess* storageAccess)
|
||||||
: m_storageAccess(storageAccess)
|
: m_storageAccess(storageAccess)
|
||||||
, m_rebuild(true)
|
|
||||||
, m_restore(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,18 +24,18 @@ GraphController::~GraphController()
|
|||||||
|
|
||||||
void GraphController::handleMessage(MessageActivateTokens* message)
|
void GraphController::handleMessage(MessageActivateTokens* message)
|
||||||
{
|
{
|
||||||
setRebuildState(message);
|
|
||||||
|
|
||||||
m_activeTokenIds = message->tokenIds;
|
m_activeTokenIds = message->tokenIds;
|
||||||
|
|
||||||
if (message->isEdge && message->tokenIds.size() == 1)
|
if (message->isEdge && message->tokenIds.size() == 1)
|
||||||
{
|
{
|
||||||
setActiveAndVisibility(message->tokenIds);
|
setActiveAndVisibility(message->tokenIds);
|
||||||
rebuildGraph();
|
buildGraph(message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
createDummyGraphForTokenIds(message->tokenIds);
|
createDummyGraphForTokenIds(message->tokenIds);
|
||||||
|
|
||||||
|
buildGraph(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphController::handleMessage(MessageFinishedParsing* message)
|
void GraphController::handleMessage(MessageFinishedParsing* message)
|
||||||
@@ -45,6 +43,11 @@ void GraphController::handleMessage(MessageFinishedParsing* message)
|
|||||||
getView()->clear();
|
getView()->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GraphController::handleMessage(MessageFlushUpdates* message)
|
||||||
|
{
|
||||||
|
buildGraph(message);
|
||||||
|
}
|
||||||
|
|
||||||
void GraphController::handleMessage(MessageFocusIn* message)
|
void GraphController::handleMessage(MessageFocusIn* message)
|
||||||
{
|
{
|
||||||
getView()->focusToken(message->tokenId);
|
getView()->focusToken(message->tokenId);
|
||||||
@@ -57,8 +60,6 @@ void GraphController::handleMessage(MessageFocusOut *message)
|
|||||||
|
|
||||||
void GraphController::handleMessage(MessageGraphNodeBundleSplit* message)
|
void GraphController::handleMessage(MessageGraphNodeBundleSplit* message)
|
||||||
{
|
{
|
||||||
setRebuildState(message);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < m_dummyNodes.size(); i++)
|
for (size_t i = 0; i < m_dummyNodes.size(); i++)
|
||||||
{
|
{
|
||||||
DummyNode& node = m_dummyNodes[i];
|
DummyNode& node = m_dummyNodes[i];
|
||||||
@@ -86,13 +87,11 @@ void GraphController::handleMessage(MessageGraphNodeBundleSplit* message)
|
|||||||
GraphLayouter::layoutSpectralPrototype(m_dummyNodes, m_dummyEdges);
|
GraphLayouter::layoutSpectralPrototype(m_dummyNodes, m_dummyEdges);
|
||||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||||
|
|
||||||
rebuildGraph();
|
buildGraph(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphController::handleMessage(MessageGraphNodeExpand* message)
|
void GraphController::handleMessage(MessageGraphNodeExpand* message)
|
||||||
{
|
{
|
||||||
setRebuildState(message);
|
|
||||||
|
|
||||||
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
@@ -103,14 +102,12 @@ void GraphController::handleMessage(MessageGraphNodeExpand* message)
|
|||||||
|
|
||||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||||
|
|
||||||
rebuildGraph();
|
buildGraph(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphController::handleMessage(MessageGraphNodeMove* message)
|
void GraphController::handleMessage(MessageGraphNodeMove* message)
|
||||||
{
|
{
|
||||||
setRebuildState(message);
|
|
||||||
|
|
||||||
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
@@ -122,7 +119,7 @@ void GraphController::handleMessage(MessageGraphNodeMove* message)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rebuildGraph();
|
buildGraph(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,7 +174,6 @@ void GraphController::createDummyGraphForTokenIds(const std::vector<Id>& tokenId
|
|||||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||||
|
|
||||||
m_graph = graph;
|
m_graph = graph;
|
||||||
rebuildGraph();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
||||||
@@ -199,7 +195,7 @@ DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DummyNode* oldNode = findDummyNodeRecursive(m_dummyNodes, node->getId());
|
DummyNode* oldNode = findDummyNodeRecursive(m_dummyNodes, node->getId());
|
||||||
if (oldNode && !m_restore)
|
if (oldNode)
|
||||||
{
|
{
|
||||||
result.expanded = oldNode->isExpanded();
|
result.expanded = oldNode->isExpanded();
|
||||||
}
|
}
|
||||||
@@ -930,28 +926,9 @@ DummyNode* GraphController::findDummyNodeAccessRecursive(
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphController::setRebuildState(MessageBase* message)
|
void GraphController::buildGraph(MessageBase* message)
|
||||||
{
|
{
|
||||||
m_restore = false;
|
if (message->undoRedoType == MessageBase::UNDOTYPE_NORMAL)
|
||||||
|
|
||||||
switch (message->undoRedoType)
|
|
||||||
{
|
|
||||||
case MessageBase::UNDOTYPE_UNDO:
|
|
||||||
m_restore = true;
|
|
||||||
case MessageBase::UNDOTYPE_NORMAL:
|
|
||||||
case MessageBase::UNDOTYPE_REDO:
|
|
||||||
m_rebuild = true;
|
|
||||||
break;
|
|
||||||
case MessageBase::UNDOTYPE_IGNORE:
|
|
||||||
m_restore = true;
|
|
||||||
m_rebuild = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GraphController::rebuildGraph()
|
|
||||||
{
|
|
||||||
if (m_rebuild)
|
|
||||||
{
|
{
|
||||||
getView()->rebuildGraph(m_graph, m_dummyNodes, m_dummyEdges);
|
getView()->rebuildGraph(m_graph, m_dummyNodes, m_dummyEdges);
|
||||||
m_graph.reset();
|
m_graph.reset();
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "utility/messaging/MessageListener.h"
|
#include "utility/messaging/MessageListener.h"
|
||||||
#include "utility/messaging/type/MessageActivateTokens.h"
|
#include "utility/messaging/type/MessageActivateTokens.h"
|
||||||
#include "utility/messaging/type/MessageFinishedParsing.h"
|
#include "utility/messaging/type/MessageFinishedParsing.h"
|
||||||
|
#include "utility/messaging/type/MessageFlushUpdates.h"
|
||||||
#include "utility/messaging/type/MessageFocusIn.h"
|
#include "utility/messaging/type/MessageFocusIn.h"
|
||||||
#include "utility/messaging/type/MessageFocusOut.h"
|
#include "utility/messaging/type/MessageFocusOut.h"
|
||||||
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
|
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
|
||||||
@@ -28,6 +29,7 @@ class GraphController
|
|||||||
: public Controller
|
: public Controller
|
||||||
, public MessageListener<MessageActivateTokens>
|
, public MessageListener<MessageActivateTokens>
|
||||||
, public MessageListener<MessageFinishedParsing>
|
, public MessageListener<MessageFinishedParsing>
|
||||||
|
, public MessageListener<MessageFlushUpdates>
|
||||||
, public MessageListener<MessageFocusIn>
|
, public MessageListener<MessageFocusIn>
|
||||||
, public MessageListener<MessageFocusOut>
|
, public MessageListener<MessageFocusOut>
|
||||||
, public MessageListener<MessageGraphNodeBundleSplit>
|
, public MessageListener<MessageGraphNodeBundleSplit>
|
||||||
@@ -41,6 +43,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
virtual void handleMessage(MessageActivateTokens* message);
|
virtual void handleMessage(MessageActivateTokens* message);
|
||||||
virtual void handleMessage(MessageFinishedParsing* message);
|
virtual void handleMessage(MessageFinishedParsing* message);
|
||||||
|
virtual void handleMessage(MessageFlushUpdates* message);
|
||||||
virtual void handleMessage(MessageFocusIn* message);
|
virtual void handleMessage(MessageFocusIn* message);
|
||||||
virtual void handleMessage(MessageFocusOut* message);
|
virtual void handleMessage(MessageFocusOut* message);
|
||||||
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
|
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
|
||||||
@@ -75,8 +78,7 @@ private:
|
|||||||
DummyNode* findDummyNodeRecursive(std::vector<DummyNode>& nodes, Id tokenId) const;
|
DummyNode* findDummyNodeRecursive(std::vector<DummyNode>& nodes, Id tokenId) const;
|
||||||
DummyNode* findDummyNodeAccessRecursive(std::vector<DummyNode>& nodes, Id parentId, TokenComponentAccess::AccessType type) const;
|
DummyNode* findDummyNodeAccessRecursive(std::vector<DummyNode>& nodes, Id parentId, TokenComponentAccess::AccessType type) const;
|
||||||
|
|
||||||
void setRebuildState(MessageBase* message);
|
void buildGraph(MessageBase* message);
|
||||||
void rebuildGraph();
|
|
||||||
|
|
||||||
StorageAccess* m_storageAccess;
|
StorageAccess* m_storageAccess;
|
||||||
|
|
||||||
@@ -86,8 +88,6 @@ private:
|
|||||||
std::vector<Id> m_activeTokenIds;
|
std::vector<Id> m_activeTokenIds;
|
||||||
|
|
||||||
std::shared_ptr<Graph> m_graph;
|
std::shared_ptr<Graph> m_graph;
|
||||||
bool m_rebuild;
|
|
||||||
bool m_restore;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GRAPH_CONTROLLER_H
|
#endif // GRAPH_CONTROLLER_H
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "component/controller/UndoRedoController.h"
|
#include "component/controller/UndoRedoController.h"
|
||||||
|
|
||||||
#include "utility/logging/logging.h"
|
#include "utility/logging/logging.h"
|
||||||
|
#include "utility/messaging/type/MessageFlushUpdates.h"
|
||||||
|
|
||||||
#include "component/view/UndoRedoView.h"
|
#include "component/view/UndoRedoView.h"
|
||||||
|
|
||||||
@@ -96,6 +97,8 @@ void UndoRedoController::handleMessage(MessageRedo* message)
|
|||||||
m_redo.pop_back();
|
m_redo.pop_back();
|
||||||
m->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
m->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
||||||
m->dispatch();
|
m->dispatch();
|
||||||
|
|
||||||
|
MessageFlushUpdates().dispatch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,6 +128,8 @@ void UndoRedoController::handleMessage(MessageRefresh* message)
|
|||||||
|
|
||||||
msg->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
msg->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
||||||
msg->dispatch();
|
msg->dispatch();
|
||||||
|
|
||||||
|
MessageFlushUpdates().dispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UndoRedoController::handleMessage(MessageSearch* message)
|
void UndoRedoController::handleMessage(MessageSearch* message)
|
||||||
@@ -139,9 +144,29 @@ void UndoRedoController::handleMessage(MessageSearch* message)
|
|||||||
processCommand(command);
|
processCommand(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UndoRedoController::handleMessage(MessageShowFile* message)
|
||||||
|
{
|
||||||
|
if (m_lastCommand.message && m_lastCommand.message->getType() == message->getType() &&
|
||||||
|
static_cast<MessageShowFile*>(m_lastCommand.message.get())->filePath == message->filePath)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Command command(std::make_shared<MessageShowFile>(*message), 1);
|
||||||
|
processCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UndoRedoController::handleMessage(MessageShowScope* message)
|
||||||
|
{
|
||||||
|
Command command(std::make_shared<MessageShowScope>(*message), 1);
|
||||||
|
processCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
void UndoRedoController::handleMessage(MessageUndo* message)
|
void UndoRedoController::handleMessage(MessageUndo* message)
|
||||||
{
|
{
|
||||||
replayCommands(true);
|
replayCommands(true);
|
||||||
|
|
||||||
|
MessageFlushUpdates().dispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UndoRedoController::replayCommands(bool removeLast)
|
void UndoRedoController::replayCommands(bool removeLast)
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
#include "utility/messaging/type/MessageRedo.h"
|
#include "utility/messaging/type/MessageRedo.h"
|
||||||
#include "utility/messaging/type/MessageRefresh.h"
|
#include "utility/messaging/type/MessageRefresh.h"
|
||||||
#include "utility/messaging/type/MessageSearch.h"
|
#include "utility/messaging/type/MessageSearch.h"
|
||||||
|
#include "utility/messaging/type/MessageShowFile.h"
|
||||||
|
#include "utility/messaging/type/MessageShowScope.h"
|
||||||
#include "utility/messaging/type/MessageUndo.h"
|
#include "utility/messaging/type/MessageUndo.h"
|
||||||
|
|
||||||
#include "component/controller/Controller.h"
|
#include "component/controller/Controller.h"
|
||||||
@@ -35,6 +37,8 @@ class UndoRedoController
|
|||||||
, public MessageListener<MessageRedo>
|
, public MessageListener<MessageRedo>
|
||||||
, public MessageListener<MessageRefresh>
|
, public MessageListener<MessageRefresh>
|
||||||
, public MessageListener<MessageSearch>
|
, public MessageListener<MessageSearch>
|
||||||
|
, public MessageListener<MessageShowFile>
|
||||||
|
, public MessageListener<MessageShowScope>
|
||||||
, public MessageListener<MessageUndo>
|
, public MessageListener<MessageUndo>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -63,6 +67,8 @@ private:
|
|||||||
virtual void handleMessage(MessageRedo* message);
|
virtual void handleMessage(MessageRedo* message);
|
||||||
virtual void handleMessage(MessageRefresh* message);
|
virtual void handleMessage(MessageRefresh* message);
|
||||||
virtual void handleMessage(MessageSearch* message);
|
virtual void handleMessage(MessageSearch* message);
|
||||||
|
virtual void handleMessage(MessageShowFile* message);
|
||||||
|
virtual void handleMessage(MessageShowScope* message);
|
||||||
virtual void handleMessage(MessageUndo* message);
|
virtual void handleMessage(MessageUndo* message);
|
||||||
|
|
||||||
void replayCommands(bool removeLast);
|
void replayCommands(bool removeLast);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef MESSAGE_FLUSH_UPDATES_H
|
||||||
|
#define MESSAGE_FLUSH_UPDATES_H
|
||||||
|
|
||||||
|
#include "utility/messaging/Message.h"
|
||||||
|
|
||||||
|
class MessageFlushUpdates:
|
||||||
|
public Message<MessageFlushUpdates>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MessageFlushUpdates()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static const std::string getStaticType()
|
||||||
|
{
|
||||||
|
return "MessageFlushUpdates";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MESSAGE_FLUSH_UPDATES_H
|
||||||
Reference in New Issue
Block a user