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/views/constrained_window_views.h" 12 #include "chrome/common/chrome_switches.h" 13 #include "content/public/browser/web_contents.h" 14 #include "grit/generated_resources.h" 15 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/window_open_disposition.h" 17 #include "ui/views/controls/message_box_view.h" 18 #include "ui/views/layout/layout_constants.h" 19 #include "ui/views/widget/widget.h" 20 #include "ui/views/window/dialog_client_view.h" 21 22 // static 23 TabModalConfirmDialog* TabModalConfirmDialog::Create( 24 TabModalConfirmDialogDelegate* delegate, 25 content::WebContents* web_contents) { 26 return new TabModalConfirmDialogViews(delegate, web_contents); 27 } 28 29 ////////////////////////////////////////////////////////////////////////////// 30 // TabModalConfirmDialogViews, constructor & destructor: 31 32 TabModalConfirmDialogViews::TabModalConfirmDialogViews( 33 TabModalConfirmDialogDelegate* delegate, 34 content::WebContents* web_contents) 35 : delegate_(delegate) { 36 views::MessageBoxView::InitParams init_params(delegate->GetDialogMessage()); 37 init_params.inter_row_vertical_spacing = 38 views::kUnrelatedControlVerticalSpacing; 39 message_box_view_ = new views::MessageBoxView(init_params); 40 41 base::string16 link_text(delegate->GetLinkText()); 42 if (!link_text.empty()) 43 message_box_view_->SetLink(link_text, this); 44 45 ShowWebModalDialogViews(this, web_contents); 46 delegate_->set_close_delegate(this); 47 } 48 49 TabModalConfirmDialogViews::~TabModalConfirmDialogViews() { 50 } 51 52 void TabModalConfirmDialogViews::AcceptTabModalDialog() { 53 GetDialogClientView()->AcceptWindow(); 54 } 55 56 void TabModalConfirmDialogViews::CancelTabModalDialog() { 57 GetDialogClientView()->CancelWindow(); 58 } 59 60 void TabModalConfirmDialogViews::CloseDialog() { 61 GetWidget()->Close(); 62 } 63 64 ////////////////////////////////////////////////////////////////////////////// 65 // TabModalConfirmDialogViews, views::LinkListener implementation: 66 67 void TabModalConfirmDialogViews::LinkClicked(views::Link* source, 68 int event_flags) { 69 delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags)); 70 } 71 72 ////////////////////////////////////////////////////////////////////////////// 73 // TabModalConfirmDialogViews, views::DialogDelegate implementation: 74 75 base::string16 TabModalConfirmDialogViews::GetWindowTitle() const { 76 return delegate_->GetTitle(); 77 } 78 79 base::string16 TabModalConfirmDialogViews::GetDialogButtonLabel( 80 ui::DialogButton button) const { 81 if (button == ui::DIALOG_BUTTON_OK) 82 return delegate_->GetAcceptButtonTitle(); 83 if (button == ui::DIALOG_BUTTON_CANCEL) 84 return delegate_->GetCancelButtonTitle(); 85 return base::string16(); 86 } 87 88 bool TabModalConfirmDialogViews::Cancel() { 89 delegate_->Cancel(); 90 return true; 91 } 92 93 bool TabModalConfirmDialogViews::Accept() { 94 delegate_->Accept(); 95 return true; 96 } 97 98 bool TabModalConfirmDialogViews::Close() { 99 delegate_->Close(); 100 return true; 101 } 102 103 /////////////////////////////////////////////////////////////////////////////// 104 // TabModalConfirmDialogViews, views::WidgetDelegate implementation: 105 106 views::View* TabModalConfirmDialogViews::GetContentsView() { 107 return message_box_view_; 108 } 109 110 views::Widget* TabModalConfirmDialogViews::GetWidget() { 111 return message_box_view_->GetWidget(); 112 } 113 114 const views::Widget* TabModalConfirmDialogViews::GetWidget() const { 115 return message_box_view_->GetWidget(); 116 } 117 118 void TabModalConfirmDialogViews::DeleteDelegate() { 119 delete this; 120 } 121 122 ui::ModalType TabModalConfirmDialogViews::GetModalType() const { 123 return ui::MODAL_TYPE_CHILD; 124 } 125