Welcome to mirror list, hosted at ThFree Co, Russian Federation.

bookmark_manager.hpp « map - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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;
};