diff --git a/src/lib/component/controller/BookmarkController.cpp b/src/lib/component/controller/BookmarkController.cpp index ef9cb59e..8e330afb 100644 --- a/src/lib/component/controller/BookmarkController.cpp +++ b/src/lib/component/controller/BookmarkController.cpp @@ -32,6 +32,12 @@ BookmarkController::~BookmarkController() void BookmarkController::clear() { + m_activeNodeIds.clear(); + m_activeEdgeIds.clear(); + + m_hasBookmarkForActiveToken = false; + + getView()->setCreateButtonState(BookmarkView::CreateButtonState::CANNOT_CREATE); } std::vector> BookmarkController::getBookmarks( @@ -97,6 +103,11 @@ std::shared_ptr BookmarkController::getBookmarkForActiveToken() const return std::shared_ptr(); } +bool BookmarkController::canCreateBookmark() const +{ + return m_activeNodeIds.size() || m_activeEdgeIds.size(); +} + BookmarkController::BookmarkCache::BookmarkCache(StorageAccess* storageAccess) : m_storageAccess(storageAccess) { @@ -128,6 +139,11 @@ std::vector BookmarkController::BookmarkCache::getAllEdgeBookmarks return m_edgeBookmarks; } +void BookmarkController::handleMessage(MessageActivateAll* message) +{ + clear(); +} + void BookmarkController::handleMessage(MessageActivateBookmark* message) { LOG_INFO_STREAM(<< "Attempting to activate Bookmark"); @@ -203,7 +219,7 @@ void BookmarkController::handleMessage(MessageActivateTokens* message) getView()->setCreateButtonState(BookmarkView::CreateButtonState::CAN_CREATE); } } - else if(!message->isEdge) + else if (!message->isEdge) { LOG_INFO_STREAM(<< "Registering new Node"); @@ -254,8 +270,7 @@ void BookmarkController::handleMessage(MessageCreateBookmark* message) LOG_ERROR("Cannot create bookmark for edge if no active node exists"); } - const Id id = m_storageAccess->addEdgeBookmark(bookmark); - bookmark.setId(id); + m_storageAccess->addEdgeBookmark(bookmark); } else { @@ -273,8 +288,7 @@ void BookmarkController::handleMessage(MessageCreateBookmark* message) NodeBookmark bookmark(0, displayName, message->comment, TimePoint::now(), category); bookmark.setNodeIds(m_activeNodeIds); - const Id id = m_storageAccess->addNodeBookmark(bookmark); - bookmark.setId(id); + m_storageAccess->addNodeBookmark(bookmark); } m_bookmarkCache.clear(); @@ -361,6 +375,11 @@ void BookmarkController::handleMessage(MessageFinishedParsing* message) getView()->enableDisplayBookmarks(true); } +void BookmarkController::handleMessage(MessageShowErrors* message) +{ + clear(); +} + std::vector> BookmarkController::getAllBookmarks() const { LOG_INFO_STREAM(<< "Retrieving all bookmarks"); diff --git a/src/lib/component/controller/BookmarkController.h b/src/lib/component/controller/BookmarkController.h index 9b6440e5..a6bd8b8a 100644 --- a/src/lib/component/controller/BookmarkController.h +++ b/src/lib/component/controller/BookmarkController.h @@ -8,6 +8,7 @@ #include "data/StorageTypes.h" #include "utility/messaging/MessageListener.h" +#include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateBookmark.h" #include "utility/messaging/type/MessageActivateEdge.h" #include "utility/messaging/type/MessageActivateTokens.h" @@ -19,6 +20,7 @@ #include "utility/messaging/type/MessageDisplayBookmarks.h" #include "utility/messaging/type/MessageEditBookmark.h" #include "utility/messaging/type/MessageFinishedParsing.h" +#include "utility/messaging/type/MessageShowErrors.h" #include "component/controller/Controller.h" @@ -26,6 +28,7 @@ class StorageAccess; class BookmarkController : public Controller + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -35,6 +38,7 @@ class BookmarkController , public MessageListener , public MessageListener , public MessageListener + , public MessageListener { public: BookmarkController(StorageAccess* storageAccess); @@ -47,9 +51,12 @@ public: std::vector getActiveTokenDisplayNames() const; std::vector getAllBookmarkCategories() const; + bool hasBookmarkForActiveToken() const; std::shared_ptr getBookmarkForActiveToken() const; + bool canCreateBookmark() const; + private: class BookmarkCache { @@ -69,6 +76,7 @@ private: bool m_edgeBookmarksValid; }; + virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateBookmark* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageCreateBookmark* message); @@ -78,6 +86,7 @@ private: virtual void handleMessage(MessageDeleteBookmarkForActiveTokens* message); virtual void handleMessage(MessageEditBookmark* message); virtual void handleMessage(MessageFinishedParsing* message); + virtual void handleMessage(MessageShowErrors* message); std::vector> getAllBookmarks() const; std::vector> getAllNodeBookmarks() const; diff --git a/src/lib/component/view/BookmarkView.cpp b/src/lib/component/view/BookmarkView.cpp index feaaf22b..3f6e0707 100644 --- a/src/lib/component/view/BookmarkView.cpp +++ b/src/lib/component/view/BookmarkView.cpp @@ -46,6 +46,11 @@ void BookmarkView::handleMessage(MessageDisplayBookmarks* message) void BookmarkView::handleMessage(MessageDisplayBookmarkCreator* message) { + if (!getController()->canCreateBookmark()) + { + return; + } + if (getController()->hasBookmarkForActiveToken()) { displayBookmarkEditor(getController()->getBookmarkForActiveToken(), getController()->getAllBookmarkCategories());