tab_modal_confirm_dialog_views.cc revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
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 "chrome/browser/ui/views/tab_modal_confirm_dialog_views.h" 6 7#include "base/strings/utf_string_conversions.h" 8#include "chrome/browser/ui/browser_dialogs.h" 9#include "chrome/browser/ui/browser_list.h" 10#include "chrome/browser/ui/browser_window.h" 11#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 12#include "chrome/browser/ui/views/constrained_window_views.h" 13#include "chrome/common/chrome_switches.h" 14#include "components/web_modal/web_contents_modal_dialog_manager.h" 15#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 16#include "content/public/browser/web_contents.h" 17#include "content/public/browser/web_contents_view.h" 18#include "grit/generated_resources.h" 19#include "ui/base/l10n/l10n_util.h" 20#include "ui/base/window_open_disposition.h" 21#include "ui/views/controls/message_box_view.h" 22#include "ui/views/layout/layout_constants.h" 23#include "ui/views/widget/widget.h" 24#include "ui/views/window/dialog_client_view.h" 25 26using web_modal::WebContentsModalDialogManager; 27 28// static 29TabModalConfirmDialog* TabModalConfirmDialog::Create( 30 TabModalConfirmDialogDelegate* delegate, 31 content::WebContents* web_contents) { 32 return new TabModalConfirmDialogViews( 33 delegate, web_contents); 34} 35 36////////////////////////////////////////////////////////////////////////////// 37// TabModalConfirmDialogViews, constructor & destructor: 38 39TabModalConfirmDialogViews::TabModalConfirmDialogViews( 40 TabModalConfirmDialogDelegate* delegate, 41 content::WebContents* web_contents) 42 : delegate_(delegate), 43 dialog_(NULL), 44 browser_context_(web_contents->GetBrowserContext()) { 45 views::MessageBoxView::InitParams init_params(delegate->GetMessage()); 46 init_params.inter_row_vertical_spacing = 47 views::kUnrelatedControlVerticalSpacing; 48 message_box_view_ = new views::MessageBoxView(init_params); 49 50 string16 link_text(delegate->GetLinkText()); 51 if (!link_text.empty()) 52 message_box_view_->SetLink(link_text, this); 53 54 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 55 WebContentsModalDialogManager::FromWebContents(web_contents); 56 dialog_ = CreateWebContentsModalDialogViews( 57 this, 58 web_contents->GetView()->GetNativeView(), 59 web_contents_modal_dialog_manager->delegate()-> 60 GetWebContentsModalDialogHost()); 61 web_contents_modal_dialog_manager->ShowDialog(dialog_->GetNativeView()); 62 delegate_->set_close_delegate(this); 63} 64 65TabModalConfirmDialogViews::~TabModalConfirmDialogViews() { 66} 67 68void TabModalConfirmDialogViews::AcceptTabModalDialog() { 69 GetDialogClientView()->AcceptWindow(); 70} 71 72void TabModalConfirmDialogViews::CancelTabModalDialog() { 73 GetDialogClientView()->CancelWindow(); 74} 75 76void TabModalConfirmDialogViews::CloseDialog() { 77 dialog_->Close(); 78} 79 80////////////////////////////////////////////////////////////////////////////// 81// TabModalConfirmDialogViews, views::LinkListener implementation: 82 83void TabModalConfirmDialogViews::LinkClicked(views::Link* source, 84 int event_flags) { 85 delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags)); 86} 87 88////////////////////////////////////////////////////////////////////////////// 89// TabModalConfirmDialogViews, views::DialogDelegate implementation: 90 91string16 TabModalConfirmDialogViews::GetWindowTitle() const { 92 return delegate_->GetTitle(); 93} 94 95string16 TabModalConfirmDialogViews::GetDialogButtonLabel( 96 ui::DialogButton button) const { 97 if (button == ui::DIALOG_BUTTON_OK) 98 return delegate_->GetAcceptButtonTitle(); 99 if (button == ui::DIALOG_BUTTON_CANCEL) 100 return delegate_->GetCancelButtonTitle(); 101 return string16(); 102} 103 104bool TabModalConfirmDialogViews::Cancel() { 105 delegate_->Cancel(); 106 return true; 107} 108 109bool TabModalConfirmDialogViews::Accept() { 110 delegate_->Accept(); 111 return true; 112} 113 114/////////////////////////////////////////////////////////////////////////////// 115// TabModalConfirmDialogViews, views::WidgetDelegate implementation: 116 117views::View* TabModalConfirmDialogViews::GetContentsView() { 118 return message_box_view_; 119} 120 121// TODO(wittman): Remove this override once we move to the new style frame view 122// on all dialogs. 123views::NonClientFrameView* TabModalConfirmDialogViews::CreateNonClientFrameView( 124 views::Widget* widget) { 125 return CreateConstrainedStyleNonClientFrameView(widget, browser_context_); 126} 127 128views::Widget* TabModalConfirmDialogViews::GetWidget() { 129 return message_box_view_->GetWidget(); 130} 131 132const views::Widget* TabModalConfirmDialogViews::GetWidget() const { 133 return message_box_view_->GetWidget(); 134} 135 136void TabModalConfirmDialogViews::DeleteDelegate() { 137 delete this; 138} 139 140ui::ModalType TabModalConfirmDialogViews::GetModalType() const { 141#if defined(USE_ASH) 142 return ui::MODAL_TYPE_CHILD; 143#else 144 return views::WidgetDelegate::GetModalType(); 145#endif 146} 147