logic: MessageFlushUpdates to send new Graph to GraphView when restoring Graph

This commit is contained in:
Eberhard Graether
2015-07-30 20:24:18 +02:00
parent 5f25311389
commit 165f32f6a6
7 changed files with 84 additions and 43 deletions
+14 -2
View File
@@ -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)
+1
View File
@@ -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