• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 UI_VIEWS_WINDOW_DIALOG_DELEGATE_H_
6 #define UI_VIEWS_WINDOW_DIALOG_DELEGATE_H_
7 
8 #include "base/compiler_specific.h"
9 #include "base/strings/string16.h"
10 #include "ui/base/accessibility/accessibility_types.h"
11 #include "ui/base/models/dialog_model.h"
12 #include "ui/base/ui_base_types.h"
13 #include "ui/views/widget/widget_delegate.h"
14 
15 namespace views {
16 
17 class DialogClientView;
18 
19 ///////////////////////////////////////////////////////////////////////////////
20 //
21 // DialogDelegate
22 //
23 //  DialogDelegate is an interface implemented by objects that wish to show a
24 //  dialog box Window. The window that is displayed uses this interface to
25 //  determine how it should be displayed and notify the delegate object of
26 //  certain events.
27 //
28 ///////////////////////////////////////////////////////////////////////////////
29 class VIEWS_EXPORT DialogDelegate : public ui::DialogModel,
30                                     public WidgetDelegate {
31  public:
32   virtual ~DialogDelegate();
33 
34   // Create a |dialog| window Widget with the specified |context| or |parent|.
35   static Widget* CreateDialogWidget(DialogDelegate* dialog,
36                                     gfx::NativeWindow context,
37                                     gfx::NativeWindow parent);
38 
39   // Override this function to display an extra view adjacent to the buttons.
40   // Overrides may construct the view; this will only be called once per dialog.
41   virtual View* CreateExtraView();
42 
43   // Override this function to display an extra view in the titlebar.
44   // Overrides may construct the view; this will only be called once per dialog.
45   // Note: this only works for new style dialogs.
46   virtual View* CreateTitlebarExtraView();
47 
48   // Override this function to display a footnote view below the buttons.
49   // Overrides may construct the view; this will only be called once per dialog.
50   virtual View* CreateFootnoteView();
51 
52   // For Dialog boxes, if there is a "Cancel" button or no dialog button at all,
53   // this is called when the user presses the "Cancel" button or the Esc key.
54   // It can also be called on a close action if |Close| has not been
55   // overridden. This function should return true if the window can be closed
56   // after it returns, or false if it must remain open.
57   virtual bool Cancel();
58 
59   // For Dialog boxes, this is called when the user presses the "OK" button,
60   // or the Enter key. It can also be called on a close action if |Close|
61   // has not been overridden. This function should return true if the window
62   // can be closed after it returns, or false if it must remain open.
63   // If |window_closing| is true, it means that this handler is
64   // being called because the window is being closed (e.g.  by Window::Close)
65   // and there is no Cancel handler, so Accept is being called instead.
66   virtual bool Accept(bool window_closing);
67   virtual bool Accept();
68 
69   // Called when the user closes the window without selecting an option,
70   // e.g. by pressing the close button on the window or using a window manager
71   // gesture. By default, this calls Accept() if the only button in the dialog
72   // is Accept, Cancel() otherwise. This function should return true if the
73   // window can be closed after it returns, or false if it must remain open.
74   virtual bool Close();
75 
76   // Overridden from ui::DialogModel:
77   virtual base::string16 GetDialogLabel() const OVERRIDE;
78   virtual base::string16 GetDialogTitle() const OVERRIDE;
79   virtual int GetDialogButtons() const OVERRIDE;
80   virtual int GetDefaultDialogButton() const OVERRIDE;
81   virtual bool ShouldDefaultButtonBeBlue() const OVERRIDE;
82   virtual base::string16 GetDialogButtonLabel(
83       ui::DialogButton button) const OVERRIDE;
84   virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
85 
86   // Overridden from WidgetDelegate:
87   virtual View* GetInitiallyFocusedView() OVERRIDE;
88   virtual DialogDelegate* AsDialogDelegate() OVERRIDE;
89   virtual ClientView* CreateClientView(Widget* widget) OVERRIDE;
90   virtual NonClientFrameView* CreateNonClientFrameView(Widget* widget) OVERRIDE;
91 
92   // Create a frame view using the new dialog style.
93   static NonClientFrameView* CreateDialogFrameView(Widget* widget);
94   // The semi-transparent border and shadow of the new style frame view does not
95   // work on child windows under Views/Win32. This is a kludge to get a
96   // reasonable-looking opaque border for the dialog. Note that this does not
97   // support arrows.
98   //
99   // TODO(wittman): Remove once WinAura is in place.
100   static NonClientFrameView* CreateDialogFrameView(Widget* widget,
101                                                    bool force_opaque_border);
102 
103   // Returns whether this particular dialog should use the new dialog style.
104   virtual bool UseNewStyleForThisDialog() const;
105 
106   // Called when the window has been closed.
OnClosed()107   virtual void OnClosed() {}
108 
109   // A helper for accessing the DialogClientView object contained by this
110   // delegate's Window.
111   const DialogClientView* GetDialogClientView() const;
112   DialogClientView* GetDialogClientView();
113 
114  protected:
115   // Overridden from WidgetDelegate:
116   virtual ui::AccessibilityTypes::Role GetAccessibleWindowRole() const OVERRIDE;
117 };
118 
119 // A DialogDelegate implementation that is-a View. Used to override GetWidget()
120 // to call View's GetWidget() for the common case where a DialogDelegate
121 // implementation is-a View. Note that DialogDelegateView is not owned by
122 // view's hierarchy and is expected to be deleted on DeleteDelegate call.
123 class VIEWS_EXPORT DialogDelegateView : public DialogDelegate,
124                                         public View {
125  public:
126   DialogDelegateView();
127   virtual ~DialogDelegateView();
128 
129   // Overridden from DialogDelegate:
130   virtual void DeleteDelegate() OVERRIDE;
131   virtual Widget* GetWidget() OVERRIDE;
132   virtual const Widget* GetWidget() const OVERRIDE;
133   virtual View* GetContentsView() OVERRIDE;
134 
135  private:
136   DISALLOW_COPY_AND_ASSIGN(DialogDelegateView);
137 };
138 
139 }  // namespace views
140 
141 #endif  // UI_VIEWS_WINDOW_DIALOG_DELEGATE_H_
142