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