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/launcher/launcher_types.h" 12 #include "ash/shelf/shelf_model_observer.h" 13 #include "base/compiler_specific.h" 14 #include "base/memory/scoped_ptr.h" 15 16 namespace ash { 17 class ShelfItemDelegate; 18 class ShelfModel; 19 20 namespace test { 21 class 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. 29 class 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(LauncherID id, 36 scoped_ptr<ShelfItemDelegate> item_delegate); 37 38 // Returns ShelfItemDelegate for |item_type|. Always returns non-NULL. 39 ShelfItemDelegate* GetShelfItemDelegate(LauncherID id); 40 41 // ShelfModelObserver overrides: 42 virtual void ShelfItemAdded(int model_index) OVERRIDE; 43 virtual void ShelfItemRemoved(int index, LauncherID id) OVERRIDE; 44 virtual void ShelfItemMoved(int start_index, int targetindex) OVERRIDE; 45 virtual void ShelfItemChanged(int index, 46 const LauncherItem& old_item) OVERRIDE; 47 virtual void ShelfStatusChanged() OVERRIDE; 48 49 private: 50 friend class test::ShelfItemDelegateManagerTestAPI; 51 52 typedef std::map<LauncherID, ShelfItemDelegate*> LauncherIDToItemDelegateMap; 53 54 // Remove and destroy ShelfItemDelegate for |id|. 55 void RemoveShelfItemDelegate(LauncherID id); 56 57 // Owned by Shell. 58 ShelfModel* model_; 59 60 LauncherIDToItemDelegateMap 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