widget_delegate.cc revision 58537e28ecd584eab876aee8be7156509866d23a
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
149View* WidgetDelegate::CreateOverlayView() {
150  return NULL;
151}
152
153bool WidgetDelegate::WillProcessWorkAreaChange() const {
154  return false;
155}
156
157bool WidgetDelegate::WidgetHasHitTestMask() const {
158  return false;
159}
160
161void WidgetDelegate::GetWidgetHitTestMask(gfx::Path* mask) const {
162  DCHECK(mask);
163}
164
165bool WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() const {
166  return false;
167}
168
169bool WidgetDelegate::ShouldDescendIntoChildForEventHandling(
170    gfx::NativeView child,
171    const gfx::Point& location) {
172  return true;
173}
174
175////////////////////////////////////////////////////////////////////////////////
176// WidgetDelegateView:
177
178WidgetDelegateView::WidgetDelegateView() {
179  // A WidgetDelegate should be deleted on DeleteDelegate.
180  set_owned_by_client();
181}
182
183WidgetDelegateView::~WidgetDelegateView() {
184}
185
186void WidgetDelegateView::DeleteDelegate() {
187  delete this;
188}
189
190Widget* WidgetDelegateView::GetWidget() {
191  return View::GetWidget();
192}
193
194const Widget* WidgetDelegateView::GetWidget() const {
195  return View::GetWidget();
196}
197
198}  // namespace views
199