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 15 ShelfItemDelegateManager::ShelfItemDelegateManager(ShelfModel* model) 16 : model_(model) { 17 DCHECK(model_); 18 model_->AddObserver(this); 19 } 20 21 ShelfItemDelegateManager::~ShelfItemDelegateManager() { 22 model_->RemoveObserver(this); 23 STLDeleteContainerPairSecondPointers(id_to_item_delegate_map_.begin(), 24 id_to_item_delegate_map_.end()); 25 } 26 27 void 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 37 ShelfItemDelegate* 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 46 void ShelfItemDelegateManager::ShelfItemAdded(int index) { 47 } 48 49 void ShelfItemDelegateManager::ShelfItemRemoved(int index, ShelfID id) { 50 RemoveShelfItemDelegate(id); 51 } 52 53 void ShelfItemDelegateManager::ShelfItemMoved(int start_index, 54 int target_index) { 55 } 56 57 void ShelfItemDelegateManager::ShelfItemChanged(int index, 58 const ShelfItem& old_item) { 59 } 60 61 void ShelfItemDelegateManager::ShelfStatusChanged() { 62 } 63 64 void 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