[bookmarks] Fixed displaying of a selection marker after track deselection.

This commit is contained in:
Daria Volvenkova 2020-04-10 18:45:16 +03:00 committed by Vladimir Byko-Ianko
parent b0f6d6a7ab
commit 6cbb7ebfb1
3 changed files with 48 additions and 27 deletions

View file

@ -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<TrackSelectionMark>(pt);
trackSelectionMark->SetTrackId(trackId);
if (m_drapeEngine)
trackSelectionMark->SetMinVisibleZoom(GetTrackSelectionMarkMinZoom(trackId));
}
else
{
trackSelectionMark = es.GetMarkForEdit<TrackSelectionMark>(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<TrackSelectionMark>(trackSelectionInfo.m_trackPoint);
trackSelectionMark->SetTrackId(trackId);
if (m_drapeEngine)
trackSelectionMark->SetMinVisibleZoom(GetTrackSelectionMarkMinZoom(trackId));
}
else
{
trackSelectionMark = es.GetMarkForEdit<TrackSelectionMark>(markId);
}
auto const markId = GetTrackSelectionMarkId(trackSelectionInfo.m_trackId);
CHECK_NOT_EQUAL(markId, kml::kInvalidMarkId, ());
auto trackSelectionMark = es.GetMarkForEdit<TrackSelectionMark>(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<TrackSelectionMark>(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<TrackSelectionMark>(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<SortBookmarkData> & bookmarksForSort,

View file

@ -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;

View file

@ -2402,6 +2402,8 @@ void Framework::ActivateMapSelection(std::optional<place_page::Info> 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();
}