app_list_model.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_APP_LIST_APP_LIST_MODEL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_APP_LIST_APP_LIST_MODEL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/app_list/app_list_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/list_model.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListItemModel; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListModelObserver; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchBoxModel; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchResult; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Master model of app list that consists of three sub models: Apps, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SearchBoxModel and SearchResults. The Apps sub model owns a list of 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AppListItemModel and is displayed in the grid view. SearchBoxModel is 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the model for SearchBoxView. SearchResults owns a list of SearchResult. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class APP_LIST_EXPORT AppListModel { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Status { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATUS_NORMAL, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATUS_SYNCING, // Syncing apps or installing synced apps. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ui::ListModel<AppListItemModel> Apps; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ui::ListModel<SearchResult> SearchResults; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppListModel(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppListModel(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(AppListModelObserver* observer); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(AppListModelObserver* observer); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetStatus(Status status); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Apps* apps() { return apps_.get(); } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBoxModel* search_box() { return search_box_.get(); } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchResults* results() { return results_.get(); } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Status status() const { return status_; } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Apps> apps_; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SearchBoxModel> search_box_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SearchResults> results_; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Status status_; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<AppListModelObserver> observers_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListModel); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace app_list 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_APP_LIST_APP_LIST_MODEL_H_ 63