1// Copyright 2014 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/ash/multi_user/multi_user_warning_dialog.h" 6 7#include "ash/shell.h" 8#include "chrome/grit/generated_resources.h" 9#include "ui/base/l10n/l10n_util.h" 10#include "ui/base/resource/resource_bundle.h" 11#include "ui/views/controls/button/checkbox.h" 12#include "ui/views/controls/label.h" 13#include "ui/views/layout/grid_layout.h" 14#include "ui/views/widget/widget.h" 15#include "ui/views/window/dialog_delegate.h" 16 17namespace chromeos { 18 19namespace { 20 21// Default width/height of the dialog. 22const int kDefaultWidth = 600; 23const int kDefaultHeight = 250; 24 25const int kPaddingToMessage = 30; 26const int kPaddingToCheckBox = 50; 27const int kInset = 40; 28const int kTopInset = 10; 29 30//////////////////////////////////////////////////////////////////////////////// 31// Dialog for multi-profiles teleport warning. 32class TeleportWarningView : public views::DialogDelegateView { 33 public: 34 explicit TeleportWarningView(const base::Callback<void(bool)>& on_accept); 35 virtual ~TeleportWarningView(); 36 37 static void ShowDialog(const base::Callback<void(bool)>& on_accept); 38 39 // views::DialogDelegate overrides. 40 virtual bool Accept() OVERRIDE; 41 42 // views::WidgetDelegate overrides. 43 virtual ui::ModalType GetModalType() const OVERRIDE; 44 45 // views::View overrides. 46 virtual gfx::Size GetPreferredSize() const OVERRIDE; 47 48 private: 49 void InitDialog(); 50 51 scoped_ptr<views::Checkbox> no_show_checkbox_; 52 const base::Callback<void(bool)> on_accept_; 53 54 DISALLOW_COPY_AND_ASSIGN(TeleportWarningView); 55}; 56 57//////////////////////////////////////////////////////////////////////////////// 58// TeleportWarningView implementation. 59 60TeleportWarningView::TeleportWarningView( 61 const base::Callback<void(bool)>& on_accept) 62 : on_accept_(on_accept) { 63} 64 65TeleportWarningView::~TeleportWarningView() { 66} 67 68// static 69void TeleportWarningView::ShowDialog( 70 const base::Callback<void(bool)>& on_accept) { 71 TeleportWarningView* dialog_view = 72 new TeleportWarningView(on_accept); 73 views::DialogDelegate::CreateDialogWidget( 74 dialog_view, ash::Shell::GetTargetRootWindow(), NULL); 75 dialog_view->InitDialog(); 76 views::Widget* widget = dialog_view->GetWidget(); 77 DCHECK(widget); 78 widget->Show(); 79} 80 81bool TeleportWarningView::Accept() { 82 on_accept_.Run(no_show_checkbox_->checked()); 83 return true; 84} 85 86ui::ModalType TeleportWarningView::GetModalType() const { 87 return ui::MODAL_TYPE_SYSTEM; 88} 89 90gfx::Size TeleportWarningView::GetPreferredSize() const { 91 return gfx::Size(kDefaultWidth, kDefaultHeight); 92} 93 94void TeleportWarningView::InitDialog() { 95 const gfx::Insets kDialogInsets(kTopInset, kInset, kInset, kInset); 96 97 // Create the views and layout manager and set them up. 98 views::GridLayout* grid_layout = views::GridLayout::CreatePanel(this); 99 grid_layout->SetInsets(kDialogInsets); 100 101 views::ColumnSet* column_set = grid_layout->AddColumnSet(0); 102 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, 103 views::GridLayout::USE_PREF, 0, 0); 104 105 // Title 106 views::Label* title_label_ = new views::Label( 107 l10n_util::GetStringUTF16(IDS_VISIT_DESKTOP_WARNING_TITLE)); 108 title_label_->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 109 ui::ResourceBundle::MediumBoldFont)); 110 title_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 111 grid_layout->StartRow(0, 0); 112 grid_layout->AddView(title_label_); 113 grid_layout->AddPaddingRow(0, kPaddingToMessage); 114 115 // Explanation string 116 views::Label* label = new views::Label( 117 l10n_util::GetStringUTF16(IDS_VISIT_DESKTOP_WARNING_MESSAGE)); 118 label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 119 ui::ResourceBundle::MediumFont)); 120 label->SetMultiLine(true); 121 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 122 label->SetAllowCharacterBreak(true); 123 grid_layout->StartRow(0, 0); 124 grid_layout->AddView(label); 125 126 // Next explanation string 127 grid_layout->AddPaddingRow(0, kPaddingToMessage); 128 views::Label* lower_label = new views::Label( 129 l10n_util::GetStringUTF16(IDS_VISIT_DESKTOP_WARNING_EXPLANATION)); 130 lower_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 131 ui::ResourceBundle::MediumFont)); 132 lower_label->SetMultiLine(true); 133 lower_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 134 lower_label->SetAllowCharacterBreak(true); 135 grid_layout->StartRow(0, 0); 136 grid_layout->AddView(lower_label); 137 138 // No-show again checkbox 139 grid_layout->AddPaddingRow(0, kPaddingToCheckBox); 140 no_show_checkbox_.reset(new views::Checkbox( 141 l10n_util::GetStringUTF16(IDS_VISIT_DESKTOP_WARNING_SHOW_DISMISS))); 142 no_show_checkbox_->SetChecked(true); 143 no_show_checkbox_->SetFontList( 144 ui::ResourceBundle::GetSharedInstance().GetFontList( 145 ui::ResourceBundle::MediumFont)); 146 grid_layout->StartRow(0, 0); 147 grid_layout->AddView(no_show_checkbox_.get()); 148 149 SetLayoutManager(grid_layout); 150 Layout(); 151} 152 153} // namespace 154 155//////////////////////////////////////////////////////////////////////////////// 156// Factory function. 157 158void ShowMultiprofilesWarningDialog( 159 const base::Callback<void(bool)>& on_accept) { 160 TeleportWarningView::ShowDialog(on_accept); 161} 162 163} // namespace chromeos 164