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