Home | History | Annotate | Download | only in app_list
      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