blob: 33960e76a2bdac07bae2d207a93bc4a6f37fd7c8 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// 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
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +01007#include "base/strings/utf_string_conversions.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +00008#include "chrome/browser/ui/browser_dialogs.h"
9#include "chrome/browser/ui/browser_list.h"
10#include "chrome/browser/ui/browser_window.h"
Torne (Richard Coles)46d4c2b2014-06-09 12:00:27 +010011#include "chrome/browser/ui/views/constrained_window_views.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000012#include "chrome/common/chrome_switches.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000013#include "content/public/browser/web_contents.h"
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010014#include "ui/base/window_open_disposition.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000015#include "ui/views/controls/message_box_view.h"
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010016#include "ui/views/layout/layout_constants.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000017#include "ui/views/widget/widget.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000018#include "ui/views/window/dialog_client_view.h"
19
20// static
21TabModalConfirmDialog* TabModalConfirmDialog::Create(
22 TabModalConfirmDialogDelegate* delegate,
23 content::WebContents* web_contents) {
Torne (Richard Coles)46d4c2b2014-06-09 12:00:27 +010024 return new TabModalConfirmDialogViews(delegate, web_contents);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000025}
26
Torne (Richard Coles)58218062012-11-14 11:43:16 +000027//////////////////////////////////////////////////////////////////////////////
28// TabModalConfirmDialogViews, constructor & destructor:
29
30TabModalConfirmDialogViews::TabModalConfirmDialogViews(
31 TabModalConfirmDialogDelegate* delegate,
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000032 content::WebContents* web_contents)
Torne (Richard Coles)46d4c2b2014-06-09 12:00:27 +010033 : delegate_(delegate) {
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000034 views::MessageBoxView::InitParams init_params(delegate->GetDialogMessage());
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010035 init_params.inter_row_vertical_spacing =
36 views::kUnrelatedControlVerticalSpacing;
37 message_box_view_ = new views::MessageBoxView(init_params);
38
Torne (Richard Coles)a3f6a492013-12-18 16:25:09 +000039 base::string16 link_text(delegate->GetLinkText());
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010040 if (!link_text.empty())
41 message_box_view_->SetLink(link_text, this);
42
Torne (Richard Coles)46d4c2b2014-06-09 12:00:27 +010043 ShowWebModalDialogViews(this, web_contents);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010044 delegate_->set_close_delegate(this);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000045}
46
47TabModalConfirmDialogViews::~TabModalConfirmDialogViews() {
48}
49
50void TabModalConfirmDialogViews::AcceptTabModalDialog() {
51 GetDialogClientView()->AcceptWindow();
52}
53
54void TabModalConfirmDialogViews::CancelTabModalDialog() {
55 GetDialogClientView()->CancelWindow();
56}
57
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000058void TabModalConfirmDialogViews::CloseDialog() {
Torne (Richard Coles)46d4c2b2014-06-09 12:00:27 +010059 GetWidget()->Close();
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000060}
61
Torne (Richard Coles)58218062012-11-14 11:43:16 +000062//////////////////////////////////////////////////////////////////////////////
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010063// 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//////////////////////////////////////////////////////////////////////////////
Torne (Richard Coles)58218062012-11-14 11:43:16 +000071// TabModalConfirmDialogViews, views::DialogDelegate implementation:
72
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000073base::string16 TabModalConfirmDialogViews::GetWindowTitle() const {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000074 return delegate_->GetTitle();
75}
76
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000077base::string16 TabModalConfirmDialogViews::GetDialogButtonLabel(
Torne (Richard Coles)58218062012-11-14 11:43:16 +000078 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();
Torne (Richard Coles)a3f6a492013-12-18 16:25:09 +000083 return base::string16();
Torne (Richard Coles)58218062012-11-14 11:43:16 +000084}
85
Torne (Richard Coles)58218062012-11-14 11:43:16 +000086bool TabModalConfirmDialogViews::Cancel() {
87 delegate_->Cancel();
88 return true;
89}
90
91bool TabModalConfirmDialogViews::Accept() {
92 delegate_->Accept();
93 return true;
94}
95
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010096bool TabModalConfirmDialogViews::Close() {
97 delegate_->Close();
98 return true;
99}
100
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000101///////////////////////////////////////////////////////////////////////////////
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}
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000119
120ui::ModalType TabModalConfirmDialogViews::GetModalType() const {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000121 return ui::MODAL_TYPE_CHILD;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000122}