summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmarks/bookmark_folder_tree_model.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_folder_tree_model.h')
-rw-r--r--chrome/browser/bookmarks/bookmark_folder_tree_model.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/chrome/browser/bookmarks/bookmark_folder_tree_model.h b/chrome/browser/bookmarks/bookmark_folder_tree_model.h
new file mode 100644
index 0000000..c2f7093
--- /dev/null
+++ b/chrome/browser/bookmarks/bookmark_folder_tree_model.h
@@ -0,0 +1,102 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_FOLDER_TREE_MODEL_H_
+#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_FOLDER_TREE_MODEL_H_
+
+#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/views/tree_node_model.h"
+
+// The type of nodes created by BookmarkFolderTreeModel.
+typedef views::TreeNodeWithValue<BookmarkNode*> FolderNode;
+
+// TreeModel implementation that shows the folders from the BookmarkModel.
+// The root node contains the following nodes:
+// bookmark bar, other folders, recently bookmarked and search.
+class BookmarkFolderTreeModel : public views::TreeNodeModel<FolderNode>,
+ public BookmarkModelObserver {
+ public:
+ // Type of the node.
+ enum NodeType {
+ // Represents an entry from the BookmarkModel.
+ BOOKMARK,
+ RECENTLY_BOOKMARKED,
+ SEARCH,
+ NONE // Used for no selection.
+ };
+
+ explicit BookmarkFolderTreeModel(BookmarkModel* model);
+ ~BookmarkFolderTreeModel();
+
+ // The tree is not editable.
+ virtual void SetTitle(views::TreeModelNode* node, const std::wstring& title) {
+ NOTREACHED();
+ }
+
+ // Returns the type of the specified node.
+ NodeType GetNodeType(views::TreeModelNode* node);
+
+ // Returns the FolderNode for the specified BookmarkNode.
+ FolderNode* GetFolderNodeForBookmarkNode(BookmarkNode* node);
+
+ // Converts the tree node into a BookmarkNode. Returns NULL if |node| is NULL
+ // or not of NodeType::BOOKMARK.
+ BookmarkNode* TreeNodeAsBookmarkNode(views::TreeModelNode* node);
+
+ // Returns the search node.
+ FolderNode* search_node() const { return search_node_; }
+
+ // BookmarkModelObserver implementation.
+ virtual void Loaded(BookmarkModel* model);
+ virtual void BookmarkModelBeingDeleted(BookmarkModel* model);
+ virtual void BookmarkNodeMoved(BookmarkModel* model,
+ BookmarkNode* old_parent,
+ int old_index,
+ BookmarkNode* new_parent,
+ int new_index);
+ virtual void BookmarkNodeAdded(BookmarkModel* model,
+ BookmarkNode* parent,
+ int index);
+ virtual void BookmarkNodeRemoved(BookmarkModel* model,
+ BookmarkNode* parent,
+ int index,
+ BookmarkNode* node);
+ virtual void BookmarkNodeChanged(BookmarkModel* model,
+ BookmarkNode* node);
+ // Folders don't have favicons, so we ignore this.
+ virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
+ BookmarkNode* node) {}
+
+ private:
+ // Invoked from the constructor to create the children of the root node.
+ void AddRootChildren();
+
+ // Implementation of GetFolderNodeForBookmarkNode. If the |folder_node|
+ // represents |node|, |folder_node| is returned, otherwise this recurses
+ // through the children.
+ FolderNode* GetFolderNodeForBookmarkNode(FolderNode* folder_node,
+ BookmarkNode* node);
+
+ // Creates a new folder node for |node| and all its children.
+ FolderNode* CreateFolderNode(BookmarkNode* node);
+
+ // Returns the number of folders that precede |node| in |node|s parent.
+ // The returned value is the index of the folder node representing |node|
+ // in its parent.
+ // This is used when new bookmarks are created to determine where the
+ // corresponding folder node should be created.
+ int CalculateIndexForChild(BookmarkNode* node);
+
+ // The model we're getting data from. Owned by the Profile.
+ BookmarkModel* model_;
+
+ // The two special nodes. These are owned by the root tree node owned by
+ // TreeNodeModel.
+ FolderNode* recently_bookmarked_node_;
+ FolderNode* search_node_;
+
+ DISALLOW_COPY_AND_ASSIGN(BookmarkFolderTreeModel);
+};
+
+#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_FOLDER_TREE_MODEL_H_