103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef ATHENA_WM_WINDOW_MANAGER_IMPL_H_
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define ATHENA_WM_WINDOW_MANAGER_IMPL_H_
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/athena_export.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/input/public/accelerator_manager.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/wm/public/window_manager.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/wm/title_drag_controller.h"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/wm/window_overview_mode.h"
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/observer_list.h"
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/aura/window_observer.h"
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace wm {
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class ShadowController;
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class WMState;
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace athena {
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace test {
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class WindowManagerImplTestApi;
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class BezelController;
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SplitViewController;
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class WindowListProvider;
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class WindowManagerObserver;
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ATHENA_EXPORT WindowManagerImpl : public WindowManager,
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                        public WindowOverviewModeDelegate,
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                        public aura::WindowObserver,
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                        public AcceleratorHandler,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                        public TitleDragControllerDelegate {
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WindowManagerImpl();
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual ~WindowManagerImpl();
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void ToggleSplitView();
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // WindowManager:
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void ToggleOverview() OVERRIDE;
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual bool IsOverviewModeActive() OVERRIDE;
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  friend class test::WindowManagerImplTestApi;
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  friend class AthenaContainerLayoutManager;
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  enum Command {
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CMD_TOGGLE_OVERVIEW,
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CMD_TOGGLE_SPLIT_VIEW,
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  };
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Sets whether overview mode is active.
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void SetInOverview(bool active);
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void InstallAccelerators();
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // WindowManager:
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void AddObserver(WindowManagerObserver* observer) OVERRIDE;
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void RemoveObserver(WindowManagerObserver* observer) OVERRIDE;
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ToggleSplitViewForTest() OVERRIDE;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual WindowListProvider* GetWindowListProvider() OVERRIDE;
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // WindowOverviewModeDelegate:
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnSelectWindow(aura::Window* window) OVERRIDE;
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnSelectSplitViewWindow(aura::Window* left,
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       aura::Window* right,
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       aura::Window* to_activate) OVERRIDE;
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // aura::WindowObserver:
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // AcceleratorHandler:
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual bool IsCommandEnabled(int command_id) const OVERRIDE;
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual bool OnAcceleratorFired(int command_id,
8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  const ui::Accelerator& accelerator) OVERRIDE;
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // TitleDragControllerDelegate:
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual aura::Window* GetWindowBehind(aura::Window* window) OVERRIDE;
8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnTitleDragStarted(aura::Window* window) OVERRIDE;
8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnTitleDragCompleted(aura::Window* window) OVERRIDE;
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnTitleDragCanceled(aura::Window* window) OVERRIDE;
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<aura::Window> container_;
8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<WindowListProvider> window_list_provider_;
9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<WindowOverviewMode> overview_;
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<BezelController> bezel_controller_;
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<SplitViewController> split_view_controller_;
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<wm::WMState> wm_state_;
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<TitleDragController> title_drag_controller_;
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<wm::ShadowController> shadow_controller_;
9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  ObserverList<WindowManagerObserver> observers_;
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WindowManagerImpl);
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace athena
10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // ATHENA_WM_WINDOW_MANAGER_IMPL_H_
104