widget_delegate.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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#include "ui/views/widget/widget_delegate.h"
6
7#include "base/strings/utf_string_conversions.h"
8#include "ui/gfx/image/image_skia.h"
9#include "ui/views/bubble/bubble_delegate.h"
10#include "ui/views/view.h"
11#include "ui/views/views_delegate.h"
12#include "ui/views/widget/widget.h"
13#include "ui/views/window/client_view.h"
14
15namespace views {
16
17////////////////////////////////////////////////////////////////////////////////
18// WidgetDelegate:
19
20WidgetDelegate::WidgetDelegate()
21    : default_contents_view_(NULL),
22      can_activate_(true) {
23}
24
25void WidgetDelegate::OnWidgetMove() {
26}
27
28void WidgetDelegate::OnDisplayChanged() {
29}
30
31void WidgetDelegate::OnWorkAreaChanged() {
32}
33
34View* WidgetDelegate::GetInitiallyFocusedView() {
35  return NULL;
36}
37
38BubbleDelegateView* WidgetDelegate::AsBubbleDelegate() {
39  return NULL;
40}
41
42DialogDelegate* WidgetDelegate::AsDialogDelegate() {
43  return NULL;
44}
45
46bool WidgetDelegate::CanResize() const {
47  return false;
48}
49
50bool WidgetDelegate::CanMaximize() const {
51  return false;
52}
53
54bool WidgetDelegate::CanMinimize() const {
55  return false;
56}
57
58bool WidgetDelegate::CanActivate() const {
59  return can_activate_;
60}
61
62ui::ModalType WidgetDelegate::GetModalType() const {
63  return ui::MODAL_TYPE_NONE;
64}
65
66ui::AXRole WidgetDelegate::GetAccessibleWindowRole() const {
67  return ui::AX_ROLE_WINDOW;
68}
69
70base::string16 WidgetDelegate::GetAccessibleWindowTitle() const {
71  return GetWindowTitle();
72}
73
74base::string16 WidgetDelegate::GetWindowTitle() const {
75  return base::string16();
76}
77
78bool WidgetDelegate::ShouldShowWindowTitle() const {
79  return true;
80}
81
82bool WidgetDelegate::ShouldShowCloseButton() const {
83  return true;
84}
85
86bool WidgetDelegate::ShouldHandleSystemCommands() const {
87  const Widget* widget = GetWidget();
88  if (!widget)
89    return false;
90
91  return widget->non_client_view() != NULL;
92}
93
94gfx::ImageSkia WidgetDelegate::GetWindowAppIcon() {
95  // Use the window icon as app icon by default.
96  return GetWindowIcon();
97}
98
99// Returns the icon to be displayed in the window.
100gfx::ImageSkia WidgetDelegate::GetWindowIcon() {
101  return gfx::ImageSkia();
102}
103
104bool WidgetDelegate::ShouldShowWindowIcon() const {
105  return false;
106}
107
108bool WidgetDelegate::ExecuteWindowsCommand(int command_id) {
109  return false;
110}
111
112std::string WidgetDelegate::GetWindowName() const {
113  return std::string();
114}
115
116void WidgetDelegate::SaveWindowPlacement(const gfx::Rect& bounds,
117                                         ui::WindowShowState show_state) {
118  std::string window_name = GetWindowName();
119  if (!ViewsDelegate::views_delegate || window_name.empty())
120    return;
121
122  ViewsDelegate::views_delegate->SaveWindowPlacement(
123      GetWidget(), window_name, bounds, show_state);
124}
125
126bool WidgetDelegate::GetSavedWindowPlacement(
127    const Widget* widget,
128    gfx::Rect* bounds,
129    ui::WindowShowState* show_state) const {
130  std::string window_name = GetWindowName();
131  if (!ViewsDelegate::views_delegate || window_name.empty())
132    return false;
133
134  return ViewsDelegate::views_delegate->GetSavedWindowPlacement(
135      widget, window_name, bounds, show_state);
136}
137
138bool WidgetDelegate::ShouldRestoreWindowSize() const {
139  return true;
140}
141
142View* WidgetDelegate::GetContentsView() {
143  if (!default_contents_view_)
144    default_contents_view_ = new View;
145  return default_contents_view_;
146}
147
148ClientView* WidgetDelegate::CreateClientView(Widget* widget) {
149  return new ClientView(widget, GetContentsView());
150}
151
152NonClientFrameView* WidgetDelegate::CreateNonClientFrameView(Widget* widget) {
153  return NULL;
154}
155
156View* WidgetDelegate::CreateOverlayView() {
157  return NULL;
158}
159
160bool WidgetDelegate::WillProcessWorkAreaChange() const {
161  return false;
162}
163
164bool WidgetDelegate::WidgetHasHitTestMask() const {
165  return false;
166}
167
168void WidgetDelegate::GetWidgetHitTestMask(gfx::Path* mask) const {
169  DCHECK(mask);
170}
171
172bool WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() const {
173  return false;
174}
175
176bool WidgetDelegate::ShouldDescendIntoChildForEventHandling(
177    gfx::NativeView child,
178    const gfx::Point& location) {
179  return true;
180}
181
182////////////////////////////////////////////////////////////////////////////////
183// WidgetDelegateView:
184
185WidgetDelegateView::WidgetDelegateView() {
186  // A WidgetDelegate should be deleted on DeleteDelegate.
187  set_owned_by_client();
188}
189
190WidgetDelegateView::~WidgetDelegateView() {
191}
192
193void WidgetDelegateView::DeleteDelegate() {
194  delete this;
195}
196
197Widget* WidgetDelegateView::GetWidget() {
198  return View::GetWidget();
199}
200
201const Widget* WidgetDelegateView::GetWidget() const {
202  return View::GetWidget();
203}
204
205}  // namespace views
206