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