widget_delegate.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Use of this source code is governed by a BSD-style license that can be
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file.
48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "ui/views/widget/widget_delegate.h"
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/strings/utf_string_conversions.h"
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/gfx/image/image_skia.h"
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "ui/views/bubble/bubble_delegate.h"
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/views/view.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/views/views_delegate.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/views/widget/widget.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/views/window/client_view.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comnamespace views {
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////////
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// WidgetDelegate:
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comWidgetDelegate::WidgetDelegate()
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    : default_contents_view_(NULL),
226f8f292aa768869a9e85c314b124875f57504f2creed@google.com      can_activate_(true) {
23ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com}
24ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com
25ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.comvoid WidgetDelegate::OnWidgetMove() {
26ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com}
27ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid WidgetDelegate::OnDisplayChanged() {
296f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
306f8f292aa768869a9e85c314b124875f57504f2creed@google.com
316f8f292aa768869a9e85c314b124875f57504f2creed@google.comvoid WidgetDelegate::OnWorkAreaChanged() {
326f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
336f8f292aa768869a9e85c314b124875f57504f2creed@google.com
346f8f292aa768869a9e85c314b124875f57504f2creed@google.comView* WidgetDelegate::GetInitiallyFocusedView() {
356f8f292aa768869a9e85c314b124875f57504f2creed@google.com  return NULL;
366f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
376f8f292aa768869a9e85c314b124875f57504f2creed@google.com
386f8f292aa768869a9e85c314b124875f57504f2creed@google.comBubbleDelegateView* WidgetDelegate::AsBubbleDelegate() {
396f8f292aa768869a9e85c314b124875f57504f2creed@google.com  return NULL;
406f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
416f8f292aa768869a9e85c314b124875f57504f2creed@google.com
426f8f292aa768869a9e85c314b124875f57504f2creed@google.comDialogDelegate* WidgetDelegate::AsDialogDelegate() {
436f8f292aa768869a9e85c314b124875f57504f2creed@google.com  return NULL;
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::CanResize() const {
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return false;
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::CanMaximize() const {
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return false;
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::CanActivate() const {
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return can_activate_;
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comui::ModalType WidgetDelegate::GetModalType() const {
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return ui::MODAL_TYPE_NONE;
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comui::AXRole WidgetDelegate::GetAccessibleWindowRole() const {
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return ui::AX_ROLE_WINDOW;
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
666f8f292aa768869a9e85c314b124875f57504f2creed@google.combase::string16 WidgetDelegate::GetAccessibleWindowTitle() const {
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return GetWindowTitle();
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
706f8f292aa768869a9e85c314b124875f57504f2creed@google.combase::string16 WidgetDelegate::GetWindowTitle() const {
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return base::string16();
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ShouldShowWindowTitle() const {
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return true;
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ShouldShowCloseButton() const {
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return true;
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ShouldHandleSystemCommands() const {
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  const Widget* widget = GetWidget();
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  if (!widget)
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return false;
866f8f292aa768869a9e85c314b124875f57504f2creed@google.com
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return widget->non_client_view() != NULL;
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comgfx::ImageSkia WidgetDelegate::GetWindowAppIcon() {
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Use the window icon as app icon by default.
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return GetWindowIcon();
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Returns the icon to be displayed in the window.
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comgfx::ImageSkia WidgetDelegate::GetWindowIcon() {
978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return gfx::ImageSkia();
988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ShouldShowWindowIcon() const {
1016f8f292aa768869a9e85c314b124875f57504f2creed@google.com  return false;
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ExecuteWindowsCommand(int command_id) {
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return false;
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstd::string WidgetDelegate::GetWindowName() const {
1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return std::string();
1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid WidgetDelegate::SaveWindowPlacement(const gfx::Rect& bounds,
1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                         ui::WindowShowState show_state) {
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  std::string window_name = GetWindowName();
1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  if (!ViewsDelegate::views_delegate || window_name.empty())
1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return;
1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  ViewsDelegate::views_delegate->SaveWindowPlacement(
1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com      GetWidget(), window_name, bounds, show_state);
1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1226f8f292aa768869a9e85c314b124875f57504f2creed@google.combool WidgetDelegate::GetSavedWindowPlacement(
1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const Widget* widget,
1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    gfx::Rect* bounds,
1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    ui::WindowShowState* show_state) const {
1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  std::string window_name = GetWindowName();
1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  if (!ViewsDelegate::views_delegate || window_name.empty())
1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return false;
1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return ViewsDelegate::views_delegate->GetSavedWindowPlacement(
1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com      widget, window_name, bounds, show_state);
1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::ShouldRestoreWindowSize() const {
1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return true;
1367ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org}
1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comView* WidgetDelegate::GetContentsView() {
139ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com  if (!default_contents_view_)
140ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com    default_contents_view_ = new View;
141ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com  return default_contents_view_;
142ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com}
143ac753098e8af4a17e5df97b3a4dd0ce123f8d70creed@android.com
1446f8f292aa768869a9e85c314b124875f57504f2creed@google.comClientView* WidgetDelegate::CreateClientView(Widget* widget) {
145b7d956df4665e06f3ae98cb696cef7c04452ab8emike@reedtribe.org  return new ClientView(widget, GetContentsView());
146b7d956df4665e06f3ae98cb696cef7c04452ab8emike@reedtribe.org}
147b7d956df4665e06f3ae98cb696cef7c04452ab8emike@reedtribe.org
1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comNonClientFrameView* WidgetDelegate::CreateNonClientFrameView(Widget* widget) {
1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return NULL;
1506f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comView* WidgetDelegate::CreateOverlayView() {
1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return NULL;
1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::WillProcessWorkAreaChange() const {
1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return false;
1586f8f292aa768869a9e85c314b124875f57504f2creed@google.com}
1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool WidgetDelegate::WidgetHasHitTestMask() const {
1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return false;
1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid WidgetDelegate::GetWidgetHitTestMask(gfx::Path* mask) const {
1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  DCHECK(mask);
1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1677744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1687744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.combool WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() const {
1697744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  return false;
1707744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1717744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1727744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.combool WidgetDelegate::ShouldDescendIntoChildForEventHandling(
1737744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com    gfx::NativeView child,
1747744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com    const gfx::Point& location) {
1757744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  return true;
1767744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1777744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1787744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com////////////////////////////////////////////////////////////////////////////////
1797744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com// WidgetDelegateView:
1807744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1817744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.comWidgetDelegateView::WidgetDelegateView() {
1827744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  // A WidgetDelegate should be deleted on DeleteDelegate.
1837744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  set_owned_by_client();
1847744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1857744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1867744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.comWidgetDelegateView::~WidgetDelegateView() {
1877744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1887744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1897744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.comvoid WidgetDelegateView::DeleteDelegate() {
1907744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  delete this;
1917744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1927744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1937744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.comWidget* WidgetDelegateView::GetWidget() {
1947744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com  return View::GetWidget();
1957744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com}
1967744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst Widget* WidgetDelegateView::GetWidget() const {
1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  return View::GetWidget();
1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
2007744c205f20b5617e83d4af8f97b5771bfa8d671reed@google.com
2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}  // namespace views
2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com