Check if a bookmark category is editable.

This commit is contained in:
Daria Volvenkova 2018-05-21 18:15:26 +03:00 committed by Aleksandr Zatsepin
parent 0f74c09455
commit 6fb8894efa
4 changed files with 80 additions and 3 deletions

View file

@ -495,6 +495,28 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsUsedCategoryName
ToNativeString(env, name)));
}
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsEditableBookmark(
JNIEnv * env, jobject thiz, jlong bmkId)
{
return static_cast<jboolean>(frm()->GetBookmarkManager().IsEditableBookmark(static_cast<kml::MarkId>(bmkId)));
}
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsEditableTrack(
JNIEnv * env, jobject thiz, jlong trackId)
{
return static_cast<jboolean>(frm()->GetBookmarkManager().IsEditableTrack(static_cast<kml::TrackId>(trackId)));
}
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsEditableCategory(
JNIEnv * env, jobject thiz, jlong catId)
{
return static_cast<jboolean>(frm()->GetBookmarkManager().IsEditableCategory(static_cast<kml::MarkGroupId>(catId)));
}
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeAreAllCategoriesVisible(
JNIEnv * env, jobject thiz)

View file

@ -369,6 +369,12 @@ public enum BookmarkManager
return nativeIsUsedCategoryName(name);
}
public boolean isEditableBookmark(long bmkId) { return nativeIsEditableBookmark(bmkId); }
public boolean isEditableTrack(long trackId) { return nativeIsEditableTrack(trackId); }
public boolean isEditableCategory(long catId) { return nativeIsEditableCategory(catId); }
public boolean areAllCategoriesVisible()
{
return nativeAreAllCategoriesVisible();
@ -535,6 +541,12 @@ public enum BookmarkManager
private static native boolean nativeIsUsedCategoryName(@NonNull String name);
private static native boolean nativeIsEditableBookmark(long bmkId);
private static native boolean nativeIsEditableTrack(long trackId);
private static native boolean nativeIsEditableCategory(long catId);
private static native boolean nativeAreAllCategoriesVisible();
private static native boolean nativeAreAllCategoriesInvisible();

View file

@ -1721,6 +1721,30 @@ bool BookmarkManager::IsCategoryEmpty(kml::MarkGroupId categoryId) const
return GetBmCategory(categoryId)->IsEmpty();
}
bool BookmarkManager::IsEditableBookmark(kml::MarkId bmId) const
{
CHECK_THREAD_CHECKER(m_threadChecker, ());
auto const * mark = GetBookmark(bmId);
if (mark->GetGroupId() != kml::kInvalidMarkGroupId)
return !IsCategoryFromCatalog(mark->GetGroupId());
return true;
}
bool BookmarkManager::IsEditableTrack(kml::TrackId trackId) const
{
CHECK_THREAD_CHECKER(m_threadChecker, ());
auto const * track = GetTrack(trackId);
if (track->GetGroupId() != kml::kInvalidMarkGroupId)
return !IsCategoryFromCatalog(track->GetGroupId());
return true;
}
bool BookmarkManager::IsEditableCategory(kml::MarkGroupId groupId) const
{
CHECK_THREAD_CHECKER(m_threadChecker, ());
return !IsCategoryFromCatalog(groupId);
}
bool BookmarkManager::IsUsedCategoryName(std::string const & name) const
{
CHECK_THREAD_CHECKER(m_threadChecker, ());
@ -2286,6 +2310,7 @@ Bookmark * BookmarkManager::EditSession::CreateBookmark(kml::BookmarkData && bmD
Bookmark * BookmarkManager::EditSession::CreateBookmark(kml::BookmarkData && bmData, kml::MarkGroupId groupId)
{
CHECK(m_bmManager.IsEditableCategory(groupId), ());
return m_bmManager.CreateBookmark(std::move(bmData), groupId);
}
@ -2294,9 +2319,10 @@ Track * BookmarkManager::EditSession::CreateTrack(kml::TrackData && trackData)
return m_bmManager.CreateTrack(std::move(trackData));
}
Bookmark * BookmarkManager::EditSession::GetBookmarkForEdit(kml::MarkId markId)
Bookmark * BookmarkManager::EditSession::GetBookmarkForEdit(kml::MarkId bmId)
{
return m_bmManager.GetBookmarkForEdit(markId);
CHECK(m_bmManager.IsEditableBookmark(bmId), ());
return m_bmManager.GetBookmarkForEdit(bmId);
}
void BookmarkManager::EditSession::DeleteUserMark(kml::MarkId markId)
@ -2306,16 +2332,20 @@ void BookmarkManager::EditSession::DeleteUserMark(kml::MarkId markId)
void BookmarkManager::EditSession::DeleteBookmark(kml::MarkId bmId)
{
CHECK(m_bmManager.IsEditableBookmark(bmId), ());
m_bmManager.DeleteBookmark(bmId);
}
void BookmarkManager::EditSession::DeleteTrack(kml::TrackId trackId)
{
CHECK(m_bmManager.IsEditableTrack(trackId), ());
m_bmManager.DeleteTrack(trackId);
}
void BookmarkManager::EditSession::ClearGroup(kml::MarkGroupId groupId)
{
if (m_bmManager.IsBookmarkCategory(groupId))
CHECK(m_bmManager.IsEditableCategory(groupId), ());
m_bmManager.ClearGroup(groupId);
}
@ -2327,36 +2357,45 @@ void BookmarkManager::EditSession::SetIsVisible(kml::MarkGroupId groupId, bool v
void BookmarkManager::EditSession::MoveBookmark(
kml::MarkId bmID, kml::MarkGroupId curGroupID, kml::MarkGroupId newGroupID)
{
CHECK(m_bmManager.IsEditableCategory(curGroupID), ());
CHECK(m_bmManager.IsEditableCategory(newGroupID), ());
m_bmManager.MoveBookmark(bmID, curGroupID, newGroupID);
}
void BookmarkManager::EditSession::UpdateBookmark(kml::MarkId bmId, kml::BookmarkData const & bm)
{
CHECK(m_bmManager.IsEditableBookmark(bmId), ());
return m_bmManager.UpdateBookmark(bmId, bm);
}
void BookmarkManager::EditSession::AttachBookmark(kml::MarkId bmId, kml::MarkGroupId groupId)
{
CHECK(m_bmManager.IsEditableCategory(groupId), ());
m_bmManager.AttachBookmark(bmId, groupId);
}
void BookmarkManager::EditSession::DetachBookmark(kml::MarkId bmId, kml::MarkGroupId groupId)
{
CHECK(m_bmManager.IsEditableCategory(groupId), ());
m_bmManager.DetachBookmark(bmId, groupId);
}
void BookmarkManager::EditSession::AttachTrack(kml::TrackId trackId, kml::MarkGroupId groupId)
{
CHECK(m_bmManager.IsEditableCategory(groupId), ());
m_bmManager.AttachTrack(trackId, groupId);
}
void BookmarkManager::EditSession::DetachTrack(kml::TrackId trackId, kml::MarkGroupId groupId)
{
CHECK(m_bmManager.IsEditableCategory(groupId), ());
m_bmManager.DetachTrack(trackId, groupId);
}
void BookmarkManager::EditSession::SetCategoryName(kml::MarkGroupId categoryId, std::string const & name)
{
CHECK(m_bmManager.IsEditableCategory(categoryId), ());
m_bmManager.SetCategoryName(categoryId, name);
}

View file

@ -97,7 +97,7 @@ public:
return m_bmManager.GetMarkForEdit<UserMarkT>(markId);
}
Bookmark * GetBookmarkForEdit(kml::MarkId markId);
Bookmark * GetBookmarkForEdit(kml::MarkId bmId);
template <typename UserMarkT, typename F>
void DeleteUserMarks(UserMark::Type type, F && deletePredicate)
@ -246,6 +246,10 @@ public:
bool IsCategoryEmpty(kml::MarkGroupId categoryId) const;
bool IsEditableBookmark(kml::MarkId bmId) const;
bool IsEditableTrack(kml::TrackId trackId) const;
bool IsEditableCategory(kml::MarkGroupId groupId) const;
bool IsUsedCategoryName(std::string const & name) const;
bool AreAllCategoriesVisible() const;
bool AreAllCategoriesInvisible() const;