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_CUSTOM_HOME_PAGES_TABLE_MODEL_H_ 6 #define CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/compiler_specific.h" 12 #include "chrome/browser/history/history_service.h" 13 #include "ui/base/models/table_model.h" 14 15 class GURL; 16 class Profile; 17 18 namespace ui { 19 class TableModelObserver; 20 } 21 22 // CustomHomePagesTableModel is the model for the TableView showing the list 23 // of pages the user wants opened on startup. 24 25 class CustomHomePagesTableModel : public ui::TableModel { 26 public: 27 explicit CustomHomePagesTableModel(Profile* profile); 28 virtual ~CustomHomePagesTableModel(); 29 30 // Sets the set of urls that this model contains. 31 void SetURLs(const std::vector<GURL>& urls); 32 33 // Collect all entries indexed by |index_list|, and moves them to be right 34 // before the element addressed by |insert_before|. Used by Drag&Drop. 35 // Expects |index_list| to be ordered ascending. 36 void MoveURLs(int insert_before, const std::vector<int>& index_list); 37 38 // Adds an entry at the specified index. 39 void Add(int index, const GURL& url); 40 41 // Removes the entry at the specified index. 42 void Remove(int index); 43 44 // Clears any entries and fills the list with pages currently opened in the 45 // browser. 46 void SetToCurrentlyOpenPages(); 47 48 // Returns the set of urls this model contains. 49 std::vector<GURL> GetURLs(); 50 51 // TableModel overrides: 52 virtual int RowCount() OVERRIDE; 53 virtual base::string16 GetText(int row, int column_id) OVERRIDE; 54 virtual base::string16 GetTooltip(int row) OVERRIDE; 55 virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE; 56 57 private: 58 // Each item in the model is represented as an Entry. Entry stores the URL 59 // and title of the page. 60 struct Entry; 61 62 // Loads the title for the specified entry. 63 void LoadTitle(Entry* entry); 64 65 // Callback from history service. Updates the title of the Entry whose 66 // |title_handle| matches |handle| and notifies the observer of the change. 67 void OnGotTitle(HistoryService::Handle handle, 68 bool found_url, 69 const history::URLRow* row, 70 history::VisitVector* visits); 71 72 // Returns the entry whose |member| matches |handle| and sets |entry_index| to 73 // the index of the entry. 74 Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member, 75 CancelableRequestProvider::Handle handle, 76 int* entry_index); 77 78 // Returns the URL for a particular row, formatted for display to the user. 79 base::string16 FormattedURL(int row) const; 80 81 // Set of entries we're showing. 82 std::vector<Entry> entries_; 83 84 // Profile used to load titles. 85 Profile* profile_; 86 87 ui::TableModelObserver* observer_; 88 89 // Used in loading titles. 90 CancelableRequestConsumer history_query_consumer_; 91 92 DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel); 93 }; 94 95 #endif // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_ 96