summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmarks/bookmark_folder_tree_model.cc
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-27 22:05:08 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-27 22:05:08 +0000
commit58b359d1055914da02ca1b79ea228118dff5ba44 (patch)
treecfd33e8ddbaf6afed4a6df441799320d758e7577 /chrome/browser/bookmarks/bookmark_folder_tree_model.cc
parentcb9bb1317104cc8a7f219fdaeec45723a9e59e0e (diff)
downloadchromium_src-58b359d1055914da02ca1b79ea228118dff5ba44.zip
chromium_src-58b359d1055914da02ca1b79ea228118dff5ba44.tar.gz
chromium_src-58b359d1055914da02ca1b79ea228118dff5ba44.tar.bz2
Wires up sorting of bookmarks to the 'organize menu' in the bookmark
manager (Glen says no context menus for now). All BookmarkModelObservers have been updated appropriately. BUG=1750 TEST=bring up the bookmark manager and try the 'Reorder by title' menu item, make sure it works and I didn't screw up anything around it. Review URL: http://codereview.chromium.org/27262 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10633 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_folder_tree_model.cc')
-rw-r--r--chrome/browser/bookmarks/bookmark_folder_tree_model.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/chrome/browser/bookmarks/bookmark_folder_tree_model.cc b/chrome/browser/bookmarks/bookmark_folder_tree_model.cc
index a743255..de09b13 100644
--- a/chrome/browser/bookmarks/bookmark_folder_tree_model.cc
+++ b/chrome/browser/bookmarks/bookmark_folder_tree_model.cc
@@ -130,6 +130,40 @@ void BookmarkFolderTreeModel::BookmarkNodeChanged(BookmarkModel* model,
GetObserver()->TreeNodeChanged(this, folder_node);
}
+void BookmarkFolderTreeModel::BookmarkNodeChildrenReordered(
+ BookmarkModel* model,
+ BookmarkNode* node) {
+ FolderNode* folder_node = GetFolderNodeForBookmarkNode(node);
+ DCHECK(folder_node);
+ if (folder_node->GetChildCount() <= 1)
+ return; // Order won't have changed if 1 or fewer nodes.
+
+ // Build a map between folder node and bookmark node.
+ std::map<BookmarkNode*, FolderNode*> bn_to_folder;
+ for (int i = 0; i < folder_node->GetChildCount(); ++i)
+ bn_to_folder[folder_node->GetChild(i)->value] = folder_node->GetChild(i);
+
+ // Remove all the folder nodes.
+ int original_count = folder_node->GetChildCount();
+ folder_node->RemoveAll();
+
+ // And add them back in the new order.
+ for (int i = 0; i < node->GetChildCount(); ++i) {
+ BookmarkNode* child = node->GetChild(i);
+ if (child->is_folder()) {
+ DCHECK(bn_to_folder.find(child) != bn_to_folder.end());
+ folder_node->Add(folder_node->GetChildCount(), bn_to_folder[child]);
+ }
+ }
+ // The new count better match the original count, otherwise we're leaking and
+ // treeview is likely to get way out of sync.
+ DCHECK(original_count == folder_node->GetChildCount());
+
+ // Finally, notify observers.
+ if (GetObserver())
+ GetObserver()->TreeNodeChildrenReordered(this, folder_node);
+}
+
void BookmarkFolderTreeModel::GetIcons(std::vector<SkBitmap>* icons) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
icons->push_back(*rb.GetBitmapNamed(IDR_BOOKMARK_MANAGER_RECENT_ICON));