// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ash/shelf/shelf_item_delegate_manager.h" #include "ash/shelf/shelf_item_delegate.h" #include "ash/shelf/shelf_model.h" #include "ash/shell.h" #include "base/logging.h" #include "base/stl_util.h" namespace ash { ShelfItemDelegateManager::ShelfItemDelegateManager(ShelfModel* model) : model_(model) { DCHECK(model_); model_->AddObserver(this); } ShelfItemDelegateManager::~ShelfItemDelegateManager() { model_->RemoveObserver(this); STLDeleteContainerPairSecondPointers(id_to_item_delegate_map_.begin(), id_to_item_delegate_map_.end()); } void ShelfItemDelegateManager::SetShelfItemDelegate( LauncherID id, scoped_ptr item_delegate) { // If another ShelfItemDelegate is already registered for |id|, we assume // that this request is replacing ShelfItemDelegate for |id| with // |item_delegate|. RemoveShelfItemDelegate(id); id_to_item_delegate_map_[id] = item_delegate.release(); } ShelfItemDelegate* ShelfItemDelegateManager::GetShelfItemDelegate( LauncherID id) { if (model_->ItemIndexByID(id) != -1) { // Each LauncherItem has to have a ShelfItemDelegate. DCHECK(id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end()); return id_to_item_delegate_map_[id]; } return NULL; } void ShelfItemDelegateManager::ShelfItemAdded(int index) { } void ShelfItemDelegateManager::ShelfItemRemoved(int index, LauncherID id) { RemoveShelfItemDelegate(id); } void ShelfItemDelegateManager::ShelfItemMoved(int start_index, int target_index) { } void ShelfItemDelegateManager::ShelfItemChanged(int index, const LauncherItem& old_item) { } void ShelfItemDelegateManager::ShelfStatusChanged() { } void ShelfItemDelegateManager::RemoveShelfItemDelegate(LauncherID id) { if (id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end()) { delete id_to_item_delegate_map_[id]; id_to_item_delegate_map_.erase(id); } } } // namespace ash