From 0468168d61ba2ee3eba4a6ec842f605e04432544 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Wed, 26 Apr 2017 00:33:34 +0200 Subject: [PATCH] ui: Fixes and improvements for bookmarks * moved bookmark buttons behind search bar * suggest qualified name when creating, file name for files * fixed bug when updating bookmark category * changed comment toggle arrow * changed edit and delete icons * fixed undo for edge bookmarks * keep categories always alphabetical regardless of subsorting * keep category expansion state when opening and closing browser * removed QtBookmarkBar, moved logic into QtBookmarkView * added bookmarks Menu with shortcuts Ctrl + D: Create Bookmark Ctrl + B: Bookmark Manager --- .../data/gui/bookmark_view/bookmark_view.css | 23 +- .../bookmark_view/images/arrow_line_down.png | Bin 0 -> 461 bytes .../bookmark_view/images/arrow_line_up.png | Bin 0 -> 1021 bytes .../images/bookmark_delete_icon.png | Bin 1752 -> 1000 bytes .../images/bookmark_edit_icon.png | Bin 1756 -> 1681 bytes .../bookmark_view/images/bookmark_icon.png | Bin 649 -> 0 bytes .../bookmark_view/images/bookmark_icon_2.png | Bin 602 -> 0 bytes src/lib/component/ComponentManager.cpp | 6 +- .../controller/BookmarkController.cpp | 52 ++-- .../component/controller/BookmarkController.h | 15 +- src/lib/component/view/BookmarkView.cpp | 29 +- src/lib/data/PersistentStorage.cpp | 5 - src/lib/data/PersistentStorage.h | 1 - src/lib/data/SqliteIndexStorage.cpp | 21 -- src/lib/data/SqliteIndexStorage.h | 2 - src/lib/data/access/StorageAccess.h | 1 - src/lib/data/access/StorageAccessProxy.cpp | 10 - src/lib/data/access/StorageAccessProxy.h | 1 - .../messaging/type/MessageDisplayBookmarks.h | 8 +- src/lib_gui/CMakeLists.txt | 2 - src/lib_gui/qt/element/QtBookmark.cpp | 41 ++- src/lib_gui/qt/element/QtBookmark.h | 10 +- src/lib_gui/qt/element/QtBookmarkBar.cpp | 254 ------------------ src/lib_gui/qt/element/QtBookmarkBar.h | 69 ----- src/lib_gui/qt/element/QtBookmarkCategory.cpp | 27 +- src/lib_gui/qt/view/QtBookmarkView.cpp | 236 ++++++++++++++-- src/lib_gui/qt/view/QtBookmarkView.h | 36 ++- src/lib_gui/qt/view/QtGraphView.cpp | 16 +- src/lib_gui/qt/window/QtBookmarkBrowser.cpp | 62 +++-- src/lib_gui/qt/window/QtBookmarkBrowser.h | 9 - src/lib_gui/qt/window/QtMainWindow.cpp | 21 ++ src/lib_gui/qt/window/QtMainWindow.h | 4 + 32 files changed, 398 insertions(+), 563 deletions(-) create mode 100644 bin/app/data/gui/bookmark_view/images/arrow_line_down.png create mode 100644 bin/app/data/gui/bookmark_view/images/arrow_line_up.png delete mode 100644 bin/app/data/gui/bookmark_view/images/bookmark_icon.png delete mode 100644 bin/app/data/gui/bookmark_view/images/bookmark_icon_2.png delete mode 100644 src/lib_gui/qt/element/QtBookmarkBar.cpp delete mode 100644 src/lib_gui/qt/element/QtBookmarkBar.h diff --git a/bin/app/data/gui/bookmark_view/bookmark_view.css b/bin/app/data/gui/bookmark_view/bookmark_view.css index d259784f..49b65aaf 100644 --- a/bin/app/data/gui/bookmark_view/bookmark_view.css +++ b/bin/app/data/gui/bookmark_view/bookmark_view.css @@ -49,7 +49,7 @@ #category_name { color: black; - font-size: 14px; + font-size: 12px; margin-left: 1px; } @@ -60,17 +60,24 @@ height: 20px; } +#edit_button { + margin-right: 3px; +} + /* Bookmark */ #bookmark { - padding: 3px 10px 3px 23px; + padding: 3px 10px 3px 3px; + margin: 0; background: white; border-bottom: 1px solid #DFDFDF; } #bookmark_comment { font-size: 12px; - margin: 3px 0px 3px 26px; + padding: 3px 6px 3px 7px; + margin: 0; + color: #707070; } #activate_button { @@ -78,7 +85,7 @@ border: 2px solid white; border-radius: 8px; color: black; - font-size: 14px; + font-size: 12px; padding: 4px 8px 3px; text-align: right; } @@ -87,10 +94,14 @@ border-color: #2D3C86; } +#activate_button:pressed { + background: #CDD4F7; +} + #date_label { - margin: 3px 5px 0px; + margin: 1px 5px 0px; font-size: 12px; - color: gray; + color: #707070; } /* Search bar buttons */ diff --git a/bin/app/data/gui/bookmark_view/images/arrow_line_down.png b/bin/app/data/gui/bookmark_view/images/arrow_line_down.png new file mode 100644 index 0000000000000000000000000000000000000000..106aa7f22af754830e55a1d021bc2d1fbe7f53fd GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+81p?{978H@y}9`?x5+_*?ZL4U2DbthcOXh&aVubU-ypq3 z+JfosfxHJC-+UAvvKOTvJ@oRk+I{=4eeQ7wc2rE>y~%+=K*6Db2|rC;w08>6*j)oSkjx+!-{-_%Malv6Cn+a literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/bookmark_view/images/arrow_line_up.png b/bin/app/data/gui/bookmark_view/images/arrow_line_up.png new file mode 100644 index 0000000000000000000000000000000000000000..7247382bc168755ce327a3f40bff479cebaa36cd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-D%zPiKZiltlRY zSS9D@>LsS+C#C9D0BS3v*iS0onb8|oS8W7AZUnTBv4iY|~0L>t&w5X)?UL1X1yl$uzQ zUlfv`pJV3;3OfbQ+{EAFUm{>`W56OJ3||N3^AyB8-0*> zk-QHHTd*iFaP7E&Ho+pwj!RSTtSvBFA9%VrhEy=Vy~3M&*g&A|VV|P{i<2VDAq5F1 z#g>B#DLh;Y1(+5l3vk^2?%8P)xhZ++%UL?_J;VOJ`FwYC)pFrR1||-L1|o?K`wrax zr5S!YLOWPubM32NruT|91uCx3aeQ1Yv+uk0B8Lag#cDf#yvlcRT5#=moU&W@eB0y2 zo$*W`C-z=^^xQGq@{)4G>TI5nUvIXy_j=8}Z&DQTZ~pU%vmeWxD_xOsWo>^Vmzv$8 zV)r|r=YAHrxazdXocrIUwz|n|jr$Rum%IA?e>1PXoaOJH_bq<@L?EBlvaJ2iiX{2X zA&>uwnRqE@Jc`-3%;e^^=dmFPT<6}`>YV4E^+9U=*{9#`?e6uO8gE*}TlVW+rT5|N zxyswyvnx{imu|J)@@~!5^4^f-=6$TaTa`2>7BBl&th+8#yfAR;O1D4zu2;AjpL=;{ z=ib=c&y=sbEPu6Hz3joAd&;dZZkfsdQ{|B=6t4ey{d?TUf9p8YL3*7*Z)LY ztNq{GUKK3azxqYU+t9^TiC6F4Hr*k{#KmdK II;Vst053In82|tP literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/bookmark_view/images/bookmark_delete_icon.png b/bin/app/data/gui/bookmark_view/images/bookmark_delete_icon.png index bc8dfc75b2a154351bfb640e3fa368732c13bbd0..92af8e3f99570d35896b9850e563607c3686e3b3 100644 GIT binary patch delta 942 zcmV;f15y0g4d@4uNPh#0NklS*@MUp&Wq4a=qIvrdF}kCLCb{JLVFL;RNBjXW`C)JYlMyg!OeA)W5`m9 zfthrr-xdSE$Fh^+^`}YfG?5RXe}(>$e@82|fyE6%TcMR@+{)$uw(?p~i>zZ!4jc%r z@f7HDd2I+x9#gWZ09ME4`$CS11FW&y8eR(kS8h1I5&*K@D#P*>SFIunG1ZD|^N>@X zY-LW@Mmqn>R)0LE4>4{XyfHGXvx(VWA?o1uvZhT%ij~je1tQ>eE!5mYI+CH%9)QrP@jznJE+Kpmp2Nl3V9 zM(%yg#uJvxq=d{Bnb%cP$hI?=PZP61vP-hWUKH!X|H6yTW>iE#osulcy|CH<6Q z-~hR9=!Z(F0L+=@q0)Y3wV@{OU1V^Ak{-wc^$*tP;$v$^$^ebFcHGSsdvj6B0F5^n zsWw-Z4+yYimYXaaWGhS+AZUZ7i4|541kh=VugVHdHkqdk(0P-&&I(&ZfU#~aLOJH3 z%74f966C?B zM39<2SPM{ULL2!^zhOVT4RR=uHKRt{XeWW*S1b6AZO{syevE)*Tlpuz0K11Fs$>TT QCIA2c07*qoM6N<$f;x)ARsaA1 delta 1700 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 diff --git a/bin/app/data/gui/bookmark_view/images/bookmark_icon.png b/bin/app/data/gui/bookmark_view/images/bookmark_icon.png deleted file mode 100644 index 2f4366a313e793033bed9166ec7b28a45c52010e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)h@#npF`M7;|W=DTH_{{Eo<$^H`C?*5_ zT-m=IQq(Sg<9YxeXlnD(=7Y`L{XX>Q9Z=8;n=|)ww9z%7RM_0+b1GwCSAf!%FC%Hs zK>^AHuuT!JiK~czyR!L}GG43-%w5&x8rFfKD^MnfcP)6KD{yUdp=~D;3UHg!(xgj3 zSrG42pD1FEfosipD4^Q54FOmY&mXYamN7g4n@NM=3AlHN3=hCU`;3bKPTj1_@C012 zb^QSaZcZwHKvo|B$m#pu{X+qXblIfe%y+ZP06`?7`m1w505fNbHh171jj0iH;M0dgD!0Y6ED0oJ6! z$3RXb;4+3)2m&6-g8?4Mg8^QMh;QZINQ40%xTwYt6JE)L0q(da!~g|vNh*K9rV4pN z0{|LUAr2^8yA8?w0VP&!WeiXzl#;WuKcI0HSdz{ku-Tyy(O{1?cP@KJBL_z_?Lkkol$HvK*`00000NkvXXu0mjfltB{~ diff --git a/bin/app/data/gui/bookmark_view/images/bookmark_icon_2.png b/bin/app/data/gui/bookmark_view/images/bookmark_icon_2.png deleted file mode 100644 index 3114024f6adc4bf582e05e005387a94e33008993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;TH)10jTeX0E+kKF@Rbg0n{=$)rA0xT?k;gE{p-x zau1-E5rFy?Zv>#0TLATgHGtwY4gu5>0qA)d16VEB0P6c7fZ}-&K!!+z0w90@0tg@} zn+!lY@S@29)ba@+dmu~rKjW4Q2^+kDR*J5 z`!WE})O`S+p1c`=ZrNPf9?HBBz~f7|0MLEuK9_wlfcsarNtHJM_;=sC3o1Td55V6{ zj(uPNU^%>{%NqgQ;>}&(+yl=YZTo0J7fKEaNP&Hvj+t07*qoM6N<$f}l|XQvd(} diff --git a/src/lib/component/ComponentManager.cpp b/src/lib/component/ComponentManager.cpp index aed46853..ea243f21 100644 --- a/src/lib/component/ComponentManager.cpp +++ b/src/lib/component/ComponentManager.cpp @@ -33,9 +33,6 @@ void ComponentManager::setup(ViewLayout* viewLayout) m_componentFactory->getViewFactory()->createCompositeView(viewLayout, CompositeView::DIRECTION_HORIZONTAL, "Search"); m_compositeViews.push_back(compositeView); - std::shared_ptr bookmarkComponent = m_componentFactory->createBookmarkComponent(compositeView.get()); - m_components.push_back(bookmarkComponent); - std::shared_ptr undoRedoComponent = m_componentFactory->createUndoRedoComponent(compositeView.get()); m_components.push_back(undoRedoComponent); @@ -45,6 +42,9 @@ void ComponentManager::setup(ViewLayout* viewLayout) std::shared_ptr searchComponent = m_componentFactory->createSearchComponent(compositeView.get()); m_components.push_back(searchComponent); + std::shared_ptr bookmarkComponent = m_componentFactory->createBookmarkComponent(compositeView.get()); + m_components.push_back(bookmarkComponent); + std::shared_ptr graphComponent = m_componentFactory->createGraphComponent(viewLayout); m_components.push_back(graphComponent); diff --git a/src/lib/component/controller/BookmarkController.cpp b/src/lib/component/controller/BookmarkController.cpp index f0bf0c26..ef9cb59e 100644 --- a/src/lib/component/controller/BookmarkController.cpp +++ b/src/lib/component/controller/BookmarkController.cpp @@ -16,8 +16,8 @@ #include "data/bookmark/EdgeBookmark.h" #include "data/bookmark/NodeBookmark.h" -const std::string BookmarkController::s_edgeSeperatorToken = "=>"; -const std::string BookmarkController::s_defaultCategoryName = "Default Bookmark Category"; +const std::string BookmarkController::s_edgeSeperatorToken = " => "; +const std::string BookmarkController::s_defaultCategoryName = "default"; BookmarkController::BookmarkController(StorageAccess* storageAccess) : m_storageAccess(storageAccess) @@ -34,7 +34,8 @@ void BookmarkController::clear() { } -std::vector> BookmarkController::getBookmarks(const MessageDisplayBookmarks::BookmarkFilter& filter, const MessageDisplayBookmarks::BookmarkOrder& order) const +std::vector> BookmarkController::getBookmarks( + const MessageDisplayBookmarks::BookmarkFilter& filter, const MessageDisplayBookmarks::BookmarkOrder& order) const { LOG_INFO_STREAM(<< "Retrieving bookmarks with filter \"" << std::to_string(filter) << "\" and order \"" << std::to_string(order) << "\""); @@ -75,7 +76,8 @@ std::shared_ptr BookmarkController::getBookmarkForActiveToken() const { for (std::shared_ptr edgeBookmark: getAllEdgeBookmarks()) { - if (!m_activeNodeIds.empty() && edgeBookmark->getActiveNodeId() == m_activeNodeIds.front() && utility::isPermutation(edgeBookmark->getEdgeIds(), m_activeEdgeIds)) + if (!m_activeNodeIds.empty() && edgeBookmark->getActiveNodeId() == m_activeNodeIds.front() && + utility::isPermutation(edgeBookmark->getEdgeIds(), m_activeEdgeIds)) { return std::make_shared(*(edgeBookmark.get())); } @@ -132,10 +134,6 @@ void BookmarkController::handleMessage(MessageActivateBookmark* message) if (std::shared_ptr bookmark = std::dynamic_pointer_cast(message->bookmark)) { - MessageActivateNodes activateNodes; - activateNodes.addNode(bookmark->getActiveNodeId(), NameHierarchy()); - activateNodes.dispatch(); - if (!bookmark->getEdgeIds().empty()) { const Id firstEdgeId = bookmark->getEdgeIds().front(); @@ -146,6 +144,14 @@ void BookmarkController::handleMessage(MessageActivateBookmark* message) if (bookmark->getEdgeIds().size() == 1) { + Id activeNodeId = bookmark->getActiveNodeId(); + if (activeNodeId) + { + MessageActivateNodes activateNodes; + activateNodes.addNode(activeNodeId, m_storageAccess->getNameHierarchyForNodeId(activeNodeId)); + activateNodes.dispatch(); + } + MessageActivateEdge(firstEdgeId, Edge::intToType(storageEdge.type), sourceName, targetName).dispatch(); } else @@ -292,7 +298,6 @@ void BookmarkController::handleMessage(MessageDeleteBookmark* message) m_storageAccess->removeBookmark(message->bookmarkId); cleanBookmarkCategories(); - m_bookmarkCache.clear(); if (!getBookmarkForActiveToken()) { @@ -327,7 +332,6 @@ void BookmarkController::handleMessage(MessageDeleteBookmarkForActiveTokens* mes m_storageAccess->removeBookmark(bookmark->getId()); cleanBookmarkCategories(); - m_bookmarkCache.clear(); m_hasBookmarkForActiveToken = false; getView()->setCreateButtonState(BookmarkView::CreateButtonState::CAN_CREATE); @@ -347,7 +351,6 @@ void BookmarkController::handleMessage(MessageEditBookmark* message) m_storageAccess->updateBookmark(message->bookmarkId, message->displayName, message->comment, categoryName); cleanBookmarkCategories(); - m_bookmarkCache.clear(); getView()->update(); } @@ -399,9 +402,9 @@ std::vector> BookmarkController::getAllEdgeBookmar std::vector BookmarkController::getActiveNodeDisplayNames() const { std::vector names; - for (const NameHierarchy& nameHierarchy: m_storageAccess->getNameHierarchiesForNodeIds(m_activeNodeIds)) + for (Id nodeId : m_activeNodeIds) { - names.push_back(nameHierarchy.getRawName()); + names.push_back(getNodeDisplayName(nodeId)); } return names; } @@ -421,11 +424,19 @@ std::vector BookmarkController::getActiveEdgeDisplayNames() const std::string BookmarkController::getNodeDisplayName(const Id nodeId) const { + Node::NodeType type = m_storageAccess->getNodeTypeForNodeWithId(nodeId); NameHierarchy nameHierarchy = m_storageAccess->getNameHierarchyForNodeId(nodeId); - return nameHierarchy.getRawName(); + + if (type == Node::NODE_FILE) + { + return FilePath(nameHierarchy.getQualifiedName()).fileName(); + } + + return nameHierarchy.getQualifiedName(); } -std::vector> BookmarkController::getFilteredBookmarks(const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkFilter& filter) const +std::vector> BookmarkController::getFilteredBookmarks( + const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkFilter& filter) const { std::vector> result; @@ -457,7 +468,8 @@ std::vector> BookmarkController::getFilteredBookmarks( return result; } -std::vector> BookmarkController::getOrderedBookmarks(const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkOrder& order) const +std::vector> BookmarkController::getOrderedBookmarks( + const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkOrder& order) const { std::vector> result = bookmarks; @@ -481,7 +493,8 @@ std::vector> BookmarkController::getOrderedBookmarks(c return result; } -std::vector> BookmarkController::getDateOrderedBookmarks(const std::vector>& bookmarks, const bool ascending) const +std::vector> BookmarkController::getDateOrderedBookmarks( + const std::vector>& bookmarks, const bool ascending) const { std::vector> result = bookmarks; @@ -495,7 +508,8 @@ std::vector> BookmarkController::getDateOrderedBookmar return result; } -std::vector> BookmarkController::getNameOrderedBookmarks(const std::vector>& bookmarks, const bool ascending) const +std::vector> BookmarkController::getNameOrderedBookmarks( + const std::vector>& bookmarks, const bool ascending) const { std::vector> result = bookmarks; @@ -511,6 +525,8 @@ std::vector> BookmarkController::getNameOrderedBookmar void BookmarkController::cleanBookmarkCategories() { + m_bookmarkCache.clear(); + std::vector> bookmarks = getAllBookmarks(); for (const BookmarkCategory& category: getAllBookmarkCategories()) diff --git a/src/lib/component/controller/BookmarkController.h b/src/lib/component/controller/BookmarkController.h index c07c2758..9b6440e5 100644 --- a/src/lib/component/controller/BookmarkController.h +++ b/src/lib/component/controller/BookmarkController.h @@ -42,7 +42,8 @@ public: virtual void clear(); - std::vector> getBookmarks(const MessageDisplayBookmarks::BookmarkFilter& filter, const MessageDisplayBookmarks::BookmarkOrder& order) const; + std::vector> getBookmarks( + const MessageDisplayBookmarks::BookmarkFilter& filter, const MessageDisplayBookmarks::BookmarkOrder& order) const; std::vector getActiveTokenDisplayNames() const; std::vector getAllBookmarkCategories() const; @@ -86,10 +87,14 @@ private: std::vector getActiveEdgeDisplayNames() const; std::string getNodeDisplayName(const Id id) const; - std::vector> getFilteredBookmarks(const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkFilter& filter) const; - std::vector> getOrderedBookmarks(const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkOrder& order) const; - std::vector> getDateOrderedBookmarks(const std::vector>& bookmarks, const bool ascending) const; - std::vector> getNameOrderedBookmarks(const std::vector>& bookmarks, const bool ascending) const; + std::vector> getFilteredBookmarks( + const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkFilter& filter) const; + std::vector> getOrderedBookmarks( + const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkOrder& order) const; + std::vector> getDateOrderedBookmarks( + const std::vector>& bookmarks, const bool ascending) const; + std::vector> getNameOrderedBookmarks( + const std::vector>& bookmarks, const bool ascending) const; void cleanBookmarkCategories(); diff --git a/src/lib/component/view/BookmarkView.cpp b/src/lib/component/view/BookmarkView.cpp index 35d049a6..feaaf22b 100644 --- a/src/lib/component/view/BookmarkView.cpp +++ b/src/lib/component/view/BookmarkView.cpp @@ -46,40 +46,17 @@ void BookmarkView::handleMessage(MessageDisplayBookmarks* message) void BookmarkView::handleMessage(MessageDisplayBookmarkCreator* message) { - std::vector names = getController()->getActiveTokenDisplayNames(); - if (getController()->hasBookmarkForActiveToken()) { - std::vector categories = getController()->getAllBookmarkCategories(); - - displayBookmarkEditor(getController()->getBookmarkForActiveToken(), categories); + displayBookmarkEditor(getController()->getBookmarkForActiveToken(), getController()->getAllBookmarkCategories()); } else { - for (unsigned int i = 0; i < names.size(); i++) - { - std::string name = names[i]; - - // skip the first letter as to not insert a leading space - for (unsigned int i = 1; i < name.size(); i++) - { - if (std::isupper(name[i])) - { - name.insert(i, 1, ' '); - i++; - } - } - - names[i] = name; - } - - displayBookmarkCreator(names, getController()->getAllBookmarkCategories()); + displayBookmarkCreator(getController()->getActiveTokenDisplayNames(), getController()->getAllBookmarkCategories()); } } void BookmarkView::handleMessage(MessageDisplayBookmarkEditor* message) { - std::vector categories = getController()->getAllBookmarkCategories(); - - displayBookmarkEditor(message->bookmark, categories); + displayBookmarkEditor(message->bookmark, getController()->getAllBookmarkCategories()); } diff --git a/src/lib/data/PersistentStorage.cpp b/src/lib/data/PersistentStorage.cpp index e7d76c98..4b7b6a93 100644 --- a/src/lib/data/PersistentStorage.cpp +++ b/src/lib/data/PersistentStorage.cpp @@ -625,11 +625,6 @@ StorageEdge PersistentStorage::getEdgeById(Id edgeId) const return m_sqliteIndexStorage.getEdgeById(edgeId); } -bool PersistentStorage::checkEdgeExists(Id edgeId) const -{ - return m_sqliteIndexStorage.checkEdgeExists(edgeId); -} - std::shared_ptr PersistentStorage::getFullTextSearchLocations( const std::string& searchTerm, bool caseSensitive ) const diff --git a/src/lib/data/PersistentStorage.h b/src/lib/data/PersistentStorage.h index 46759a8e..81bba249 100644 --- a/src/lib/data/PersistentStorage.h +++ b/src/lib/data/PersistentStorage.h @@ -103,7 +103,6 @@ public: virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const; virtual StorageEdge getEdgeById(Id edgeId) const; - virtual bool checkEdgeExists(Id edgeId) const; virtual std::shared_ptr getFullTextSearchLocations( const std::string& searchTerm, bool caseSensitive) const; diff --git a/src/lib/data/SqliteIndexStorage.cpp b/src/lib/data/SqliteIndexStorage.cpp index daf573c6..844131c9 100644 --- a/src/lib/data/SqliteIndexStorage.cpp +++ b/src/lib/data/SqliteIndexStorage.cpp @@ -504,27 +504,6 @@ std::vector SqliteIndexStorage::getEdgesByTargetsType(const std::ve return doGetAll("WHERE target_node_id IN (" + utility::join(utility::toStrings(targetIds), ',') + ") AND type == " + std::to_string(type)); } -bool SqliteIndexStorage::checkEdgeExists(Id edgeId) const -{ - CppSQLite3Statement stmt = m_database.compileStatement( - ("SELECT type FROM edge WHERE id == " + std::to_string(edgeId) + ";").c_str() - ); - - CppSQLite3Query q = executeQuery(stmt); - - if (!q.eof()) - { - const int type = q.getIntField(0, -1); - - if (type != -1) - { - return true; - } - } - - return false; -} - StorageNode SqliteIndexStorage::getNodeById(Id id) const { std::vector candidates = doGetAll("WHERE id = " + std::to_string(id)); diff --git a/src/lib/data/SqliteIndexStorage.h b/src/lib/data/SqliteIndexStorage.h index b7bd7ee3..699919c3 100644 --- a/src/lib/data/SqliteIndexStorage.h +++ b/src/lib/data/SqliteIndexStorage.h @@ -67,8 +67,6 @@ public: std::vector getEdgesByTargetType(Id targetId, int type) const; std::vector getEdgesByTargetsType(const std::vector& targetIds, int type) const; - bool checkEdgeExists(Id edgeId) const; - StorageNode getNodeById(Id id) const; StorageNode getNodeBySerializedName(const std::string& serializedName) const; diff --git a/src/lib/data/access/StorageAccess.h b/src/lib/data/access/StorageAccess.h index 34b4110c..b762cda8 100644 --- a/src/lib/data/access/StorageAccess.h +++ b/src/lib/data/access/StorageAccess.h @@ -42,7 +42,6 @@ public: virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const = 0; virtual StorageEdge getEdgeById(Id edgeId) const = 0; - virtual bool checkEdgeExists(Id edgeId) const = 0; virtual std::shared_ptr getFullTextSearchLocations( const std::string& searchTerm, bool caseSensitive) const = 0; diff --git a/src/lib/data/access/StorageAccessProxy.cpp b/src/lib/data/access/StorageAccessProxy.cpp index 74072ddd..f0e9b71d 100644 --- a/src/lib/data/access/StorageAccessProxy.cpp +++ b/src/lib/data/access/StorageAccessProxy.cpp @@ -114,16 +114,6 @@ StorageEdge StorageAccessProxy::getEdgeById(Id edgeId) const return StorageEdge(); } -bool StorageAccessProxy::checkEdgeExists(Id edgeId) const -{ - if (hasSubject()) - { - return m_subject->checkEdgeExists(edgeId); - } - - return false; -} - std::shared_ptr StorageAccessProxy::getFullTextSearchLocations( const std::string &searchTerm, bool caseSensitive) const { diff --git a/src/lib/data/access/StorageAccessProxy.h b/src/lib/data/access/StorageAccessProxy.h index 42ee90a3..15354673 100644 --- a/src/lib/data/access/StorageAccessProxy.h +++ b/src/lib/data/access/StorageAccessProxy.h @@ -30,7 +30,6 @@ public: virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const; virtual StorageEdge getEdgeById(Id edgeId) const; - virtual bool checkEdgeExists(Id edgeId) const; virtual std::shared_ptr getFullTextSearchLocations( const std::string& searchTerm, bool caseSensitive) const; diff --git a/src/lib/utility/messaging/type/MessageDisplayBookmarks.h b/src/lib/utility/messaging/type/MessageDisplayBookmarks.h index 1dd22074..138ad6b3 100644 --- a/src/lib/utility/messaging/type/MessageDisplayBookmarks.h +++ b/src/lib/utility/messaging/type/MessageDisplayBookmarks.h @@ -14,7 +14,7 @@ public: NODES, EDGES }; - + enum BookmarkOrder { NONE = 0, @@ -30,6 +30,12 @@ public: { } + MessageDisplayBookmarks() + : filter(MessageDisplayBookmarks::BookmarkFilter::ALL) + , order(MessageDisplayBookmarks::BookmarkOrder::NONE) + { + } + static const std::string getStaticType() { return "MessageDisplayBookmarks"; diff --git a/src/lib_gui/CMakeLists.txt b/src/lib_gui/CMakeLists.txt index 6b6e74e9..d85edb37 100644 --- a/src/lib_gui/CMakeLists.txt +++ b/src/lib_gui/CMakeLists.txt @@ -10,8 +10,6 @@ add_files( qt/element/QtAutocompletionList.h qt/element/QtBookmark.cpp qt/element/QtBookmark.h - qt/element/QtBookmarkBar.cpp - qt/element/QtBookmarkBar.h qt/element/QtBookmarkCategory.cpp qt/element/QtBookmarkCategory.h qt/element/QtCodeArea.cpp diff --git a/src/lib_gui/qt/element/QtBookmark.cpp b/src/lib_gui/qt/element/QtBookmark.cpp index 68a6b128..ada6de43 100644 --- a/src/lib_gui/qt/element/QtBookmark.cpp +++ b/src/lib_gui/qt/element/QtBookmark.cpp @@ -7,16 +7,16 @@ #include #include "utility/messaging/type/MessageActivateBookmark.h" +#include "utility/messaging/type/MessageDeleteBookmark.h" #include "utility/messaging/type/MessageDisplayBookmarkEditor.h" #include "utility/ResourcePaths.h" -#include "data/bookmark/EdgeBookmark.h" #include "qt/window/QtBookmarkCreator.h" #include "qt/utility/utilityQt.h" QtBookmark::QtBookmark() : m_treeWidgetItem(NULL) - , m_arrowImageName("arrow_right.png") + , m_arrowImageName("arrow_line_down.png") , m_hovered(false) , m_ignoreNextResize(false) { @@ -33,21 +33,21 @@ QtBookmark::QtBookmark() buttonsLayout->setContentsMargins(0, 0, 0, 0); buttonsLayout->setAlignment(Qt::AlignTop); - m_toggleCommentButton = new QPushButton(); - m_toggleCommentButton->setObjectName("comment_button"); - m_toggleCommentButton->setToolTip("Show Comment"); - m_toggleCommentButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); - m_toggleCommentButton->setIconSize(QSize(10, 10)); - utility::setWidgetRetainsSpaceWhenHidden(m_toggleCommentButton); - buttonsLayout->addWidget(m_toggleCommentButton); - updateArrow(); - m_activateButton = new QPushButton(); m_activateButton->setObjectName("activate_button"); m_activateButton->setToolTip("Activate bookmark"); m_activateButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); buttonsLayout->addWidget(m_activateButton); + m_toggleCommentButton = new QPushButton(); + m_toggleCommentButton->setObjectName("comment_button"); + m_toggleCommentButton->setToolTip("Show Comment"); + m_toggleCommentButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_toggleCommentButton->setIconSize(QSize(20, 20)); + utility::setWidgetRetainsSpaceWhenHidden(m_toggleCommentButton); + buttonsLayout->addWidget(m_toggleCommentButton); + updateArrow(); + buttonsLayout->addStretch(); m_dateLabel = new QLabel(); @@ -58,6 +58,7 @@ QtBookmark::QtBookmark() m_editButton->setObjectName("edit_button"); m_editButton->setToolTip("Edit bookmark"); m_editButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_editButton->setIconSize(QSize(20, 20)); m_editButton->setIcon(QPixmap((ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_edit_icon.png").c_str())); utility::setWidgetRetainsSpaceWhenHidden(m_editButton); m_editButton->hide(); @@ -67,6 +68,7 @@ QtBookmark::QtBookmark() m_deleteButton->setObjectName("delete_button"); m_deleteButton->setToolTip("Delete bookmark"); m_deleteButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_deleteButton->setIconSize(QSize(20, 20)); m_deleteButton->setIcon(QPixmap((ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_delete_icon.png").c_str())); utility::setWidgetRetainsSpaceWhenHidden(m_deleteButton); m_deleteButton->hide(); @@ -144,13 +146,13 @@ void QtBookmark::commentToggled() if (m_comment->isVisible() == false) { - m_arrowImageName = "arrow_down.png"; + m_arrowImageName = "arrow_line_up.png"; m_comment->show(); m_comment->setMinimumHeight(m_comment->heightForWidth(m_comment->width())); } else { - m_arrowImageName = "arrow_right.png"; + m_arrowImageName = "arrow_line_down.png"; m_comment->hide(); } @@ -231,21 +233,10 @@ void QtBookmark::elideButtonText() m_bookmark->getName().c_str(), Qt::ElideMiddle, m_activateButton->width() - 16)); } -void QtBookmark::handleMessage(MessageEditBookmark* message) -{ - if (m_bookmark->getId() == message->bookmarkId) - { - m_bookmark->setName(message->displayName); - m_bookmark->setComment(message->comment); - - m_activateButton->setText(message->displayName.c_str()); - } -} - void QtBookmark::updateArrow() { QPixmap pixmap((ResourcePaths::getGuiPath() + "bookmark_view/images/" + m_arrowImageName).c_str()); - m_toggleCommentButton->setIcon(QIcon(utility::colorizePixmap(pixmap, m_hovered ? "black" : "#707070"))); + m_toggleCommentButton->setIcon(QIcon(utility::colorizePixmap(pixmap, m_hovered ? "#707070" : "black"))); } std::string QtBookmark::getDateString() const diff --git a/src/lib_gui/qt/element/QtBookmark.h b/src/lib_gui/qt/element/QtBookmark.h index 110143a5..19d6db89 100644 --- a/src/lib_gui/qt/element/QtBookmark.h +++ b/src/lib_gui/qt/element/QtBookmark.h @@ -4,18 +4,14 @@ #include #include #include - -#include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageDeleteBookmark.h" -#include "utility/messaging/type/MessageEditBookmark.h" +#include #include "data/bookmark/Bookmark.h" -#include +class Bookmark; class QtBookmark : public QFrame - , public MessageListener { Q_OBJECT @@ -46,8 +42,6 @@ private slots: void elideButtonText(); private: - void handleMessage(MessageEditBookmark* message) override; - void updateArrow(); std::string getDateString() const; diff --git a/src/lib_gui/qt/element/QtBookmarkBar.cpp b/src/lib_gui/qt/element/QtBookmarkBar.cpp deleted file mode 100644 index 8fd9daf2..00000000 --- a/src/lib_gui/qt/element/QtBookmarkBar.cpp +++ /dev/null @@ -1,254 +0,0 @@ -#include "QtBookmarkBar.h" - -#include -#include -#include - -#include "data/bookmark/EdgeBookmark.h" - -#include "utility/messaging/type/MessageDeleteBookmarkForActiveTokens.h" -#include "utility/messaging/type/MessageDisplayBookmarks.h" -#include "utility/messaging/type/MessageDisplayBookmarkCreator.h" -#include "utility/ResourcePaths.h" - -#include "qt/utility/utilityQt.h" -#include "settings/ApplicationSettings.h" -#include "settings/ColorScheme.h" - -#include "qt/window/QtBookmarkCreator.h" - -#include "qt/window/QtMainWindow.h" - -#include "qt/element/QtBookmark.h" - -QtBookmarkBar::QtBookmarkBar() - : m_displayBookmarksFunctor(std::bind(&QtBookmarkBar::doDisplayBookmarks, this, std::placeholders::_1)) - , m_displayBookmarkCreatorFunctor(std::bind(&QtBookmarkBar::doDisplayBookmarkCreator, this, std::placeholders::_1, std::placeholders::_2)) - , m_displayBookmarkEditorFunctor(std::bind(&QtBookmarkBar::doDisplayBookmarkEditor, this, std::placeholders::_1, std::placeholders::_2)) - , m_setCreateButtonStateFunctor(std::bind(&QtBookmarkBar::doSetCreateButtonState, this, std::placeholders::_1)) - , m_enableDisplayButtonFunctor(std::bind(&QtBookmarkBar::doEnableDisplayButton, this, std::placeholders::_1)) - , m_bookmarkBrowser(NULL) - , m_createButtonState(BookmarkView::CreateButtonState::CANNOT_CREATE) -{ - setObjectName("bookmark_bar"); - - QBoxLayout* layout = new QHBoxLayout(); - layout->setSpacing(0); - layout->setContentsMargins(0, 0, 0, 0); - layout->setAlignment(Qt::AlignTop); - setLayout(layout); - - m_createBookmarkButton = new QPushButton(this); - m_createBookmarkButton->setObjectName("bookmark_button"); - m_createBookmarkButton->setToolTip("create a bookmark for the active symbol"); - m_createBookmarkButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac - layout->addWidget(m_createBookmarkButton); - - m_createBookmarkButton->setEnabled(false); - - connect(m_createBookmarkButton, SIGNAL(clicked()), this, SLOT(createBookmarkClicked())); - - m_showBookmarksButton = new QPushButton(this); - m_showBookmarksButton->setObjectName("show_bookmark_button"); - m_showBookmarksButton->setToolTip("Show bookmarks"); - m_showBookmarksButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); - layout->addWidget(m_showBookmarksButton); - - m_showBookmarksButton->setEnabled(false); - - connect(m_showBookmarksButton, SIGNAL(clicked()), this, SLOT(showBookmarksClicked())); - - refreshStyle(); -} - -QtBookmarkBar::~QtBookmarkBar() -{ -} - -void QtBookmarkBar::refreshStyle() -{ - float height = std::max(ApplicationSettings::getInstance()->getFontSize() + 16, 30); - - m_createBookmarkButton->setFixedHeight(height); - m_showBookmarksButton->setFixedHeight(height); - - m_createBookmarkButton->setIcon(utility::createButtonIcon( - ResourcePaths::getGuiPath() + "bookmark_view/images/edit_bookmark_icon.png", - "search/button" - )); - - m_showBookmarksButton->setIcon(utility::createButtonIcon( - ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_list_icon.png", - "search/button" - )); -} - -void QtBookmarkBar::displayBookmarks(const std::vector>& bookmarks) -{ - m_displayBookmarksFunctor(bookmarks); -} - -void QtBookmarkBar::displayBookmarkCreator(const std::vector& names, const std::vector& categories) -{ - m_displayBookmarkCreatorFunctor(names, categories); -} - -void QtBookmarkBar::displayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories) -{ - m_displayBookmarkEditorFunctor(bookmark, categories); -} - -void QtBookmarkBar::setCreateButtonState(const BookmarkView::CreateButtonState& state) -{ - m_setCreateButtonStateFunctor(state); -} - -void QtBookmarkBar::enableDisplayButton(bool enable) -{ - m_enableDisplayButtonFunctor(enable); -} - -bool QtBookmarkBar::bookmarkBrowserIsVisible() const -{ - if (m_bookmarkBrowser != NULL) - { - return m_bookmarkBrowser->isVisible(); - } - else - { - return false; - } -} - -void QtBookmarkBar::createBookmarkClicked() -{ - if (m_createButtonState == BookmarkView::CreateButtonState::CAN_CREATE) - { - MessageDisplayBookmarkCreator().dispatch(); - } - else if (m_createButtonState == BookmarkView::CreateButtonState::ALREADY_CREATED) - { - QMessageBox msgBox; - msgBox.setText("Edit Bookmark"); - msgBox.setInformativeText("Do you want to update or delete the Bookmark for the active Token?"); - msgBox.addButton("Edit", QMessageBox::ButtonRole::YesRole); - msgBox.addButton("Delete", QMessageBox::ButtonRole::DestructiveRole); - msgBox.addButton("Cancel", QMessageBox::ButtonRole::NoRole); - msgBox.setIcon(QMessageBox::Icon::Question); - int ret = msgBox.exec(); - - if (ret == 0) // QMessageBox::Yes - { - MessageDisplayBookmarkCreator().dispatch(); - } - else if (ret == 1) - { - MessageDeleteBookmarkForActiveTokens().dispatch(); - } - } -} - -void QtBookmarkBar::showBookmarksClicked() -{ - MessageDisplayBookmarks(MessageDisplayBookmarks::BookmarkFilter::ALL, MessageDisplayBookmarks::BookmarkOrder::NONE).dispatch(); -} - -void QtBookmarkBar::handleMessage(MessageEnteredLicense* message) -{ - m_onQtThread( - [=]() - { - // actually only want to enable this when a project is loaded - // maybe factor in licence later... - // m_createBookmarkButton->setEnabled(true); - // m_showBookmarksButton->setEnabled(true); - } - ); -} - -void QtBookmarkBar::doDisplayBookmarkCreator(const std::vector& names, const std::vector& categories) -{ - QtBookmarkCreator* bookmarkCreator = new QtBookmarkCreator(); - bookmarkCreator->setupBookmarkCreator(); - - std::string displayName = ""; - - for (unsigned int i = 0; i < names.size(); i++) - { - displayName += names[i]; - - if (i < names.size() - 1) - { - displayName += "; "; - } - } - - bookmarkCreator->setDisplayName(displayName); - bookmarkCreator->setBookmarkCategories(categories); - bookmarkCreator->show(); - bookmarkCreator->raise(); -} - -void QtBookmarkBar::doDisplayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories) -{ - QtBookmarkCreator* bookmarkCreator = new QtBookmarkCreator(NULL, true, bookmark->getId()); - bookmarkCreator->setupBookmarkCreator(); - bookmarkCreator->setDisplayName(bookmark->getName()); - bookmarkCreator->setComment(bookmark->getComment()); - bookmarkCreator->setBookmarkCategories(categories); - bookmarkCreator->setCurrentBookmarkCategory(bookmark->getCategory()); - bookmarkCreator->setIsEdge((dynamic_cast(bookmark.get()) != NULL)); - - bookmarkCreator->show(); - bookmarkCreator->raise(); -} - -void QtBookmarkBar::doDisplayBookmarks(const std::vector>& bookmarks) -{ - if (m_bookmarkBrowser == NULL) - { - m_bookmarkBrowser = new QtBookmarkBrowser(); - m_bookmarkBrowser->setupBookmarkBrowser(); - } - - m_bookmarkBrowser->setBookmarks(bookmarks); - m_bookmarkBrowser->show(); - m_bookmarkBrowser->raise(); -} - -void QtBookmarkBar::doSetCreateButtonState(const BookmarkView::CreateButtonState& state) -{ - m_createButtonState = state; - - m_createBookmarkButton->setIcon(utility::createButtonIcon( - ResourcePaths::getGuiPath() + "bookmark_view/images/edit_bookmark_icon.png", - "search/button" - )); - - if (state == BookmarkView::CreateButtonState::CAN_CREATE) - { - m_createBookmarkButton->setEnabled(true); - } - else if (state == BookmarkView::CreateButtonState::CANNOT_CREATE) - { - m_createBookmarkButton->setEnabled(false); - } - else if (state == BookmarkView::CreateButtonState::ALREADY_CREATED) - { - m_createBookmarkButton->setEnabled(true); - - m_createBookmarkButton->setIcon(utility::createButtonIcon( - ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_active.png", - "search/button" - )); - } - else - { - m_createBookmarkButton->setEnabled(false); - } -} - -void QtBookmarkBar::doEnableDisplayButton(bool enable) -{ - m_showBookmarksButton->setEnabled(enable); -} diff --git a/src/lib_gui/qt/element/QtBookmarkBar.h b/src/lib_gui/qt/element/QtBookmarkBar.h deleted file mode 100644 index e47efb86..00000000 --- a/src/lib_gui/qt/element/QtBookmarkBar.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef QT_BOOKMARK_BAR_H -#define QT_BOOKMARK_BAR_H - -#include -#include - -#include "data/bookmark/Bookmark.h" - -#include "component/view/BookmarkView.h" -#include "qt/window/QtBookmarkBrowser.h" -#include "qt/utility/QtThreadedFunctor.h" -#include "utility/messaging/type/MessageEnteredLicense.h" -#include "utility/messaging/MessageListener.h" - -#include "data/bookmark/Bookmark.h" - -class QPushButton; - -class QtBookmarkBar - : public QFrame - , public MessageListener -{ - Q_OBJECT - -public: - QtBookmarkBar(); - virtual ~QtBookmarkBar(); - - void refreshStyle(); - - virtual void displayBookmarks(const std::vector>& bookmarks); - virtual void displayBookmarkCreator(const std::vector& names, const std::vector& categories); - virtual void displayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories); - - void setCreateButtonState(const BookmarkView::CreateButtonState& state); - void enableDisplayButton(bool enable); - - bool bookmarkBrowserIsVisible() const; - -private slots: - void createBookmarkClicked(); - void showBookmarksClicked(); - -private: - virtual void handleMessage(MessageEnteredLicense* message); - - void doDisplayBookmarks(const std::vector>& bookmarks); - void doDisplayBookmarkCreator(const std::vector& names, const std::vector& categories); - void doDisplayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories); - void doSetCreateButtonState(const BookmarkView::CreateButtonState& state); - void doEnableDisplayButton(bool enable); - - QtThreadedLambdaFunctor m_onQtThread; - - QPushButton* m_createBookmarkButton; - QPushButton* m_showBookmarksButton; - - QtThreadedFunctor>> m_displayBookmarksFunctor; - QtThreadedFunctor, std::vector> m_displayBookmarkCreatorFunctor; - QtThreadedFunctor, std::vector> m_displayBookmarkEditorFunctor; - QtThreadedFunctor m_setCreateButtonStateFunctor; - QtThreadedFunctor m_enableDisplayButtonFunctor; - - QtBookmarkBrowser* m_bookmarkBrowser; - - BookmarkView::CreateButtonState m_createButtonState; -}; - -#endif // QT_BOOKMARK_BAR_H diff --git a/src/lib_gui/qt/element/QtBookmarkCategory.cpp b/src/lib_gui/qt/element/QtBookmarkCategory.cpp index 4481ffc0..cd50e6bf 100644 --- a/src/lib_gui/qt/element/QtBookmarkCategory.cpp +++ b/src/lib_gui/qt/element/QtBookmarkCategory.cpp @@ -24,7 +24,7 @@ QtBookmarkCategory::QtBookmarkCategory() m_expandButton->setToolTip("Show/Hide bookmarks in this category"); m_expandButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); m_expandButton->setIcon(QPixmap((ResourcePaths::getGuiPath() + "bookmark_view/images/arrow_down.png").c_str())); - m_expandButton->setIconSize(QSize(10, 10)); + m_expandButton->setIconSize(QSize(8, 8)); layout->addWidget(m_expandButton); connect(m_expandButton, SIGNAL(clicked()), this, SLOT(expandClicked())); @@ -39,6 +39,7 @@ QtBookmarkCategory::QtBookmarkCategory() m_deleteButton->setObjectName("category_delete_button"); m_deleteButton->setToolTip("Delete this Bookmark Category and the containing Bookmarks"); m_deleteButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_deleteButton->setIconSize(QSize(20, 20)); m_deleteButton->setIcon(QPixmap((ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_delete_icon.png").c_str())); utility::setWidgetRetainsSpaceWhenHidden(m_deleteButton); m_deleteButton->hide(); @@ -53,22 +54,12 @@ QtBookmarkCategory::~QtBookmarkCategory() void QtBookmarkCategory::setName(const std::string& name) { - if (m_name != NULL) - { - m_name->setText(name.c_str()); - } + m_name->setText(name.c_str()); } std::string QtBookmarkCategory::getName() const { - std::string result = ""; - - if (m_name != NULL) - { - result = m_name->text().toStdString(); - } - - return result; + return m_name->text().toStdString(); } void QtBookmarkCategory::setId(const Id id) @@ -107,15 +98,7 @@ void QtBookmarkCategory::expandClicked() { if (m_treeItem != NULL) { - if (m_treeItem->isExpanded()) - { - m_treeItem->setExpanded(false); - } - else - { - m_treeItem->setExpanded(true); - } - + m_treeItem->setExpanded(!m_treeItem->isExpanded()); updateArrow(); } } diff --git a/src/lib_gui/qt/view/QtBookmarkView.cpp b/src/lib_gui/qt/view/QtBookmarkView.cpp index b798b67f..ba767260 100644 --- a/src/lib_gui/qt/view/QtBookmarkView.cpp +++ b/src/lib_gui/qt/view/QtBookmarkView.cpp @@ -1,26 +1,35 @@ #include "qt/view/QtBookmarkView.h" -#include "qt/window/QtBookmarkBrowser.h" -#include "qt/utility/utilityQt.h" +#include +#include +#include +#include +#include "data/bookmark/EdgeBookmark.h" + +#include "qt/utility/utilityQt.h" +#include "qt/view/QtViewWidgetWrapper.h" +#include "qt/window/QtBookmarkCreator.h" +#include "qt/window/QtBookmarkBrowser.h" + +#include "utility/messaging/type/MessageDeleteBookmarkForActiveTokens.h" +#include "utility/messaging/type/MessageDisplayBookmarks.h" +#include "utility/messaging/type/MessageDisplayBookmarkCreator.h" #include "utility/ResourcePaths.h" -#include "component/controller/RefreshController.h" -#include "qt/view/QtViewWidgetWrapper.h" - +#include "settings/ApplicationSettings.h" #include "settings/ColorScheme.h" QtBookmarkView::QtBookmarkView(ViewLayout* viewLayout) : BookmarkView(viewLayout) - , m_refreshViewFunctor(std::bind(&QtBookmarkView::doRefreshView, this)) + , m_bookmarkBrowser(nullptr) + , m_createButtonState(BookmarkView::CreateButtonState::CANNOT_CREATE) { - m_widget = new QtBookmarkBar(); - setStyleSheet(); + m_widget = new QFrame(); } QtBookmarkView::~QtBookmarkView() { - } void QtBookmarkView::createWidgetWrapper() @@ -30,33 +39,203 @@ void QtBookmarkView::createWidgetWrapper() void QtBookmarkView::initView() { + m_widget->setObjectName("bookmark_bar"); + QBoxLayout* layout = new QHBoxLayout(); + layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); + layout->setAlignment(Qt::AlignTop); + m_widget->setLayout(layout); + + m_createBookmarkButton = new QPushButton(); + m_createBookmarkButton->setObjectName("bookmark_button"); + m_createBookmarkButton->setToolTip("create a bookmark for the active symbol"); + m_createBookmarkButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac + m_createBookmarkButton->setEnabled(false); + layout->addWidget(m_createBookmarkButton); + + connect(m_createBookmarkButton, SIGNAL(clicked()), this, SLOT(createBookmarkClicked())); + + m_showBookmarksButton = new QPushButton(); + m_showBookmarksButton->setObjectName("show_bookmark_button"); + m_showBookmarksButton->setToolTip("Show bookmarks"); + m_showBookmarksButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_showBookmarksButton->setEnabled(false); + layout->addWidget(m_showBookmarksButton); + + connect(m_showBookmarksButton, SIGNAL(clicked()), this, SLOT(showBookmarksClicked())); + + setStyleSheet(); + refreshStyle(); } void QtBookmarkView::refreshView() { - m_refreshViewFunctor(); + m_onQtThread( + [=]() + { + setStyleSheet(); + refreshStyle(); + } + ); } void QtBookmarkView::setCreateButtonState(const CreateButtonState& state) { - m_widget->setCreateButtonState(state); + m_onQtThread( + [=]() + { + m_createButtonState = state; + + m_createBookmarkButton->setIcon(utility::createButtonIcon( + ResourcePaths::getGuiPath() + "bookmark_view/images/edit_bookmark_icon.png", + "search/button" + )); + + if (state == BookmarkView::CreateButtonState::CAN_CREATE) + { + m_createBookmarkButton->setEnabled(true); + } + else if (state == BookmarkView::CreateButtonState::CANNOT_CREATE) + { + m_createBookmarkButton->setEnabled(false); + } + else if (state == BookmarkView::CreateButtonState::ALREADY_CREATED) + { + m_createBookmarkButton->setEnabled(true); + + m_createBookmarkButton->setIcon(utility::createButtonIcon( + ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_active.png", + "search/button" + )); + } + else + { + m_createBookmarkButton->setEnabled(false); + } + } + ); } void QtBookmarkView::enableDisplayBookmarks(bool enable) { - m_widget->enableDisplayButton(enable); + m_onQtThread( + [=]() + { + m_showBookmarksButton->setEnabled(enable); + } + ); } bool QtBookmarkView::bookmarkBrowserIsVisible() const { - return m_widget->bookmarkBrowserIsVisible(); + if (m_bookmarkBrowser != nullptr) + { + return m_bookmarkBrowser->isVisible(); + } + else + { + return false; + } } -void QtBookmarkView::doRefreshView() +void QtBookmarkView::createBookmarkClicked() { - setStyleSheet(); - m_widget->refreshStyle(); + if (m_createButtonState == BookmarkView::CreateButtonState::CAN_CREATE) + { + MessageDisplayBookmarkCreator().dispatch(); + } + else if (m_createButtonState == BookmarkView::CreateButtonState::ALREADY_CREATED) + { + QMessageBox msgBox; + msgBox.setText("Edit Bookmark"); + msgBox.setInformativeText("Do you want to edit or delete the bookmark for this symbol?"); + msgBox.addButton("Edit", QMessageBox::ButtonRole::YesRole); + msgBox.addButton("Delete", QMessageBox::ButtonRole::NoRole); + QPushButton* cancelButton = msgBox.addButton("Cancel", QMessageBox::ButtonRole::RejectRole); + msgBox.setDefaultButton(cancelButton); + msgBox.setIcon(QMessageBox::Icon::Question); + int ret = msgBox.exec(); + + if (ret == 0) // QMessageBox::Yes + { + MessageDisplayBookmarkCreator().dispatch(); + } + else if (ret == 1) + { + MessageDeleteBookmarkForActiveTokens().dispatch(); + } + } +} + +void QtBookmarkView::showBookmarksClicked() +{ + MessageDisplayBookmarks().dispatch(); +} + +void QtBookmarkView::displayBookmarks(const std::vector>& bookmarks) +{ + m_onQtThread( + [=]() + { + if (m_bookmarkBrowser == nullptr) + { + m_bookmarkBrowser = new QtBookmarkBrowser(); + m_bookmarkBrowser->setupBookmarkBrowser(); + } + + m_bookmarkBrowser->setBookmarks(bookmarks); + m_bookmarkBrowser->show(); + m_bookmarkBrowser->raise(); + } + ); +} + +void QtBookmarkView::displayBookmarkCreator(const std::vector& names, const std::vector& categories) +{ + m_onQtThread( + [=]() + { + QtBookmarkCreator* bookmarkCreator = new QtBookmarkCreator(); + bookmarkCreator->setupBookmarkCreator(); + + std::string displayName = ""; + + for (unsigned int i = 0; i < names.size(); i++) + { + displayName += names[i]; + + if (i < names.size() - 1) + { + displayName += "; "; + } + } + + bookmarkCreator->setDisplayName(displayName); + bookmarkCreator->setBookmarkCategories(categories); + bookmarkCreator->show(); + bookmarkCreator->raise(); + } + ); +} + +void QtBookmarkView::displayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories) +{ + m_onQtThread( + [=]() + { + QtBookmarkCreator* bookmarkCreator = new QtBookmarkCreator(nullptr, true, bookmark->getId()); + bookmarkCreator->setupBookmarkCreator(); + bookmarkCreator->setDisplayName(bookmark->getName()); + bookmarkCreator->setComment(bookmark->getComment()); + bookmarkCreator->setBookmarkCategories(categories); + bookmarkCreator->setCurrentBookmarkCategory(bookmark->getCategory()); + bookmarkCreator->setIsEdge((dynamic_cast(bookmark.get()) != nullptr)); + + bookmarkCreator->show(); + bookmarkCreator->raise(); + } + ); } void QtBookmarkView::setStyleSheet() @@ -64,17 +243,20 @@ void QtBookmarkView::setStyleSheet() m_widget->setStyleSheet(utility::getStyleSheet(ResourcePaths::getGuiPath() + "bookmark_view/bookmark_view.css").c_str()); } -void QtBookmarkView::displayBookmarks(const std::vector>& bookmarks) +void QtBookmarkView::refreshStyle() { - m_widget->displayBookmarks(bookmarks); -} + float height = std::max(ApplicationSettings::getInstance()->getFontSize() + 16, 30); -void QtBookmarkView::displayBookmarkCreator(const std::vector& names, const std::vector& categories) -{ - m_widget->displayBookmarkCreator(names, categories); -} + m_createBookmarkButton->setFixedHeight(height); + m_showBookmarksButton->setFixedHeight(height); -void QtBookmarkView::displayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories) -{ - m_widget->displayBookmarkEditor(bookmark, categories); -} \ No newline at end of file + m_createBookmarkButton->setIcon(utility::createButtonIcon( + ResourcePaths::getGuiPath() + "bookmark_view/images/edit_bookmark_icon.png", + "search/button" + )); + + m_showBookmarksButton->setIcon(utility::createButtonIcon( + ResourcePaths::getGuiPath() + "bookmark_view/images/bookmark_list_icon.png", + "search/button" + )); +} diff --git a/src/lib_gui/qt/view/QtBookmarkView.h b/src/lib_gui/qt/view/QtBookmarkView.h index e31926b9..f7876c46 100644 --- a/src/lib_gui/qt/view/QtBookmarkView.h +++ b/src/lib_gui/qt/view/QtBookmarkView.h @@ -3,12 +3,18 @@ #include "component/view/BookmarkView.h" -#include "qt/element/QtBookmarkBar.h" #include "qt/utility/QtThreadedFunctor.h" +class QFrame; +class QPushButton; +class QtBookmarkBrowser; + class QtBookmarkView - : public BookmarkView + : public QObject + , public BookmarkView { + Q_OBJECT + public: QtBookmarkView(ViewLayout* viewLayout); virtual ~QtBookmarkView(); @@ -22,19 +28,29 @@ public: virtual void enableDisplayBookmarks(bool enable); virtual bool bookmarkBrowserIsVisible() const; - + +private slots: + void createBookmarkClicked(); + void showBookmarksClicked(); + private: - void doRefreshView(); - - void setStyleSheet(); - virtual void displayBookmarks(const std::vector>& bookmarks); virtual void displayBookmarkCreator(const std::vector& names, const std::vector& categories); virtual void displayBookmarkEditor(std::shared_ptr bookmark, const std::vector& categories); - QtThreadedFunctor<> m_refreshViewFunctor; + void setStyleSheet(); + void refreshStyle(); - QtBookmarkBar* m_widget; + QtThreadedLambdaFunctor m_onQtThread; + + QFrame* m_widget; + + QPushButton* m_createBookmarkButton; + QPushButton* m_showBookmarksButton; + + QtBookmarkBrowser* m_bookmarkBrowser; + + BookmarkView::CreateButtonState m_createButtonState; }; -#endif // QT_BOOKMARK_VIEW_H \ No newline at end of file +#endif // QT_BOOKMARK_VIEW_H diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 84c6e07b..c590bfae 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -482,6 +482,11 @@ void QtGraphView::doRebuildGraph( finishedTransition(); } + if (graph) + { + m_graph = graph; + } + QGraphicsView* view = getView(); size_t activeNodeCount = 0; @@ -504,7 +509,8 @@ void QtGraphView::doRebuildGraph( } } - if (graph->getTrailMode() == Graph::TRAIL_NONE) + Graph::TrailMode trailMode = m_graph ? m_graph->getTrailMode() : Graph::TRAIL_NONE; + if (trailMode == Graph::TRAIL_NONE) { QPointF center = itemsBoundingRect(m_nodes).center(); Vec2i o = GraphViewStyle::alignOnRaster(Vec2i(center.x(), center.y())); @@ -524,7 +530,7 @@ void QtGraphView::doRebuildGraph( { if (!edge->data || !edge->data->isType(Edge::EDGE_AGGREGATION)) { - createEdge(view, edge.get(), &visibleEdgeIds, graph->getTrailMode()); + createEdge(view, edge.get(), &visibleEdgeIds, trailMode); } } for (std::shared_ptr edge : edges) @@ -535,12 +541,6 @@ void QtGraphView::doRebuildGraph( } } - - if (graph) - { - m_graph = graph; - } - m_centerActiveNode = params.centerActiveNode; m_scrollToTop = params.scrollToTop; m_isIndexedList = params.isIndexedList; diff --git a/src/lib_gui/qt/window/QtBookmarkBrowser.cpp b/src/lib_gui/qt/window/QtBookmarkBrowser.cpp index 7758d7a3..2b8da034 100644 --- a/src/lib_gui/qt/window/QtBookmarkBrowser.cpp +++ b/src/lib_gui/qt/window/QtBookmarkBrowser.cpp @@ -73,10 +73,10 @@ void QtBookmarkBrowser::setupBookmarkBrowser() orderLabel->setObjectName("order_label"); headerLayout->addWidget(orderLabel); - m_orderNames.push_back("Date des."); - m_orderNames.push_back("Date asc."); - m_orderNames.push_back("Name des."); m_orderNames.push_back("Name asc."); + m_orderNames.push_back("Name des."); + m_orderNames.push_back("Date asc."); + m_orderNames.push_back("Date des."); m_orderComboBox = new QComboBox(this); // m_orderComboBox->setToolTip("Select Bookmark Order"); @@ -105,8 +105,6 @@ void QtBookmarkBrowser::setupBookmarkBrowser() m_bookmarkTree->setIndentation(0); m_bookmarkTree->setHeaderLabel("Bookmarks"); - connect(m_bookmarkTree, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(categoryExpansionChanged(QTreeWidgetItem*))); - connect(m_bookmarkTree, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(categoryExpansionChanged(QTreeWidgetItem*))); connect(m_bookmarkTree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(treeItemClicked(QTreeWidgetItem*, int))); bodyLayout->addWidget(m_bookmarkTree); @@ -124,21 +122,46 @@ void QtBookmarkBrowser::setupBookmarkBrowser() void QtBookmarkBrowser::setBookmarks(const std::vector>& bookmarks) { + std::map wasCategoryExpanded; + for (int i = 0; i < m_bookmarkTree->topLevelItemCount(); i++) + { + QTreeWidgetItem* item = m_bookmarkTree->topLevelItem(i); + wasCategoryExpanded.emplace(item->whatsThis(0), item->isExpanded()); + } + m_bookmarkTree->clear(); + std::map categoryNamesOrdered; + for (std::shared_ptr bookmark: bookmarks) + { + categoryNamesOrdered.emplace(bookmark->getCategory().getName(), bookmark->getCategory()); + } + + for (auto p : categoryNamesOrdered) + { + findOrCreateTreeCategory(p.second); + } + for (std::shared_ptr bookmark: bookmarks) { QtBookmark* qtBookmark = new QtBookmark(); qtBookmark->setBookmark(bookmark); - QTreeWidgetItem* top = findOrCreateTreeCategory(bookmark->getCategory()); - QTreeWidgetItem* treeWidgetItem = new QTreeWidgetItem(top); + QTreeWidgetItem* categoryItem = findOrCreateTreeCategory(bookmark->getCategory()); + QTreeWidgetItem* treeWidgetItem = new QTreeWidgetItem(categoryItem); m_bookmarkTree->setItemWidget(treeWidgetItem, 0, qtBookmark); - top->addChild(treeWidgetItem); + categoryItem->addChild(treeWidgetItem); + qtBookmark->setTreeWidgetItem(categoryItem); - qtBookmark->setTreeWidgetItem(top); + bool wasExpanded = true; + auto it = wasCategoryExpanded.find(categoryItem->whatsThis(0)); + if (it != wasCategoryExpanded.end()) + { + wasExpanded = it->second; + } - top->setExpanded(true); + categoryItem->setExpanded(!wasExpanded); + categoryItem->setExpanded(wasExpanded); } } @@ -164,15 +187,6 @@ void QtBookmarkBrowser::filterOrOrderChanged(const QString& text) MessageDisplayBookmarks(getSelectedFilter(), getSelectedOrder()).dispatch(); } -void QtBookmarkBrowser::categoryExpansionChanged(QTreeWidgetItem* item) -{ - QtBookmarkCategory* category = dynamic_cast(m_bookmarkTree->itemWidget(item, 0)); - if (category != NULL) - { - category->updateArrow(); - } -} - void QtBookmarkBrowser::treeItemClicked(QTreeWidgetItem* item, int column) { QtBookmarkCategory* category = dynamic_cast(m_bookmarkTree->itemWidget(item, 0)); @@ -190,16 +204,6 @@ void QtBookmarkBrowser::treeItemClicked(QTreeWidgetItem* item, int column) } } -void QtBookmarkBrowser::handleMessage(MessageDeleteBookmark* message) -{ - MessageDisplayBookmarks(getSelectedFilter(), getSelectedOrder()).dispatch(); -} - -void QtBookmarkBrowser::handleMessage(MessageEditBookmark* message) -{ - MessageDisplayBookmarks(getSelectedFilter(), getSelectedOrder()).dispatch(); -} - MessageDisplayBookmarks::BookmarkFilter QtBookmarkBrowser::getSelectedFilter() { std::string text = m_filterComboBox->currentText().toStdString(); diff --git a/src/lib_gui/qt/window/QtBookmarkBrowser.h b/src/lib_gui/qt/window/QtBookmarkBrowser.h index bf5cd1b4..544067af 100644 --- a/src/lib_gui/qt/window/QtBookmarkBrowser.h +++ b/src/lib_gui/qt/window/QtBookmarkBrowser.h @@ -7,10 +7,7 @@ #include "qt/window/QtWindow.h" -#include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageDeleteBookmark.h" #include "utility/messaging/type/MessageDisplayBookmarks.h" -#include "utility/messaging/type/MessageEditBookmark.h" class Bookmark; class BookmarkCategory; @@ -18,8 +15,6 @@ class QtBookmark; class QtBookmarkBrowser : public QtWindow - , public MessageListener - , public MessageListener { Q_OBJECT @@ -38,13 +33,9 @@ protected: private slots: void filterOrOrderChanged(const QString& text); - void categoryExpansionChanged(QTreeWidgetItem* item); void treeItemClicked(QTreeWidgetItem* item, int column); private: - virtual void handleMessage(MessageDeleteBookmark* message) override; - virtual void handleMessage(MessageEditBookmark* message) override; - MessageDisplayBookmarks::BookmarkFilter getSelectedFilter(); MessageDisplayBookmarks::BookmarkOrder getSelectedOrder(); diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 9df706df..5ba6f07c 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -29,6 +29,7 @@ #include "utility/file/FileSystem.h" #include "utility/logging/logging.h" #include "utility/messaging/type/MessageCodeReference.h" +#include "utility/messaging/type/MessageDisplayBookmarkCreator.h" #include "utility/messaging/type/MessageDisplayBookmarks.h" #include "utility/messaging/type/MessageEnteredLicense.h" #include "utility/messaging/type/MessageFind.h" @@ -114,6 +115,7 @@ QtMainWindow::QtMainWindow() setupProjectMenu(); setupEditMenu(); setupViewMenu(); + setupBookmarksMenu(); setupHelpMenu(); // Need to call loadLayout here for right DockWidget size on Linux @@ -578,6 +580,16 @@ void QtMainWindow::toggleShowDockWidgetTitleBars() setShowDockWidgetTitleBars(!m_showDockWidgetTitleBars); } +void QtMainWindow::showBookmarkCreator() +{ + MessageDisplayBookmarkCreator().dispatch(); +} + +void QtMainWindow::showBookmarkBrowser() +{ + MessageDisplayBookmarks().dispatch(); +} + void QtMainWindow::setupProjectMenu() { QMenu *menu = new QMenu(tr("&Project"), this); @@ -677,6 +689,15 @@ void QtMainWindow::setupViewMenu() m_viewMenu = menu; } +void QtMainWindow::setupBookmarksMenu() +{ + QMenu *menu = new QMenu(tr("&Bookmarks"), this); + menuBar()->addMenu(menu); + + menu->addAction(tr("Bookmark Active Symbols..."), this, SLOT(showBookmarkCreator()), QKeySequence(Qt::CTRL + Qt::Key_D)); + menu->addAction(tr("Bookmark Manager"), this, SLOT(showBookmarkBrowser()), QKeySequence(Qt::CTRL + Qt::Key_B)); +} + void QtMainWindow::setupHelpMenu() { QMenu *menu = new QMenu(tr("&Help"), this); diff --git a/src/lib_gui/qt/window/QtMainWindow.h b/src/lib_gui/qt/window/QtMainWindow.h index 291e9583..824f6536 100644 --- a/src/lib_gui/qt/window/QtMainWindow.h +++ b/src/lib_gui/qt/window/QtMainWindow.h @@ -123,6 +123,9 @@ public slots: private slots: void toggleShowDockWidgetTitleBars(); + void showBookmarkCreator(); + void showBookmarkBrowser(); + private: struct DockWidget { @@ -135,6 +138,7 @@ private: void setupEditMenu(); void setupProjectMenu(); void setupViewMenu(); + void setupBookmarksMenu(); void setupHelpMenu(); void setTrialActionsEnabled(bool enabled);