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_H_ 6#define ASH_SHELF_SHELF_H_ 7 8#include "ash/ash_export.h" 9#include "ash/shelf/shelf_constants.h" 10#include "ash/shelf/shelf_types.h" 11#include "base/basictypes.h" 12#include "base/memory/scoped_ptr.h" 13#include "ui/gfx/size.h" 14#include "ui/views/widget/widget_observer.h" 15 16namespace app_list { 17class ApplicationDragAndDropHost; 18} 19 20namespace aura { 21class Window; 22} 23 24namespace gfx { 25class Rect; 26} 27 28namespace views { 29class View; 30} 31 32namespace ash { 33class FocusCycler; 34class ShelfDelegate; 35class ShelfIconObserver; 36class ShelfLayoutManager; 37class ShelfModel; 38class ShelfView; 39class ShelfWidget; 40 41namespace test { 42class ShelfTestAPI; 43} 44 45 46class ASH_EXPORT Shelf { 47 public: 48 static const char kNativeViewName[]; 49 50 Shelf(ShelfModel* model, ShelfDelegate* delegate, ShelfWidget* widget); 51 virtual ~Shelf(); 52 53 // Return the shelf for the primary display. NULL if no user is logged in yet. 54 static Shelf* ForPrimaryDisplay(); 55 56 // Return the shelf for the display that |window| is currently on, or a shelf 57 // on primary display if the shelf per display feature is disabled. NULL if 58 // no user is logged in yet. 59 static Shelf* ForWindow(aura::Window* window); 60 61 void SetAlignment(ShelfAlignment alignment); 62 ShelfAlignment alignment() const { return alignment_; } 63 64 // Returns the screen bounds of the item for the specified window. If there is 65 // no item for the specified window an empty rect is returned. 66 gfx::Rect GetScreenBoundsOfItemIconForWindow(const aura::Window* window); 67 68 // Updates the icon position given the current window bounds. This is used 69 // when dragging panels to reposition them with respect to the other panels. 70 void UpdateIconPositionForWindow(aura::Window* window); 71 72 // Activates the the shelf item specified by the index in the list of shelf 73 // items. 74 void ActivateShelfItem(int index); 75 76 // Cycles the window focus linearly over the current shelf items. 77 void CycleWindowLinear(CycleDirection direction); 78 79 void AddIconObserver(ShelfIconObserver* observer); 80 void RemoveIconObserver(ShelfIconObserver* observer); 81 82 // Returns true if the shelf is showing a context menu. 83 bool IsShowingMenu() const; 84 85 bool IsShowingOverflowBubble() const; 86 87 void SetVisible(bool visible) const; 88 bool IsVisible() const; 89 90 void SchedulePaint(); 91 92 views::View* GetAppListButtonView() const; 93 94 // Launch a 0-indexed shelf item in the shelf. 95 // A negative index launches the last shelf item in the shelf. 96 void LaunchAppIndexAt(int item_index); 97 98 ShelfWidget* shelf_widget() { return shelf_widget_; } 99 100 // Set the bounds of the shelf view. 101 void SetShelfViewBounds(gfx::Rect bounds); 102 gfx::Rect GetShelfViewBounds() const; 103 104 // Returns rectangle bounding all visible shelf items. Used screen coordinate 105 // system. 106 gfx::Rect GetVisibleItemsBoundsInScreen() const; 107 108 // Returns ApplicationDragAndDropHost for this shelf. 109 app_list::ApplicationDragAndDropHost* GetDragAndDropHostForAppList(); 110 111 private: 112 friend class test::ShelfTestAPI; 113 114 // ShelfView used to display icons. 115 ShelfView* shelf_view_; 116 117 ShelfAlignment alignment_; 118 119 ShelfDelegate* delegate_; 120 121 ShelfWidget* shelf_widget_; 122 123 DISALLOW_COPY_AND_ASSIGN(Shelf); 124}; 125 126} // namespace ash 127 128#endif // ASH_SHELF_SHELF_H_ 129