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 13namespace ash { 14class ShelfLayoutManager; 15class ShelfView; 16 17namespace test { 18class OverflowBubbleViewTestAPI; 19} 20 21// OverflowBubbleView hosts a ShelfView to display overflown items. 22// Exports to access this class from OverflowBubbleViewTestAPI. 23class 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