Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / athena / screen / modal_window_controller.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_SCREEN_MODAL_WINDOW_CONTROLLER_H_
6 #define ATHENA_SCREEN_MODAL_WINDOW_CONTROLLER_H_
7
8 #include "athena/athena_export.h"
9 #include "ui/aura/window_observer.h"
10
11 namespace athena {
12
13 // ModalWindow controller manages the modal window and
14 // its container. This gets created when a modal window is opened
15 // and deleted when all modal windows are deleted.
16 class ATHENA_EXPORT ModalWindowController : public aura::WindowObserver {
17  public:
18   // Returns the ModalWindowController associated with the container.
19   static ModalWindowController* Get(aura::Window* container);
20
21   explicit ModalWindowController(int container_priority);
22   ~ModalWindowController() override;
23
24   aura::Window* modal_container() { return modal_container_; }
25
26   bool dimmed() const { return dimmed_; }
27
28  private:
29   // aura::WindowObserver:
30   virtual void OnWindowAdded(aura::Window* child) override;
31   virtual void OnWindowVisibilityChanged(aura::Window* window,
32                                          bool visible) override;
33   virtual void OnWindowBoundsChanged(aura::Window* window,
34                                      const gfx::Rect& old_bounds,
35                                      const gfx::Rect& new_bounds) override;
36   virtual void OnWindowDestroyed(aura::Window* window) override;
37
38   // Tells if the child is not a dimmer window and a child of the modal
39   // container.
40   bool IsChildWindow(aura::Window* child) const;
41
42   void UpdateDimmerWindowBounds();
43
44   // Change dimming state based on the visible window in the container.
45   void UpdateDimming(aura::Window* ignore);
46
47   // Note: changing true -> false will delete the modal_container_.
48   void SetDimmed(bool dimmed);
49
50   aura::Window* modal_container_;  // not owned.
51   aura::Window* dimmer_window_;    // not owned.
52
53   bool dimmed_;
54   DISALLOW_COPY_AND_ASSIGN(ModalWindowController);
55 };
56
57 }  // namespace athena
58
59 #endif  // ATHENA_SCREEN_MODAL_WINDOW_CONTROLLER_H_