Home | History | Annotate | Download | only in views
      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 
     26 using web_modal::WebContentsModalDialogManager;
     27 
     28 // static
     29 TabModalConfirmDialog* 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 
     39 TabModalConfirmDialogViews::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 
     65 TabModalConfirmDialogViews::~TabModalConfirmDialogViews() {
     66 }
     67 
     68 void TabModalConfirmDialogViews::AcceptTabModalDialog() {
     69   GetDialogClientView()->AcceptWindow();
     70 }
     71 
     72 void TabModalConfirmDialogViews::CancelTabModalDialog() {
     73   GetDialogClientView()->CancelWindow();
     74 }
     75 
     76 void TabModalConfirmDialogViews::CloseDialog() {
     77   dialog_->Close();
     78 }
     79 
     80 //////////////////////////////////////////////////////////////////////////////
     81 // TabModalConfirmDialogViews, views::LinkListener implementation:
     82 
     83 void 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 
     91 string16 TabModalConfirmDialogViews::GetWindowTitle() const {
     92   return delegate_->GetTitle();
     93 }
     94 
     95 string16 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 
    104 bool TabModalConfirmDialogViews::Cancel() {
    105   delegate_->Cancel();
    106   return true;
    107 }
    108 
    109 bool TabModalConfirmDialogViews::Accept() {
    110   delegate_->Accept();
    111   return true;
    112 }
    113 
    114 bool TabModalConfirmDialogViews::Close() {
    115   delegate_->Close();
    116   return true;
    117 }
    118 
    119 ///////////////////////////////////////////////////////////////////////////////
    120 // TabModalConfirmDialogViews, views::WidgetDelegate implementation:
    121 
    122 views::View* TabModalConfirmDialogViews::GetContentsView() {
    123   return message_box_view_;
    124 }
    125 
    126 // TODO(wittman): Remove this override once we move to the new style frame view
    127 // on all dialogs.
    128 views::NonClientFrameView* TabModalConfirmDialogViews::CreateNonClientFrameView(
    129     views::Widget* widget) {
    130   return CreateConstrainedStyleNonClientFrameView(widget, browser_context_);
    131 }
    132 
    133 views::Widget* TabModalConfirmDialogViews::GetWidget() {
    134   return message_box_view_->GetWidget();
    135 }
    136 
    137 const views::Widget* TabModalConfirmDialogViews::GetWidget() const {
    138   return message_box_view_->GetWidget();
    139 }
    140 
    141 void TabModalConfirmDialogViews::DeleteDelegate() {
    142   delete this;
    143 }
    144 
    145 ui::ModalType TabModalConfirmDialogViews::GetModalType() const {
    146 #if defined(USE_ASH)
    147   return ui::MODAL_TYPE_CHILD;
    148 #else
    149   return views::WidgetDelegate::GetModalType();
    150 #endif
    151 }
    152