7d08a9d940bd02ea71fecc354cf40697c8abb327
[platform/framework/web/crosswalk.git] / src / athena / wm / window_list_provider_impl.h
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_LIST_PROVIDER_IMPL_H_
6 #define ATHENA_WM_WINDOW_LIST_PROVIDER_IMPL_H_
7
8 #include "athena/wm/public/window_list_provider.h"
9 #include "ui/aura/window_observer.h"
10
11 namespace athena {
12
13 class WindowListProviderObserver;
14
15 // This implementation of the WindowListProviderImpl uses the same order as in
16 // the container window's stacking order.
17 class ATHENA_EXPORT WindowListProviderImpl : public WindowListProvider,
18                                              public aura::WindowObserver {
19  public:
20   explicit WindowListProviderImpl(aura::Window* container);
21   virtual ~WindowListProviderImpl();
22
23  private:
24   void RecreateWindowList();
25
26   // WindowListProvider:
27   virtual void AddObserver(WindowListProviderObserver* observer) OVERRIDE;
28   virtual void RemoveObserver(WindowListProviderObserver* observer) OVERRIDE;
29   virtual const aura::Window::Windows& GetWindowList() const OVERRIDE;
30   virtual bool IsWindowInList(aura::Window* window) const OVERRIDE;
31   virtual bool IsValidWindow(aura::Window* window) const OVERRIDE;
32   virtual void StackWindowFrontOf(aura::Window* window,
33                                   aura::Window*reference_window) OVERRIDE;
34   virtual void StackWindowBehindTo(aura::Window* window,
35                                    aura::Window*reference_window) OVERRIDE;
36
37   // aura::WindowObserver:
38   virtual void OnWindowAdded(aura::Window* new_window) OVERRIDE;
39   virtual void OnWillRemoveWindow(aura::Window* old_window) OVERRIDE;
40   virtual void OnWindowStackingChanged(aura::Window* window) OVERRIDE;
41
42   aura::Window* container_;
43   aura::Window::Windows window_list_;
44   ObserverList<WindowListProviderObserver> observers_;
45
46   DISALLOW_COPY_AND_ASSIGN(WindowListProviderImpl);
47 };
48
49 }  // namespace athena
50
51 #endif  // ATHENA_WM_WINDOW_LIST_PROVIDER_IMPL_H_