Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / bookmarks / recently_used_folders_combo_model.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_
6 #define CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/observer_list.h"
13 #include "components/bookmarks/browser/bookmark_model_observer.h"
14 #include "ui/base/models/combobox_model.h"
15
16 class BookmarkModel;
17 class BookmarkNode;
18
19 // Model for the combobox showing the list of folders to choose from. The
20 // list always contains the Bookmarks Bar, Other Bookmarks and the parent
21 // folder. The list also contains an extra item that shows the text
22 // "Choose Another Folder...".
23 class RecentlyUsedFoldersComboModel : public ui::ComboboxModel,
24                                       public BookmarkModelObserver {
25  public:
26   RecentlyUsedFoldersComboModel(BookmarkModel* model, const BookmarkNode* node);
27   ~RecentlyUsedFoldersComboModel() override;
28
29   // Overridden from ui::ComboboxModel:
30   int GetItemCount() const override;
31   base::string16 GetItemAt(int index) override;
32   bool IsItemSeparatorAt(int index) override;
33   int GetDefaultIndex() const override;
34   void AddObserver(ui::ComboboxModelObserver* observer) override;
35   void RemoveObserver(ui::ComboboxModelObserver* observer) override;
36
37   // Overriden from BookmarkModelObserver:
38   void BookmarkModelLoaded(BookmarkModel* model, bool ids_reassigned) override;
39   void BookmarkModelBeingDeleted(BookmarkModel* model) override;
40   void BookmarkNodeMoved(BookmarkModel* model,
41                          const BookmarkNode* old_parent,
42                          int old_index,
43                          const BookmarkNode* new_parent,
44                          int new_index) override;
45   void BookmarkNodeAdded(BookmarkModel* model,
46                          const BookmarkNode* parent,
47                          int index) override;
48   void OnWillRemoveBookmarks(BookmarkModel* model,
49                              const BookmarkNode* parent,
50                              int old_index,
51                              const BookmarkNode* node) override;
52   void BookmarkNodeRemoved(BookmarkModel* model,
53                            const BookmarkNode* parent,
54                            int old_index,
55                            const BookmarkNode* node,
56                            const std::set<GURL>& removed_urls) override;
57   void BookmarkNodeChanged(BookmarkModel* model,
58                            const BookmarkNode* node) override;
59   void BookmarkNodeFaviconChanged(BookmarkModel* model,
60                                   const BookmarkNode* node) override;
61   void BookmarkNodeChildrenReordered(BookmarkModel* model,
62                                      const BookmarkNode* node) override;
63   void BookmarkAllUserNodesRemoved(BookmarkModel* model,
64                                    const std::set<GURL>& removed_urls) override;
65
66   // If necessary this function moves |node| into the corresponding folder for
67   // the given |selected_index|.
68   void MaybeChangeParent(const BookmarkNode* node, int selected_index);
69
70  private:
71   // Returns the node at the specified |index|.
72   const BookmarkNode* GetNodeAt(int index);
73
74   // Removes |node| from |items_|. Does nothing if |node| is not in |items_|.
75   void RemoveNode(const BookmarkNode* node);
76
77   struct Item;
78   std::vector<Item> items_;
79
80   BookmarkModel* bookmark_model_;
81
82   // The index of the original parent folder.
83   int node_parent_index_;
84
85   ObserverList<ui::ComboboxModelObserver> observers_;
86
87   DISALLOW_COPY_AND_ASSIGN(RecentlyUsedFoldersComboModel);
88 };
89
90 #endif  // CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_