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_OVERFLOW_BUBBLE_VIEW_H_ 6 #define ASH_SHELF_OVERFLOW_BUBBLE_VIEW_H_ 7 8 #include "ash/ash_export.h" 9 #include "base/basictypes.h" 10 #include "base/compiler_specific.h" 11 #include "ui/views/bubble/bubble_delegate.h" 12 13 namespace ash { 14 class ShelfLayoutManager; 15 class ShelfView; 16 17 namespace test { 18 class OverflowBubbleViewTestAPI; 19 } 20 21 // OverflowBubbleView hosts a ShelfView to display overflown items. 22 // Exports to access this class from OverflowBubbleViewTestAPI. 23 class ASH_EXPORT OverflowBubbleView : public views::BubbleDelegateView { 24 public: 25 OverflowBubbleView(); 26 virtual ~OverflowBubbleView(); 27 28 void InitOverflowBubble(views::View* anchor, ShelfView* shelf_view); 29 30 // views::BubbleDelegateView overrides: 31 virtual gfx::Rect GetBubbleBounds() OVERRIDE; 32 33 private: 34 friend class test::OverflowBubbleViewTestAPI; 35 36 bool IsHorizontalAlignment() const; 37 38 const gfx::Size GetContentsSize() const; 39 40 // Gets arrow location based on shelf alignment. 41 views::BubbleBorder::Arrow GetBubbleArrow() const; 42 43 void ScrollByXOffset(int x_offset); 44 void ScrollByYOffset(int y_offset); 45 46 // views::View overrides: 47 virtual gfx::Size GetPreferredSize() const OVERRIDE; 48 virtual void Layout() OVERRIDE; 49 virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE; 50 virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE; 51 52 // ui::EventHandler overrides: 53 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE; 54 55 ShelfLayoutManager* GetShelfLayoutManager() const; 56 57 ShelfView* shelf_view_; // Owned by views hierarchy. 58 gfx::Vector2d scroll_offset_; 59 60 DISALLOW_COPY_AND_ASSIGN(OverflowBubbleView); 61 }; 62 63 } // namespace ash 64 65 #endif // ASH_SHELF_OVERFLOW_BUBBLE_VIEW_H_ 66