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