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 ASH_TEST_CHILD_MODAL_WINDOW_H_ 6 #define ASH_TEST_CHILD_MODAL_WINDOW_H_ 7 8 #include "ui/views/controls/button/button.h" 9 #include "ui/views/widget/widget_delegate.h" 10 #include "ui/views/widget/widget_observer.h" 11 12 namespace views { 13 class LabelButton; 14 class NativeViewHost; 15 class Textfield; 16 class View; 17 class Widget; 18 } 19 20 namespace ash { 21 namespace test { 22 23 void CreateChildModalParent(gfx::NativeView context); 24 25 class ChildModalParent : public views::WidgetDelegateView, 26 public views::ButtonListener, 27 public views::WidgetObserver { 28 public: 29 ChildModalParent(gfx::NativeView context); 30 virtual ~ChildModalParent(); 31 32 void ShowChild(); 33 gfx::NativeWindow GetModalParent() const; 34 gfx::NativeWindow GetChild() const; 35 36 private: 37 views::Widget* CreateChild(); 38 39 // Overridden from views::WidgetDelegate: 40 virtual View* GetContentsView() OVERRIDE; 41 virtual base::string16 GetWindowTitle() const OVERRIDE; 42 virtual bool CanResize() const OVERRIDE; 43 virtual void DeleteDelegate() OVERRIDE; 44 45 // Overridden from views::View: 46 virtual void Layout() OVERRIDE; 47 virtual void ViewHierarchyChanged( 48 const ViewHierarchyChangedDetails& details) OVERRIDE; 49 50 // Overridden from ButtonListener: 51 virtual void ButtonPressed(views::Button* sender, 52 const ui::Event& event) OVERRIDE; 53 54 // Overridden from WidgetObserver: 55 virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE; 56 57 // The button to toggle showing and hiding the child window. The child window 58 // does not block input to this button. 59 views::LabelButton* button_; 60 61 // The text field to indicate the keyboard focus. 62 views::Textfield* textfield_; 63 64 // The host for the modal parent. 65 views::NativeViewHost* host_; 66 67 // The modal parent of the child window. The child window blocks input to this 68 // view. 69 gfx::NativeWindow modal_parent_; 70 71 // The child window. 72 views::Widget* child_; 73 74 DISALLOW_COPY_AND_ASSIGN(ChildModalParent); 75 }; 76 77 } // namespace test 78 } // namespace ash 79 80 #endif // ASH_TEST_CHILD_MODAL_WINDOW_H_ 81