app_list_model.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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"
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/app_list/app_list_item_list.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/list_model.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class AppListItemList;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListItemModel;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListModelObserver;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchBoxModel;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchResult;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Master model of app list that consists of three sub models: AppListItemList,
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// SearchBoxModel and SearchResults. The AppListItemList sub model owns a list
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// of AppListItemModel and is displayed in the grid view. SearchBoxModel is
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the model for SearchBoxView. SearchResults owns a list of SearchResult.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class APP_LIST_EXPORT AppListModel {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // A user of the app list.
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  struct APP_LIST_EXPORT User {
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    User();
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ~User();
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // Whether or not this user is the current user of the app list.
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    bool active;
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The name of this user.
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::string16 name;
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The email address of this user.
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::string16 email;
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The path to this user's profile directory.
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::FilePath profile_path;
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  };
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Status {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STATUS_NORMAL,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STATUS_SYNCING,  // Syncing apps or installing synced apps.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ui::ListModel<SearchResult> SearchResults;
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  typedef std::vector<User> Users;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppListModel();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~AppListModel();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddObserver(AppListModelObserver* observer);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveObserver(AppListModelObserver* observer);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatus(Status status);
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void SetUsers(const Users& profile_menu_items);
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SetSignedIn(bool signed_in);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AppListItemList* item_list() { return item_list_.get(); }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SearchBoxModel* search_box() { return search_box_.get(); }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SearchResults* results() { return results_.get(); }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Status status() const { return status_; }
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool signed_in() const { return signed_in_; }
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const Users& users() const {
7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return users_;
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  scoped_ptr<AppListItemList> item_list_;
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