logic: fixes all over the place

* fixed refreshing to send another ui refresh message after parsing
* keepContent field for MessageBase so that views won't update
* fixed searchmatching to only weigh uppercase letters next to lowercase ones
* fixed file not jumping back to snippets when activating edge
* clicking into empty space deselects active edge
* clear file manager files on every fetch
* added db transaction for file clearing
* use zooming instead of changing font size
This commit is contained in:
Eberhard Graether
2015-10-02 17:07:03 +02:00
parent a855e14ebf
commit acfbe510fb
26 changed files with 253 additions and 90 deletions
@@ -26,7 +26,7 @@ const uint CodeController::s_lineRadius = 2;
void CodeController::handleMessage(MessageActivateTokens* message)
{
if (message->isEdge && message->isIgnorable())
if (message->keepContent() && message->isIgnorable())
{
return;
}
@@ -47,6 +47,10 @@ void CodeController::handleMessage(MessageActivateTokens* message)
if (message->isEdge)
{
view->showFirstActiveSnippet();
}
if (message->keepContent())
{
return;
}
@@ -41,10 +41,11 @@ void FeatureController::handleMessage(MessageActivateEdge* message)
return;
}
MessageActivateTokens msg(std::vector<Id>(1, edgeId));
msg.isEdge = true;
msg.undoRedoType = message->undoRedoType;
msg.dispatchImmediately();
MessageActivateTokens m(std::vector<Id>(1, edgeId));
m.isEdge = true;
m.undoRedoType = message->undoRedoType;
m.setKeepContent(message->keepContent());
m.dispatchImmediately();
}
}
@@ -52,6 +53,7 @@ void FeatureController::handleMessage(MessageActivateFile* message)
{
MessageActivateTokens m(std::vector<Id>(1, m_storageAccess->getTokenIdForFileNode(message->filePath)));
m.undoRedoType = message->undoRedoType;
m.setKeepContent(message->keepContent());
m.dispatchImmediately();
}
@@ -80,6 +82,7 @@ void FeatureController::handleMessage(MessageActivateNodes* message)
MessageActivateTokens m(nodeIds);
m.isFromSystem = message->isFromSystem;
m.undoRedoType = message->undoRedoType;
m.setKeepContent(message->keepContent());
m.dispatchImmediately();
}
@@ -88,16 +91,16 @@ void FeatureController::handleMessage(MessageActivateTokenLocations* message)
std::vector<Id> nodeIds = m_storageAccess->getNodeIdsForLocationIds(message->locationIds);
nodeIds = m_storageAccess->getActiveTokenIdsForTokenIds(nodeIds);
MessageActivateNodes msg;
MessageActivateNodes m;
for (Id nodeId : nodeIds)
{
msg.addNode(
m.addNode(
nodeId,
m_storageAccess->getNodeTypeForNodeWithId(nodeId),
m_storageAccess->getNameHierarchyForNodeWithId(nodeId)
);
}
msg.dispatchImmediately();
m.dispatchImmediately();
}
void FeatureController::handleMessage(MessageSearch* message)
@@ -107,6 +110,7 @@ void FeatureController::handleMessage(MessageSearch* message)
MessageActivateTokens m(tokenIds);
m.undoRedoType = message->undoRedoType;
m.setKeepContent(message->keepContent());
m.dispatchImmediately();
}
@@ -25,7 +25,7 @@ GraphController::~GraphController()
void GraphController::handleMessage(MessageActivateTokens* message)
{
if (message->isEdge && message->tokenIds.size() == 1)
if (message->isEdge || message->keepContent())
{
m_activeEdgeIds = message->tokenIds;
setActiveAndVisibility(utility::concat(m_activeNodeIds, m_activeEdgeIds));
@@ -14,7 +14,7 @@ SearchController::~SearchController()
void SearchController::handleMessage(MessageActivateTokens* message)
{
if (!message->isEdge)
if (!message->keepContent())
{
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
}
@@ -4,9 +4,11 @@
#include "utility/messaging/type/MessageFlushUpdates.h"
#include "component/view/UndoRedoView.h"
#include "data/access/StorageAccess.h"
UndoRedoController::UndoRedoController()
: m_lastCommand(nullptr, 0)
UndoRedoController::UndoRedoController(StorageAccess* storageAccess)
: m_storageAccess(storageAccess)
, m_lastCommand(nullptr, 0)
{
}
@@ -63,6 +65,34 @@ void UndoRedoController::handleMessage(MessageActivateNodes* message)
processCommand(command);
}
void UndoRedoController::handleMessage(MessageDeactivateEdge* message)
{
MessageBase* m = nullptr;
if (m_lastCommand.message && m_lastCommand.order == 0)
{
m = m_lastCommand.message.get();
}
else if (m_undo.size())
{
int i = m_undo.size() - 1;
while (i >= 0 && m_undo[i].order > 0)
{
i--;
}
m = m_undo[i].message.get();
}
if (m)
{
bool keepContent = m->keepContent();
m->undoRedoType = MessageBase::UNDOTYPE_NORMAL;
m->setKeepContent(true);
m->dispatch();
m->setKeepContent(keepContent);
}
}
void UndoRedoController::handleMessage(MessageGraphNodeBundleSplit* message)
{
Command command(std::make_shared<MessageGraphNodeBundleSplit>(*message), 1);
@@ -101,8 +131,31 @@ void UndoRedoController::handleMessage(MessageRedo* message)
void UndoRedoController::handleMessage(MessageRefresh* message)
{
if (!message->uiOnly)
{
return;
}
if (!m_lastCommand.message)
{
Id nodeId = m_storageAccess->getIdForNodeWithNameHierarchy(NameHierarchy("main"));
if (!nodeId)
{
nodeId = m_storageAccess->getIdForFirstNode();
}
if (nodeId)
{
MessageActivateNodes m;
m.addNode(
nodeId,
m_storageAccess->getNodeTypeForNodeWithId(nodeId),
m_storageAccess->getNameHierarchyForNodeWithId(nodeId)
);
m.isFromSystem = true;
m.dispatch();
}
return;
}
@@ -8,6 +8,7 @@
#include "utility/messaging/type/MessageActivateEdge.h"
#include "utility/messaging/type/MessageActivateFile.h"
#include "utility/messaging/type/MessageActivateNodes.h"
#include "utility/messaging/type/MessageDeactivateEdge.h"
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
#include "utility/messaging/type/MessageGraphNodeExpand.h"
#include "utility/messaging/type/MessageGraphNodeMove.h"
@@ -21,6 +22,7 @@
#include "component/controller/Controller.h"
class StorageAccess;
class UndoRedoView;
class UndoRedoController
@@ -28,6 +30,7 @@ class UndoRedoController
, public MessageListener<MessageActivateEdge>
, public MessageListener<MessageActivateFile>
, public MessageListener<MessageActivateNodes>
, public MessageListener<MessageDeactivateEdge>
, public MessageListener<MessageGraphNodeBundleSplit>
, public MessageListener<MessageGraphNodeExpand>
, public MessageListener<MessageGraphNodeMove>
@@ -40,7 +43,7 @@ class UndoRedoController
, public MessageListener<MessageUndo>
{
public:
UndoRedoController();
UndoRedoController(StorageAccess* storageAccess);
virtual ~UndoRedoController();
UndoRedoView* getView();
@@ -57,6 +60,7 @@ private:
virtual void handleMessage(MessageActivateEdge* message);
virtual void handleMessage(MessageActivateFile* message);
virtual void handleMessage(MessageActivateNodes* message);
virtual void handleMessage(MessageDeactivateEdge* message);
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
virtual void handleMessage(MessageGraphNodeExpand* message);
virtual void handleMessage(MessageGraphNodeMove* message);
@@ -77,6 +81,8 @@ private:
void clear();
StorageAccess* m_storageAccess;
Command m_lastCommand;
std::deque<Command> m_undo;