shelf_item_delegate_manager.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 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#include "ash/shelf/shelf_item_delegate_manager.h"
6
7#include "ash/shelf/shelf_item_delegate.h"
8#include "ash/shelf/shelf_model.h"
9#include "ash/shell.h"
10#include "base/logging.h"
11#include "base/stl_util.h"
12
13namespace ash {
14
15ShelfItemDelegateManager::ShelfItemDelegateManager(ShelfModel* model)
16    : model_(model) {
17  DCHECK(model_);
18  model_->AddObserver(this);
19}
20
21ShelfItemDelegateManager::~ShelfItemDelegateManager() {
22  model_->RemoveObserver(this);
23  STLDeleteContainerPairSecondPointers(id_to_item_delegate_map_.begin(),
24                                       id_to_item_delegate_map_.end());
25}
26
27void ShelfItemDelegateManager::SetShelfItemDelegate(
28    ShelfID id,
29    scoped_ptr<ShelfItemDelegate> item_delegate) {
30  // If another ShelfItemDelegate is already registered for |id|, we assume
31  // that this request is replacing ShelfItemDelegate for |id| with
32  // |item_delegate|.
33  RemoveShelfItemDelegate(id);
34  id_to_item_delegate_map_[id] = item_delegate.release();
35}
36
37ShelfItemDelegate* ShelfItemDelegateManager::GetShelfItemDelegate(ShelfID id) {
38  if (model_->ItemIndexByID(id) != -1) {
39    // Each ShelfItem has to have a ShelfItemDelegate.
40    DCHECK(id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end());
41    return id_to_item_delegate_map_[id];
42  }
43  return NULL;
44}
45
46void ShelfItemDelegateManager::ShelfItemAdded(int index) {
47}
48
49void ShelfItemDelegateManager::ShelfItemRemoved(int index, ShelfID id) {
50  RemoveShelfItemDelegate(id);
51}
52
53void ShelfItemDelegateManager::ShelfItemMoved(int start_index,
54                                              int target_index) {
55}
56
57void ShelfItemDelegateManager::ShelfItemChanged(int index,
58                                                const ShelfItem& old_item) {
59}
60
61void ShelfItemDelegateManager::ShelfStatusChanged() {
62}
63
64void ShelfItemDelegateManager::RemoveShelfItemDelegate(ShelfID id) {
65  if (id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end()) {
66    delete id_to_item_delegate_map_[id];
67    id_to_item_delegate_map_.erase(id);
68  }
69}
70
71}  // namespace ash
72