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