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
13 namespace ash {
14
ShelfItemDelegateManager(ShelfModel * model)15 ShelfItemDelegateManager::ShelfItemDelegateManager(ShelfModel* model)
16 : model_(model) {
17 DCHECK(model_);
18 model_->AddObserver(this);
19 }
20
~ShelfItemDelegateManager()21 ShelfItemDelegateManager::~ShelfItemDelegateManager() {
22 model_->RemoveObserver(this);
23 STLDeleteContainerPairSecondPointers(id_to_item_delegate_map_.begin(),
24 id_to_item_delegate_map_.end());
25 }
26
SetShelfItemDelegate(LauncherID id,scoped_ptr<ShelfItemDelegate> item_delegate)27 void ShelfItemDelegateManager::SetShelfItemDelegate(
28 LauncherID 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
GetShelfItemDelegate(LauncherID id)37 ShelfItemDelegate* ShelfItemDelegateManager::GetShelfItemDelegate(
38 LauncherID id) {
39 if (model_->ItemIndexByID(id) != -1) {
40 // Each LauncherItem has to have a ShelfItemDelegate.
41 DCHECK(id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end());
42 return id_to_item_delegate_map_[id];
43 }
44 return NULL;
45 }
46
ShelfItemAdded(int index)47 void ShelfItemDelegateManager::ShelfItemAdded(int index) {
48 }
49
ShelfItemRemoved(int index,LauncherID id)50 void ShelfItemDelegateManager::ShelfItemRemoved(int index, LauncherID id) {
51 RemoveShelfItemDelegate(id);
52 }
53
ShelfItemMoved(int start_index,int target_index)54 void ShelfItemDelegateManager::ShelfItemMoved(int start_index,
55 int target_index) {
56 }
57
ShelfItemChanged(int index,const LauncherItem & old_item)58 void ShelfItemDelegateManager::ShelfItemChanged(int index,
59 const LauncherItem& old_item) {
60 }
61
ShelfStatusChanged()62 void ShelfItemDelegateManager::ShelfStatusChanged() {
63 }
64
RemoveShelfItemDelegate(LauncherID id)65 void ShelfItemDelegateManager::RemoveShelfItemDelegate(LauncherID id) {
66 if (id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end()) {
67 delete id_to_item_delegate_map_[id];
68 id_to_item_delegate_map_.erase(id);
69 }
70 }
71
72 } // namespace ash
73