Chromium Code Reviews| Index: ui/app_list/app_list_model.h |
| diff --git a/ui/app_list/app_list_model.h b/ui/app_list/app_list_model.h |
| index 2238941415820e1b84f7fa516dea7fe42b226581..018954ebc86edcef107b61085b7503471923be77 100644 |
| --- a/ui/app_list/app_list_model.h |
| +++ b/ui/app_list/app_list_model.h |
| @@ -22,8 +22,8 @@ class AppListModelObserver; |
| class SearchBoxModel; |
| class SearchResult; |
| -// Master model of app list that consists of three sub models: Apps, |
| -// SearchBoxModel and SearchResults. The Apps sub model owns a list of |
| +// Master model of app list that consists of three sub models: AppItems, |
| +// SearchBoxModel and SearchResults. The AppItems sub model owns a list of |
| // AppListItemModel and is displayed in the grid view. SearchBoxModel is |
| // the model for SearchBoxView. SearchResults owns a list of SearchResult. |
| class APP_LIST_EXPORT AppListModel { |
| @@ -51,7 +51,7 @@ class APP_LIST_EXPORT AppListModel { |
| STATUS_SYNCING, // Syncing apps or installing synced apps. |
| }; |
| - typedef ui::ListModel<AppListItemModel> Apps; |
| + typedef ui::ListModel<AppListItemModel> AppItems; |
| typedef ui::ListModel<SearchResult> SearchResults; |
| typedef std::vector<User> Users; |
| @@ -68,15 +68,44 @@ class APP_LIST_EXPORT AppListModel { |
| // Find item matching |id|. NOTE: Requires a linear search. |
| AppListItemModel* FindItem(const std::string& id); |
| - // Adds |item| to |apps_|. Takes ownership of |item|. Uses item->SortOrder() |
| - // to insert in the correct place. TODO(stevenjb): Use synced app list order |
| - // instead of SortOrder when available: crbug.com/305024. |
| - void AddItem(AppListItemModel* item); |
| + // Returns the item at |page_idx| and |item_idx| or NULL. |
| + AppListItemModel* GetItemAt(size_t page_idx, size_t item_idx); |
|
xiyuan
2013/10/18 23:04:08
Propose to use page id instead of index. It would
stevenjb
2013/10/19 01:04:43
I'll think about that. I can see where it makes se
|
| - // Finds |item| in |apps_| and deletes it. |
| + // Adds |item| to a page. Takes ownership of |item|. Uses |
| + // item->SortOrder() to insert in the correct page and position. |
| + // Returns which page the item was added to. |
| + // TODO(stevenjb): Use synced app list order instead of SortOrder. |
| + // crbug.com/305024. |
| + size_t AddItem(AppListItemModel* item); |
| + |
| + // Similar to AddItem, but adds the item to a specific page. If the page is |
| + // full the item will be added to the end of the page and the last item in |
| + // the page will be pushed to the next page. Returns the index of the page |
| + // that the item was added to (|page_idx| or |page_idx| + 1). |page_idx| must |
| + // be <= the number of pages, i.e. at most one new page will be added. |
| + size_t AddItemToPage(AppListItemModel* item, size_t page_idx); |
| + |
| + // Finds |item| in the model and deletes it. |
| void DeleteItem(const std::string& id); |
| - Apps* apps() { return apps_.get(); } |
| + // Deletes item at |item_idx| from page |page_idx|. |
| + void DeleteItemAt(size_t page_idx, size_t item_idx); |
| + |
| + // Move item at |item_idx| in |page_idx| to |target_index| |
| + // in |target_page_idx|. |
| + void MoveItem(size_t page_idx, size_t item_idx, |
| + size_t target_page_idx, size_t target_item_idx); |
| + |
| + // Returns the number of apps per page. |
| + static size_t GetNumAppsPerPage(); |
| + |
| + // Returns the number of app pages. |
| + size_t GetNumAppPages() const; |
| + |
| + // Returns a const reference to the items at page |page_idx| which must be |
| + // less than GetAppPages(). |
| + const AppItems& GetAppItemsForPage(size_t page_idx) const; |
| + |
| SearchBoxModel* search_box() { return search_box_.get(); } |
| SearchResults* results() { return results_.get(); } |
| Status status() const { return status_; } |
| @@ -86,8 +115,27 @@ class APP_LIST_EXPORT AppListModel { |
| return users_; |
| } |
| - private: |
| - scoped_ptr<Apps> apps_; |
| +private: |
| + class ItemPage; |
| + |
| + // Gets the list of items fpr |page_idx| from item_pages_ and checks ranges. |
| + AppItems* app_items(size_t page_idx); |
| + |
| + // Creates/removes a page of items. |
| + void AddPage(); |
| + void RemovePage(size_t idx); |
| + |
| + // Adds |item| to page |page_idx| at |item_idx| and handles overflow. |
| + // Returns the page index for |item| which will differ from |page_idx| only |
| + // if |item_idx| == GetNumAppsPerPage(). |
| + size_t AddItemToPageAtIndex(AppListItemModel* item, |
| + size_t page_idx, size_t item_idx); |
| + |
| + // Sets the postion of |item| based on its new index. |
| + void SetItemPosition(AppListItemModel* item, |
| + size_t page_idx, size_t item_idx); |
| + |
| + ScopedVector<ItemPage> item_pages_; |
| scoped_ptr<SearchBoxModel> search_box_; |
| scoped_ptr<SearchResults> results_; |