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 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 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 47 void ShelfItemDelegateManager::ShelfItemAdded(int index) { 48 } 49 50 void ShelfItemDelegateManager::ShelfItemRemoved(int index, LauncherID id) { 51 RemoveShelfItemDelegate(id); 52 } 53 54 void ShelfItemDelegateManager::ShelfItemMoved(int start_index, 55 int target_index) { 56 } 57 58 void ShelfItemDelegateManager::ShelfItemChanged(int index, 59 const LauncherItem& old_item) { 60 } 61 62 void ShelfItemDelegateManager::ShelfStatusChanged() { 63 } 64 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