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#ifndef ASH_SHELF_SHELF_ITEM_DELEGATE_MANAGER_H_ 6#define ASH_SHELF_SHELF_ITEM_DELEGATE_MANAGER_H_ 7 8#include <map> 9 10#include "ash/ash_export.h" 11#include "ash/shelf/shelf_item_types.h" 12#include "ash/shelf/shelf_model_observer.h" 13#include "base/compiler_specific.h" 14#include "base/memory/scoped_ptr.h" 15 16namespace ash { 17class ShelfItemDelegate; 18class ShelfModel; 19 20namespace test { 21class ShelfItemDelegateManagerTestAPI; 22} 23 24// ShelfItemDelegateManager manages the set of ShelfItemDelegates for the 25// launcher. ShelfItemDelegateManager does not create ShelfItemDelegates, 26// rather it is expected that someone else invokes SetShelfItemDelegate 27// appropriately. On the other hand, ShelfItemDelegateManager destroys 28// ShelfItemDelegates when the corresponding item from the model is removed. 29class ASH_EXPORT ShelfItemDelegateManager : public ShelfModelObserver { 30 public: 31 explicit ShelfItemDelegateManager(ShelfModel* model); 32 virtual ~ShelfItemDelegateManager(); 33 34 // Set |item_delegate| for |id| and take an ownership. 35 void SetShelfItemDelegate(ShelfID id, 36 scoped_ptr<ShelfItemDelegate> item_delegate); 37 38 // Returns ShelfItemDelegate for |item_type|. Always returns non-NULL. 39 ShelfItemDelegate* GetShelfItemDelegate(ShelfID id); 40 41 // ShelfModelObserver overrides: 42 virtual void ShelfItemAdded(int model_index) OVERRIDE; 43 virtual void ShelfItemRemoved(int index, ShelfID id) OVERRIDE; 44 virtual void ShelfItemMoved(int start_index, int targetindex) OVERRIDE; 45 virtual void ShelfItemChanged(int index, 46 const ShelfItem& old_item) OVERRIDE; 47 virtual void ShelfStatusChanged() OVERRIDE; 48 49 private: 50 friend class test::ShelfItemDelegateManagerTestAPI; 51 52 typedef std::map<ShelfID, ShelfItemDelegate*> ShelfIDToItemDelegateMap; 53 54 // Remove and destroy ShelfItemDelegate for |id|. 55 void RemoveShelfItemDelegate(ShelfID id); 56 57 // Owned by Shell. 58 ShelfModel* model_; 59 60 ShelfIDToItemDelegateMap id_to_item_delegate_map_; 61 62 DISALLOW_COPY_AND_ASSIGN(ShelfItemDelegateManager); 63}; 64 65} // namespace ash 66 67#endif // ASH_SHELF_SHELF_ITEM_DELEGATE_MANAGER_H_ 68