1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
#define CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
#include "chrome/common/gfx/chrome_font.h"
#include "chrome/views/focus/focus_manager.h"
#include "chrome/views/controls/button/button.h"
#include "chrome/views/window/client_view.h"
namespace views {
class DialogDelegate;
class NativeButton;
class Window;
///////////////////////////////////////////////////////////////////////////////
// DialogClientView
//
// This ClientView subclass provides the content of a typical dialog box,
// including a strip of buttons at the bottom right of the window, default
// accelerator handlers for accept and cancel, and the ability for the
// embedded contents view to provide extra UI to be shown in the row of
// buttons.
//
class DialogClientView : public ClientView,
public ButtonListener,
public FocusChangeListener {
public:
DialogClientView(Window* window, View* contents_view);
virtual ~DialogClientView();
// Adds the dialog buttons required by the supplied WindowDelegate to the
// view.
void ShowDialogButtons();
// Updates the enabled state and label of the buttons required by the
// supplied WindowDelegate
void UpdateDialogButtons();
// Accept the changes made in the window that contains this ClientView.
void AcceptWindow();
// Cancel the changes made in the window that contains this ClientView.
void CancelWindow();
// Accessors in case the user wishes to adjust these buttons.
NativeButton* ok_button() const { return ok_button_; }
NativeButton* cancel_button() const { return cancel_button_; }
// Overridden from ClientView:
virtual bool CanClose() const;
virtual void WindowClosing();
virtual int NonClientHitTest(const gfx::Point& point);
virtual DialogClientView* AsDialogClientView() { return this; }
// FocusChangeListener implementation:
virtual void FocusWillChange(View* focused_before, View* focused_now);
protected:
// View overrides:
virtual void Paint(ChromeCanvas* canvas);
virtual void PaintChildren(ChromeCanvas* canvas);
virtual void Layout();
virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
virtual gfx::Size GetPreferredSize();
virtual bool AcceleratorPressed(const Accelerator& accelerator);
// ButtonListener implementation:
virtual void ButtonPressed(Button* sender);
private:
// Paint the size box in the bottom right corner of the window if it is
// resizable.
void PaintSizeBox(ChromeCanvas* canvas);
// Returns the width of the specified dialog button using the correct font.
int GetButtonWidth(int button) const;
int DialogClientView::GetButtonsHeight() const;
// Position and size various sub-views.
void LayoutDialogButtons();
void LayoutContentsView();
// Makes the specified button the default button.
void SetDefaultButton(NativeButton* button);
bool has_dialog_buttons() const { return ok_button_ || cancel_button_; }
// Create and add the extra view, if supplied by the delegate.
void CreateExtraView();
// Returns the DialogDelegate for the window.
DialogDelegate* GetDialogDelegate() const;
// The dialog buttons.
NativeButton* ok_button_;
NativeButton* cancel_button_;
// The button that is currently the default button if any.
NativeButton* default_button_;
// The button-level extra view, NULL unless the dialog delegate supplies one.
View* extra_view_;
// The layout rect of the size box, when visible.
gfx::Rect size_box_bounds_;
// True if the window was Accepted by the user using the OK button.
bool accepted_;
// Static resource initialization
static void InitClass();
static ChromeFont* dialog_button_font_;
DISALLOW_COPY_AND_ASSIGN(DialogClientView);
};
} // namespace views
#endif // #ifndef CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
|