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 UI_APP_LIST_APP_LIST_MODEL_H_ 6 #define UI_APP_LIST_APP_LIST_MODEL_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/observer_list.h" 11 #include "ui/app_list/app_list_export.h" 12 #include "ui/base/models/list_model.h" 13 14 namespace app_list { 15 16 class AppListItemModel; 17 class AppListModelObserver; 18 class SearchBoxModel; 19 class SearchResult; 20 21 // Master model of app list that consists of three sub models: Apps, 22 // SearchBoxModel and SearchResults. The Apps sub model owns a list of 23 // AppListItemModel and is displayed in the grid view. SearchBoxModel is 24 // the model for SearchBoxView. SearchResults owns a list of SearchResult. 25 class APP_LIST_EXPORT AppListModel { 26 public: 27 enum Status { 28 STATUS_NORMAL, 29 STATUS_SYNCING, // Syncing apps or installing synced apps. 30 }; 31 32 typedef ui::ListModel<AppListItemModel> Apps; 33 typedef ui::ListModel<SearchResult> SearchResults; 34 35 AppListModel(); 36 ~AppListModel(); 37 38 void AddObserver(AppListModelObserver* observer); 39 void RemoveObserver(AppListModelObserver* observer); 40 41 void SetStatus(Status status); 42 43 Apps* apps() { return apps_.get(); } 44 SearchBoxModel* search_box() { return search_box_.get(); } 45 SearchResults* results() { return results_.get(); } 46 Status status() const { return status_; } 47 48 private: 49 scoped_ptr<Apps> apps_; 50 51 scoped_ptr<SearchBoxModel> search_box_; 52 scoped_ptr<SearchResults> results_; 53 54 Status status_; 55 ObserverList<AppListModelObserver> observers_; 56 57 DISALLOW_COPY_AND_ASSIGN(AppListModel); 58 }; 59 60 } // namespace app_list 61 62 #endif // UI_APP_LIST_APP_LIST_MODEL_H_ 63