15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_LAUNCHER_LAUNCHER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_LAUNCHER_LAUNCHER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/launcher/launcher_types.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_types.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget_observer.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace app_list { 17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass ApplicationDragAndDropHost; 18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FocusCycler; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LauncherView; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShelfLayoutManager; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LauncherIconObserver; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LauncherDelegate; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LauncherModel; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ShelfWidget; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ASH_EXPORT Launcher { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kNativeViewName[]; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Launcher(LauncherModel* launcher_model, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LauncherDelegate* launcher_delegate, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShelfWidget* shelf_widget); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Launcher(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the launcher for the primary display. NULL if no user is 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // logged in yet. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Launcher* ForPrimaryDisplay(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the launcher for the display that |window| is currently on, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or a launcher on primary display if the launcher per display feature 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is disabled. NULL if no user is logged in yet. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Launcher* ForWindow(aura::Window* window); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAlignment(ShelfAlignment alignment); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShelfAlignment alignment() const { return alignment_; } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the screen bounds of the item for the specified window. If there is 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no item for the specified window an empty rect is returned. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect GetScreenBoundsOfItemIconForWindow(aura::Window* window); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the icon position given the current window bounds. This is used 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when dragging panels to reposition them with respect to the other panels. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateIconPositionForWindow(aura::Window* window); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activates the the launcher item specified by the index in the list 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of launcher items. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ActivateLauncherItem(int index); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cycles the window focus linearly over the current launcher items. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CycleWindowLinear(CycleDirection direction); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddIconObserver(LauncherIconObserver* observer); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveIconObserver(LauncherIconObserver* observer); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the Launcher is showing a context menu. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsShowingMenu() const; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsShowingOverflowBubble() const; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetVisible(bool visible) const; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsVisible() const; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void SchedulePaint(); 934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* GetAppListButtonView() const; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Launch a 0-indexed launcher item in the Launcher. 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // A negative index launches the last launcher item in the launcher. 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void LaunchAppIndexAt(int item_index); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only to be called for testing. Retrieves the LauncherView. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(sky): remove this! 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::LauncherView* GetLauncherViewForTest(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LauncherDelegate* delegate() { return delegate_; } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShelfWidget* shelf_widget() { return shelf_widget_; } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the bounds of the launcher view. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLauncherViewBounds(gfx::Rect bounds); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect GetLauncherViewBounds() const; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Returns ApplicationDragAndDropHost for this Launcher. 113bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch app_list::ApplicationDragAndDropHost* GetDragAndDropHostForAppList(); 114bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // LauncherView used to display icons. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::LauncherView* launcher_view_; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShelfAlignment alignment_; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LauncherDelegate* delegate_; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShelfWidget* shelf_widget_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Launcher); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // ASH_LAUNCHER_LAUNCHER_H_ 131