1 // Copyright 2014 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 ATHENA_WM_WINDOW_MANAGER_IMPL_H_ 6 #define ATHENA_WM_WINDOW_MANAGER_IMPL_H_ 7 8 #include "athena/athena_export.h" 9 #include "athena/input/public/accelerator_manager.h" 10 #include "athena/wm/public/window_manager.h" 11 #include "athena/wm/title_drag_controller.h" 12 #include "athena/wm/window_overview_mode.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/observer_list.h" 15 #include "ui/aura/window_observer.h" 16 17 namespace wm { 18 class ShadowController; 19 class WMState; 20 } 21 22 namespace athena { 23 24 namespace test { 25 class WindowManagerImplTestApi; 26 } 27 28 class BezelController; 29 class SplitViewController; 30 class WindowListProvider; 31 class WindowManagerObserver; 32 33 class ATHENA_EXPORT WindowManagerImpl : public WindowManager, 34 public WindowOverviewModeDelegate, 35 public aura::WindowObserver, 36 public AcceleratorHandler, 37 public TitleDragControllerDelegate { 38 public: 39 WindowManagerImpl(); 40 virtual ~WindowManagerImpl(); 41 42 void ToggleSplitView(); 43 44 // WindowManager: 45 virtual void ToggleOverview() OVERRIDE; 46 virtual bool IsOverviewModeActive() OVERRIDE; 47 48 private: 49 friend class test::WindowManagerImplTestApi; 50 friend class AthenaContainerLayoutManager; 51 52 enum Command { 53 CMD_TOGGLE_OVERVIEW, 54 CMD_TOGGLE_SPLIT_VIEW, 55 }; 56 57 // Sets whether overview mode is active. 58 void SetInOverview(bool active); 59 60 void InstallAccelerators(); 61 62 // WindowManager: 63 virtual void AddObserver(WindowManagerObserver* observer) OVERRIDE; 64 virtual void RemoveObserver(WindowManagerObserver* observer) OVERRIDE; 65 virtual void ToggleSplitViewForTest() OVERRIDE; 66 virtual WindowListProvider* GetWindowListProvider() OVERRIDE; 67 68 // WindowOverviewModeDelegate: 69 virtual void OnSelectWindow(aura::Window* window) OVERRIDE; 70 virtual void OnSelectSplitViewWindow(aura::Window* left, 71 aura::Window* right, 72 aura::Window* to_activate) OVERRIDE; 73 74 // aura::WindowObserver: 75 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; 76 77 // AcceleratorHandler: 78 virtual bool IsCommandEnabled(int command_id) const OVERRIDE; 79 virtual bool OnAcceleratorFired(int command_id, 80 const ui::Accelerator& accelerator) OVERRIDE; 81 82 // TitleDragControllerDelegate: 83 virtual aura::Window* GetWindowBehind(aura::Window* window) OVERRIDE; 84 virtual void OnTitleDragStarted(aura::Window* window) OVERRIDE; 85 virtual void OnTitleDragCompleted(aura::Window* window) OVERRIDE; 86 virtual void OnTitleDragCanceled(aura::Window* window) OVERRIDE; 87 88 scoped_ptr<aura::Window> container_; 89 scoped_ptr<WindowListProvider> window_list_provider_; 90 scoped_ptr<WindowOverviewMode> overview_; 91 scoped_ptr<BezelController> bezel_controller_; 92 scoped_ptr<SplitViewController> split_view_controller_; 93 scoped_ptr<wm::WMState> wm_state_; 94 scoped_ptr<TitleDragController> title_drag_controller_; 95 scoped_ptr<wm::ShadowController> shadow_controller_; 96 ObserverList<WindowManagerObserver> observers_; 97 98 DISALLOW_COPY_AND_ASSIGN(WindowManagerImpl); 99 }; 100 101 } // namespace athena 102 103 #endif // ATHENA_WM_WINDOW_MANAGER_IMPL_H_ 104