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
14namespace app_list {
15
16class AppListItemModel;
17class AppListModelObserver;
18class SearchBoxModel;
19class 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.
25class 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