15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_ 6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#define CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/observer_list.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model_observer.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/combobox_model.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkModel; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkNode; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Model for the combobox showing the list of folders to choose from. The 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// list always contains the Bookmarks Bar, Other Bookmarks and the parent 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// folder. The list also contains an extra item that shows the text 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// "Choose Another Folder...". 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RecentlyUsedFoldersComboModel : public ui::ComboboxModel, 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public BookmarkModelObserver { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecentlyUsedFoldersComboModel(BookmarkModel* model, const BookmarkNode* node); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RecentlyUsedFoldersComboModel(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::ComboboxModel: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetItemCount() const OVERRIDE; 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetItemAt(int index) OVERRIDE; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsItemSeparatorAt(int index) OVERRIDE; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int GetDefaultIndex() const OVERRIDE; 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void AddObserver(ui::ComboboxModelObserver* observer) OVERRIDE; 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void RemoveObserver(ui::ComboboxModelObserver* observer) OVERRIDE; 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Overriden from BookmarkModelObserver: 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void BookmarkModelLoaded(BookmarkModel* model, 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool ids_reassigned) OVERRIDE; 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeMoved(BookmarkModel* model, 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* old_parent, 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int old_index, 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* new_parent, 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int new_index) OVERRIDE; 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeAdded(BookmarkModel* model, 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* parent, 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int index) OVERRIDE; 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnWillRemoveBookmarks(BookmarkModel* model, 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* parent, 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int old_index, 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* node) OVERRIDE; 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeRemoved(BookmarkModel* model, 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* parent, 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int old_index, 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BookmarkNode* node, 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeChanged(BookmarkModel* model, 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* node) OVERRIDE; 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeFaviconChanged(BookmarkModel* model, 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* node) OVERRIDE; 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void BookmarkNodeChildrenReordered( 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BookmarkModel* model, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BookmarkNode* node) OVERRIDE; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void BookmarkAllUserNodesRemoved( 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BookmarkModel* model, 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If necessary this function moves |node| into the corresponding folder for 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the given |selected_index|. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void MaybeChangeParent(const BookmarkNode* node, int selected_index); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the node at the specified |index|. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* GetNodeAt(int index); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Removes |node| from |items_|. Does nothing if |node| is not in |items_|. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveNode(const BookmarkNode* node); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct Item; 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<Item> items_; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BookmarkModel* bookmark_model_; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The index of the original parent folder. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int node_parent_index_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ObserverList<ui::ComboboxModelObserver> observers_; 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RecentlyUsedFoldersComboModel); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif // CHROME_BROWSER_UI_BOOKMARKS_RECENTLY_USED_FOLDERS_COMBO_MODEL_H_ 94