// Copyright (c) 2012 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.
#include "ui/views/widget/widget_delegate.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/views/bubble/bubble_delegate.h"
#include "ui/views/view.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/client_view.h"
namespace views {
////////////////////////////////////////////////////////////////////////////////
// WidgetDelegate:
WidgetDelegate::WidgetDelegate() : default_contents_view_(NULL) {
}
void WidgetDelegate::OnWidgetMove() {
}
void WidgetDelegate::OnDisplayChanged() {
}
void WidgetDelegate::OnWorkAreaChanged() {
}
View* WidgetDelegate::GetInitiallyFocusedView() {
return NULL;
}
BubbleDelegateView* WidgetDelegate::AsBubbleDelegate() {
return NULL;
}
DialogDelegate* WidgetDelegate::AsDialogDelegate() {
return NULL;
}
bool WidgetDelegate::CanResize() const {
return false;
}
bool WidgetDelegate::CanMaximize() const {
return false;
}
bool WidgetDelegate::CanActivate() const {
return true;
}
ui::ModalType WidgetDelegate::GetModalType() const {
return ui::MODAL_TYPE_NONE;
}
ui::AccessibilityTypes::Role WidgetDelegate::GetAccessibleWindowRole() const {
return ui::AccessibilityTypes::ROLE_WINDOW;
}
string16 WidgetDelegate::GetAccessibleWindowTitle() const {
return GetWindowTitle();
}
string16 WidgetDelegate::GetWindowTitle() const {
return string16();
}
bool WidgetDelegate::ShouldShowWindowTitle() const {
return true;
}
bool WidgetDelegate::ShouldShowCloseButton() const {
return true;
}
bool WidgetDelegate::ShouldHandleSystemCommands() const {
const Widget* widget = GetWidget();
if (!widget)
return false;
return widget->non_client_view() != NULL;
}
gfx::ImageSkia WidgetDelegate::GetWindowAppIcon() {
// Use the window icon as app icon by default.
return GetWindowIcon();
}
// Returns the icon to be displayed in the window.
gfx::ImageSkia WidgetDelegate::GetWindowIcon() {
return gfx::ImageSkia();
}
bool WidgetDelegate::ShouldShowWindowIcon() const {
return false;
}
bool WidgetDelegate::ExecuteWindowsCommand(int command_id) {
return false;
}
std::string WidgetDelegate::GetWindowName() const {
return std::string();
}
void WidgetDelegate::SaveWindowPlacement(const gfx::Rect& bounds,
ui::WindowShowState show_state) {
std::string window_name = GetWindowName();
if (!ViewsDelegate::views_delegate || window_name.empty())
return;
ViewsDelegate::views_delegate->SaveWindowPlacement(
GetWidget(), window_name, bounds, show_state);
}
bool WidgetDelegate::GetSavedWindowPlacement(
const Widget* widget,
gfx::Rect* bounds,
ui::WindowShowState* show_state) const {
std::string window_name = GetWindowName();
if (!ViewsDelegate::views_delegate || window_name.empty())
return false;
return ViewsDelegate::views_delegate->GetSavedWindowPlacement(
widget, window_name, bounds, show_state);
}
bool WidgetDelegate::ShouldRestoreWindowSize() const {
return true;
}
View* WidgetDelegate::GetContentsView() {
if (!default_contents_view_)
default_contents_view_ = new View;
return default_contents_view_;
}
ClientView* WidgetDelegate::CreateClientView(Widget* widget) {
return new ClientView(widget, GetContentsView());
}
NonClientFrameView* WidgetDelegate::CreateNonClientFrameView(Widget* widget) {
return NULL;
}
View* WidgetDelegate::CreateOverlayView() {
return NULL;
}
bool WidgetDelegate::WillProcessWorkAreaChange() const {
return false;
}
bool WidgetDelegate::WidgetHasHitTestMask() const {
return false;
}
void WidgetDelegate::GetWidgetHitTestMask(gfx::Path* mask) const {
DCHECK(mask);
}
bool WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() const {
return false;
}
bool WidgetDelegate::ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location) {
return true;
}
////////////////////////////////////////////////////////////////////////////////
// WidgetDelegateView:
WidgetDelegateView::WidgetDelegateView() {
// A WidgetDelegate should be deleted on DeleteDelegate.
set_owned_by_client();
}
WidgetDelegateView::~WidgetDelegateView() {
}
void WidgetDelegateView::DeleteDelegate() {
delete this;
}
Widget* WidgetDelegateView::GetWidget() {
return View::GetWidget();
}
const Widget* WidgetDelegateView::GetWidget() const {
return View::GetWidget();
}
} // namespace views