From 6cbb7ebfb14d74212e16a5a6a293ccf326936540 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Fri, 10 Apr 2020 18:45:16 +0300 Subject: [PATCH] [bookmarks] Fixed displaying of a selection marker after track deselection. --- map/bookmark_manager.cpp | 65 ++++++++++++++++++++++++++-------------- map/bookmark_manager.hpp | 4 ++- map/framework.cpp | 6 ++-- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index f6b274a6be..9740cdeb6c 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -1217,8 +1217,37 @@ int BookmarkManager::GetTrackSelectionMarkMinZoom(kml::TrackId trackId) const return zoom; } +void BookmarkManager::SetTrackSelectionMark(kml::TrackId trackId, m2::PointD const & pt, + double distance) +{ + auto const markId = GetTrackSelectionMarkId(trackId); + + auto es = GetEditSession(); + TrackSelectionMark * trackSelectionMark = nullptr; + if (markId == kml::kInvalidMarkId) + { + trackSelectionMark = es.CreateUserMark(pt); + trackSelectionMark->SetTrackId(trackId); + + if (m_drapeEngine) + trackSelectionMark->SetMinVisibleZoom(GetTrackSelectionMarkMinZoom(trackId)); + } + else + { + trackSelectionMark = es.GetMarkForEdit(markId); + trackSelectionMark->SetPosition(pt); + } + trackSelectionMark->SetDistance(distance); + + auto const isVisible = IsVisible(GetTrack(trackId)->GetGroupId()); + trackSelectionMark->SetIsVisible(isVisible); +} + void BookmarkManager::DeleteTrackSelectionMark(kml::TrackId trackId) { + if (trackId == m_selectedTrackId) + m_selectedTrackId = kml::kInvalidTrackId; + auto es = GetEditSession(); auto const markId = GetTrackSelectionMarkId(trackId); if (markId != kml::kInvalidMarkId) @@ -1255,24 +1284,11 @@ void BookmarkManager::SetTrackSelectionInfo(TrackSelectionInfo const & trackSele CHECK_THREAD_CHECKER(m_threadChecker, ()); CHECK_NOT_EQUAL(trackSelectionInfo.m_trackId, kml::kInvalidTrackId, ()); - auto const trackId = trackSelectionInfo.m_trackId; - auto const markId = GetTrackSelectionMarkId(trackId); - auto es = GetEditSession(); - TrackSelectionMark * trackSelectionMark = nullptr; - if (markId == kml::kInvalidMarkId) - { - trackSelectionMark = es.CreateUserMark(trackSelectionInfo.m_trackPoint); - trackSelectionMark->SetTrackId(trackId); - - if (m_drapeEngine) - trackSelectionMark->SetMinVisibleZoom(GetTrackSelectionMarkMinZoom(trackId)); - } - else - { - trackSelectionMark = es.GetMarkForEdit(markId); - } + auto const markId = GetTrackSelectionMarkId(trackSelectionInfo.m_trackId); + CHECK_NOT_EQUAL(markId, kml::kInvalidMarkId, ()); + auto trackSelectionMark = es.GetMarkForEdit(markId); trackSelectionMark->SetPosition(trackSelectionInfo.m_trackPoint); trackSelectionMark->SetDistance(trackSelectionInfo.m_distanceInMeters); @@ -1295,9 +1311,7 @@ void BookmarkManager::SetDefaultTrackSelection(kml::TrackId trackId, bool showIn auto es = GetEditSession(); if (showInfoSign) SetTrackInfoMark(trackId, pt); - - SetTrackSelectionInfo(TrackSelectionInfo(trackId, pt, distance), false /* notifyListeners */); - OnTrackDeselected(trackId); + SetTrackSelectionMark(trackId, pt, distance); } void BookmarkManager::OnTrackSelected(kml::TrackId trackId) @@ -1312,20 +1326,25 @@ void BookmarkManager::OnTrackSelected(kml::TrackId trackId) auto * trackSelectionMark = es.GetMarkForEdit(markId); trackSelectionMark->SetIsVisible(false); + + m_selectedTrackId = trackId; } -void BookmarkManager::OnTrackDeselected(kml::TrackId trackId) +void BookmarkManager::OnTrackDeselected() { CHECK_THREAD_CHECKER(m_threadChecker, ()); - CHECK_NOT_EQUAL(trackId, kml::kInvalidTrackId, ()); + if (m_selectedTrackId == kml::kInvalidTrackId) + return; - auto const markId = GetTrackSelectionMarkId(trackId); + auto const markId = GetTrackSelectionMarkId(m_selectedTrackId); CHECK_NOT_EQUAL(markId, kml::kInvalidMarkId, ()); auto es = GetEditSession(); auto * trackSelectionMark = es.GetMarkForEdit(markId); - auto const isVisible = IsVisible(GetTrack(trackId)->GetGroupId()); + auto const isVisible = IsVisible(GetTrack(m_selectedTrackId)->GetGroupId()); trackSelectionMark->SetIsVisible(isVisible); + + m_selectedTrackId = kml::kInvalidTrackId; } void BookmarkManager::PrepareBookmarksAddresses(std::vector & bookmarksForSort, diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index cc374e33ce..bda1790726 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -488,7 +488,7 @@ public: void SetTrackSelectionInfo(TrackSelectionInfo const & trackSelectionInfo, bool notifyListeners); void SetDefaultTrackSelection(kml::TrackId trackId, bool showInfoSign); void OnTrackSelected(kml::TrackId trackId); - void OnTrackDeselected(kml::TrackId trackId); + void OnTrackDeselected(); private: class MarksChangesTracker : public df::UserMarksProvider @@ -762,6 +762,7 @@ private: kml::MarkId GetTrackSelectionMarkId(kml::TrackId trackId) const; int GetTrackSelectionMarkMinZoom(kml::TrackId trackId) const; + void SetTrackSelectionMark(kml::TrackId trackId, m2::PointD const & pt, double distance); void DeleteTrackSelectionMark(kml::TrackId trackId); void SetTrackInfoMark(kml::TrackId trackId, m2::PointD const & pt); void ResetTrackInfoMark(kml::TrackId trackId); @@ -815,6 +816,7 @@ private: MyPositionMarkPoint * m_myPositionMark = nullptr; kml::MarkId m_trackInfoMarkId = kml::kInvalidMarkId; + kml::TrackId m_selectedTrackId = kml::kInvalidTrackId; m2::PointF m_maxBookmarkSymbolSize; bool m_asyncLoadingInProgress = false; diff --git a/map/framework.cpp b/map/framework.cpp index 23c7f9f2d3..8c94099e7b 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -2402,6 +2402,8 @@ void Framework::ActivateMapSelection(std::optional const & inf if (info->GetSelectedObject() == df::SelectionShape::OBJECT_TRACK) GetBookmarkManager().OnTrackSelected(info->GetTrackId()); + else + GetBookmarkManager().OnTrackDeselected(); CHECK_NOT_EQUAL(info->GetSelectedObject(), df::SelectionShape::OBJECT_EMPTY, ("Empty selections are impossible.")); if (m_drapeEngine != nullptr) @@ -2431,9 +2433,7 @@ void Framework::DeactivateMapSelection(bool notifyUI) if (somethingWasAlreadySelected) { - if (m_currentPlacePageInfo->GetSelectedObject() == df::SelectionShape::OBJECT_TRACK) - GetBookmarkManager().OnTrackDeselected(m_currentPlacePageInfo->GetTrackId()); - + GetBookmarkManager().OnTrackDeselected(); if (m_drapeEngine != nullptr) m_drapeEngine->DeselectObject(); }