app_list_model.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <vector>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/files/file_path.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/strings/string16.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/app_list/app_list_export.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/list_model.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListItemModel;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListModelObserver;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchBoxModel;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchResult;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Master model of app list that consists of three sub models: Apps,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SearchBoxModel and SearchResults. The Apps sub model owns a list of
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AppListItemModel and is displayed in the grid view. SearchBoxModel is
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the model for SearchBoxView. SearchResults owns a list of SearchResult.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class APP_LIST_EXPORT AppListModel {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // A user of the app list.
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  struct APP_LIST_EXPORT User {
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    User();
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ~User();
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // Whether or not this user is the current user of the app list.
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    bool active;
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The name of this user.
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::string16 name;
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The email address of this user.
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::string16 email;
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The path to this user's profile directory.
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::FilePath profile_path;
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  };
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Status {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STATUS_NORMAL,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STATUS_SYNCING,  // Syncing apps or installing synced apps.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ui::ListModel<AppListItemModel> Apps;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ui::ListModel<SearchResult> SearchResults;
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  typedef std::vector<User> Users;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppListModel();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~AppListModel();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddObserver(AppListModelObserver* observer);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveObserver(AppListModelObserver* observer);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatus(Status status);
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void SetUsers(const Users& profile_menu_items);
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SetSignedIn(bool signed_in);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Apps* apps() { return apps_.get(); }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SearchBoxModel* search_box() { return search_box_.get(); }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SearchResults* results() { return results_.get(); }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Status status() const { return status_; }
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool signed_in() const { return signed_in_; }
7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const Users& users() const {
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return users_;
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Apps> apps_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<SearchBoxModel> search_box_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<SearchResults> results_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Users users_;
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  bool signed_in_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Status status_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<AppListModelObserver> observers_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppListModel);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace app_list
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_APP_LIST_APP_LIST_MODEL_H_
96