blob: 3a3f521d7c73fc97ee711c06e592ec8b4aa2f9dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#pragma once
#include "map/bookmark.hpp"
#include "map/user_mark_container.hpp"
#include "std/function.hpp"
#include "std/unique_ptr.hpp"
class Framework;
class PaintEvent;
class BookmarkManager : private noncopyable
{
vector<BookmarkCategory *> m_categories;
string m_lastCategoryUrl;
string m_lastType;
Framework & m_framework;
vector<UserMarkContainer *> m_userMarkLayers;
typedef vector<BookmarkCategory *>::iterator CategoryIter;
void SaveState() const;
void LoadState();
public:
BookmarkManager(Framework & f);
~BookmarkManager();
void ClearItems();
void PrepareToShutdown();
/// Scans and loads all kml files with bookmarks in WritableDir.
void LoadBookmarks();
void LoadBookmark(string const & filePath);
void InitBookmarks();
/// Client should know where it adds bookmark
size_t AddBookmark(size_t categoryIndex, m2::PointD const & ptOrg, BookmarkData & bm);
/// Client should know where it moves bookmark
size_t MoveBookmark(size_t bmIndex, size_t curCatIndex, size_t newCatIndex);
void ReplaceBookmark(size_t catIndex, size_t bmIndex, BookmarkData const & bm);
size_t LastEditedBMCategory();
string LastEditedBMType() const;
inline size_t GetBmCategoriesCount() const { return m_categories.size(); }
/// @returns 0 if category is not found
BookmarkCategory * GetBmCategory(size_t index) const;
size_t CreateBmCategory(string const & name);
/// @name Delete bookmarks category with all bookmarks.
/// @return true if category was deleted
void DeleteBmCategory(CategoryIter i);
bool DeleteBmCategory(size_t index);
typedef function<m2::AnyRectD const & (UserMarkType)> TTouchRectHolder;
UserMark const * FindNearestUserMark(m2::AnyRectD const & rect) const;
UserMark const * FindNearestUserMark(TTouchRectHolder const & holder) const;
/// Additional layer methods
bool UserMarksIsVisible(UserMarkType type) const;
UserMarksController & UserMarksRequestController(UserMarkType type);
void UserMarksReleaseController(UserMarksController & controller);
private:
UserMarkContainer const * FindUserMarksContainer(UserMarkType type) const;
UserMarkContainer * FindUserMarksContainer(UserMarkType type);
};
class UserMarkControllerGuard
{
public:
UserMarkControllerGuard(BookmarkManager & mng, UserMarkType type);
~UserMarkControllerGuard();
BookmarkManager & m_mng;
UserMarksController & m_controller;
};
|