Enable snappy for IndexedDB.
[chromium-blink-merge.git] / ash / wm / caption_buttons / maximize_bubble_controller.h
blob06272daae9c7cdfeda27bfb3619ea7f85094656f
1 // Copyright 2013 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.
5 #ifndef ASH_WM_CAPTION_BUTTONS_MAXIMIZE_BUBBLE_CONTROLLER_H_
6 #define ASH_WM_CAPTION_BUTTONS_MAXIMIZE_BUBBLE_CONTROLLER_H_
8 #include "ash/ash_export.h"
9 #include "ash/wm/caption_buttons/maximize_bubble_frame_state.h"
10 #include "ash/wm/workspace/snap_types.h"
11 #include "base/memory/scoped_ptr.h"
13 namespace aura {
14 class Window;
17 namespace base {
18 class Timer;
21 namespace views {
22 class CustomButton;
25 namespace ash {
27 class FrameMaximizeButton;
29 // A class which shows a helper UI for the maximize button after a delay.
30 class ASH_EXPORT MaximizeBubbleController {
31 public:
32 class Bubble;
34 MaximizeBubbleController(FrameMaximizeButton* frame_maximize_button,
35 MaximizeBubbleFrameState maximize_type,
36 int appearance_delay_ms);
37 // Called from the outside to destroy the interface to the UI visuals.
38 // The visuals will then delete when possible (maybe asynchronously).
39 virtual ~MaximizeBubbleController();
41 // Update the UI visuals to reflect the previewed |snap_type| snapping state.
42 void SetSnapType(SnapType snap_type);
44 // To achieve proper Z-sorting with the snap animation, this window will be
45 // presented above the phantom window.
46 aura::Window* GetBubbleWindow();
48 // Reset the delay of the menu creation (if it was not created yet).
49 void DelayCreation();
51 // Called to tell the owning FrameMaximizeButton that a button was clicked.
52 void OnButtonClicked(SnapType snap_type);
54 // Called to tell the the owning FrameMaximizeButton that the hover status
55 // for a button has changed. |snap_type| can be either SNAP_LEFT, SNAP_RIGHT,
56 // SNAP_MINIMIZE or SNAP_NONE.
57 void OnButtonHover(SnapType snap_type);
59 // Get the owning FrameMaximizeButton.
60 FrameMaximizeButton* frame_maximize_button() {
61 return frame_maximize_button_;
64 // The status of the associated window: Maximized or normal.
65 MaximizeBubbleFrameState maximize_type() const { return maximize_type_; }
67 // A unit test function to return buttons of the sub menu. |state| can be
68 // either SNAP_LEFT, SNAP_RIGHT or SNAP_MINIMIZE.
69 views::CustomButton* GetButtonForUnitTest(SnapType state);
71 protected:
72 // Called from the the Bubble class to destroy itself: It tells the owning
73 // object that it will destroy itself asynchronously. The owner will then
74 // destroy |this|.
75 void RequestDestructionThroughOwner();
77 private:
78 // The function which creates the bubble once the delay is elapsed.
79 void CreateBubble();
81 // The owning button which is also the anchor for the menu.
82 FrameMaximizeButton* frame_maximize_button_;
84 // The bubble menu.
85 Bubble* bubble_;
87 // The current maximize state of the owning window.
88 const MaximizeBubbleFrameState maximize_type_;
90 // The snap type with which the bubble is created. This is needed because the
91 // creation of the bubble can be delayed and SetSnapType() may be called
92 // before the bubble is created.
93 SnapType snap_type_for_creation_;
95 // The timer for the delayed creation of the menu.
96 scoped_ptr<base::Timer> timer_;
98 // The appearance delay in ms (delay and fade in & fade out delay).
99 const int appearance_delay_ms_;
101 DISALLOW_COPY_AND_ASSIGN(MaximizeBubbleController);
104 } // namespace ash
106 #endif // ASH_WM_CAPTION_BUTTONS_MAXIMIZE_BUBBLE_CONTROLLER_H_