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())
|
||||
{
|
||||
switchToNewGraphData();
|
||||
return;
|
||||
bool nodesMoved = false;
|
||||
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)
|
||||
|
||||
@@ -259,6 +259,7 @@ add_files(
|
||||
utility/messaging/type/MessageAutoRefreshChanged.h
|
||||
utility/messaging/type/MessageFind.h
|
||||
utility/messaging/type/MessageFinishedParsing.h
|
||||
utility/messaging/type/MessageFlushUpdates.h
|
||||
utility/messaging/type/MessageFocusIn.h
|
||||
utility/messaging/type/MessageFocusOut.h
|
||||
utility/messaging/type/MessageGraphNodeBundleSplit.h
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
|
||||
GraphController::GraphController(StorageAccess* storageAccess)
|
||||
: m_storageAccess(storageAccess)
|
||||
, m_rebuild(true)
|
||||
, m_restore(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -26,18 +24,18 @@ GraphController::~GraphController()
|
||||
|
||||
void GraphController::handleMessage(MessageActivateTokens* message)
|
||||
{
|
||||
setRebuildState(message);
|
||||
|
||||
m_activeTokenIds = message->tokenIds;
|
||||
|
||||
if (message->isEdge && message->tokenIds.size() == 1)
|
||||
{
|
||||
setActiveAndVisibility(message->tokenIds);
|
||||
rebuildGraph();
|
||||
buildGraph(message);
|
||||
return;
|
||||
}
|
||||
|
||||
createDummyGraphForTokenIds(message->tokenIds);
|
||||
|
||||
buildGraph(message);
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageFinishedParsing* message)
|
||||
@@ -45,6 +43,11 @@ void GraphController::handleMessage(MessageFinishedParsing* message)
|
||||
getView()->clear();
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageFlushUpdates* message)
|
||||
{
|
||||
buildGraph(message);
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageFocusIn* message)
|
||||
{
|
||||
getView()->focusToken(message->tokenId);
|
||||
@@ -57,8 +60,6 @@ void GraphController::handleMessage(MessageFocusOut *message)
|
||||
|
||||
void GraphController::handleMessage(MessageGraphNodeBundleSplit* message)
|
||||
{
|
||||
setRebuildState(message);
|
||||
|
||||
for (size_t i = 0; i < m_dummyNodes.size(); i++)
|
||||
{
|
||||
DummyNode& node = m_dummyNodes[i];
|
||||
@@ -86,13 +87,11 @@ void GraphController::handleMessage(MessageGraphNodeBundleSplit* message)
|
||||
GraphLayouter::layoutSpectralPrototype(m_dummyNodes, m_dummyEdges);
|
||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||
|
||||
rebuildGraph();
|
||||
buildGraph(message);
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageGraphNodeExpand* message)
|
||||
{
|
||||
setRebuildState(message);
|
||||
|
||||
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
||||
if (node)
|
||||
{
|
||||
@@ -103,14 +102,12 @@ void GraphController::handleMessage(MessageGraphNodeExpand* message)
|
||||
|
||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||
|
||||
rebuildGraph();
|
||||
buildGraph(message);
|
||||
}
|
||||
}
|
||||
|
||||
void GraphController::handleMessage(MessageGraphNodeMove* message)
|
||||
{
|
||||
setRebuildState(message);
|
||||
|
||||
DummyNode* node = findDummyNodeRecursive(m_dummyNodes, message->tokenId);
|
||||
if (node)
|
||||
{
|
||||
@@ -122,7 +119,7 @@ void GraphController::handleMessage(MessageGraphNodeMove* message)
|
||||
}
|
||||
else
|
||||
{
|
||||
rebuildGraph();
|
||||
buildGraph(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,7 +174,6 @@ void GraphController::createDummyGraphForTokenIds(const std::vector<Id>& tokenId
|
||||
GraphPostprocessor::doPostprocessing(m_dummyNodes);
|
||||
|
||||
m_graph = graph;
|
||||
rebuildGraph();
|
||||
}
|
||||
|
||||
DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
||||
@@ -199,7 +195,7 @@ DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
||||
}
|
||||
|
||||
DummyNode* oldNode = findDummyNodeRecursive(m_dummyNodes, node->getId());
|
||||
if (oldNode && !m_restore)
|
||||
if (oldNode)
|
||||
{
|
||||
result.expanded = oldNode->isExpanded();
|
||||
}
|
||||
@@ -930,28 +926,9 @@ DummyNode* GraphController::findDummyNodeAccessRecursive(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void GraphController::setRebuildState(MessageBase* message)
|
||||
void GraphController::buildGraph(MessageBase* message)
|
||||
{
|
||||
m_restore = false;
|
||||
|
||||
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)
|
||||
if (message->undoRedoType == MessageBase::UNDOTYPE_NORMAL)
|
||||
{
|
||||
getView()->rebuildGraph(m_graph, m_dummyNodes, m_dummyEdges);
|
||||
m_graph.reset();
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "utility/messaging/MessageListener.h"
|
||||
#include "utility/messaging/type/MessageActivateTokens.h"
|
||||
#include "utility/messaging/type/MessageFinishedParsing.h"
|
||||
#include "utility/messaging/type/MessageFlushUpdates.h"
|
||||
#include "utility/messaging/type/MessageFocusIn.h"
|
||||
#include "utility/messaging/type/MessageFocusOut.h"
|
||||
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
|
||||
@@ -28,6 +29,7 @@ class GraphController
|
||||
: public Controller
|
||||
, public MessageListener<MessageActivateTokens>
|
||||
, public MessageListener<MessageFinishedParsing>
|
||||
, public MessageListener<MessageFlushUpdates>
|
||||
, public MessageListener<MessageFocusIn>
|
||||
, public MessageListener<MessageFocusOut>
|
||||
, public MessageListener<MessageGraphNodeBundleSplit>
|
||||
@@ -41,6 +43,7 @@ public:
|
||||
private:
|
||||
virtual void handleMessage(MessageActivateTokens* message);
|
||||
virtual void handleMessage(MessageFinishedParsing* message);
|
||||
virtual void handleMessage(MessageFlushUpdates* message);
|
||||
virtual void handleMessage(MessageFocusIn* message);
|
||||
virtual void handleMessage(MessageFocusOut* message);
|
||||
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
|
||||
@@ -75,8 +78,7 @@ private:
|
||||
DummyNode* findDummyNodeRecursive(std::vector<DummyNode>& nodes, Id tokenId) const;
|
||||
DummyNode* findDummyNodeAccessRecursive(std::vector<DummyNode>& nodes, Id parentId, TokenComponentAccess::AccessType type) const;
|
||||
|
||||
void setRebuildState(MessageBase* message);
|
||||
void rebuildGraph();
|
||||
void buildGraph(MessageBase* message);
|
||||
|
||||
StorageAccess* m_storageAccess;
|
||||
|
||||
@@ -86,8 +88,6 @@ private:
|
||||
std::vector<Id> m_activeTokenIds;
|
||||
|
||||
std::shared_ptr<Graph> m_graph;
|
||||
bool m_rebuild;
|
||||
bool m_restore;
|
||||
};
|
||||
|
||||
#endif // GRAPH_CONTROLLER_H
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "component/controller/UndoRedoController.h"
|
||||
|
||||
#include "utility/logging/logging.h"
|
||||
#include "utility/messaging/type/MessageFlushUpdates.h"
|
||||
|
||||
#include "component/view/UndoRedoView.h"
|
||||
|
||||
@@ -96,6 +97,8 @@ void UndoRedoController::handleMessage(MessageRedo* message)
|
||||
m_redo.pop_back();
|
||||
m->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
||||
m->dispatch();
|
||||
|
||||
MessageFlushUpdates().dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,6 +128,8 @@ void UndoRedoController::handleMessage(MessageRefresh* message)
|
||||
|
||||
msg->undoRedoType = MessageBase::UNDOTYPE_REDO;
|
||||
msg->dispatch();
|
||||
|
||||
MessageFlushUpdates().dispatch();
|
||||
}
|
||||
|
||||
void UndoRedoController::handleMessage(MessageSearch* message)
|
||||
@@ -139,9 +144,29 @@ void UndoRedoController::handleMessage(MessageSearch* message)
|
||||
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)
|
||||
{
|
||||
replayCommands(true);
|
||||
|
||||
MessageFlushUpdates().dispatch();
|
||||
}
|
||||
|
||||
void UndoRedoController::replayCommands(bool removeLast)
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include "utility/messaging/type/MessageRedo.h"
|
||||
#include "utility/messaging/type/MessageRefresh.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 "component/controller/Controller.h"
|
||||
@@ -35,6 +37,8 @@ class UndoRedoController
|
||||
, public MessageListener<MessageRedo>
|
||||
, public MessageListener<MessageRefresh>
|
||||
, public MessageListener<MessageSearch>
|
||||
, public MessageListener<MessageShowFile>
|
||||
, public MessageListener<MessageShowScope>
|
||||
, public MessageListener<MessageUndo>
|
||||
{
|
||||
public:
|
||||
@@ -63,6 +67,8 @@ private:
|
||||
virtual void handleMessage(MessageRedo* message);
|
||||
virtual void handleMessage(MessageRefresh* message);
|
||||
virtual void handleMessage(MessageSearch* message);
|
||||
virtual void handleMessage(MessageShowFile* message);
|
||||
virtual void handleMessage(MessageShowScope* message);
|
||||
virtual void handleMessage(MessageUndo* message);
|
||||
|
||||
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