Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / profiles / multiprofiles_intro_dialog.cc
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/chromeos/profiles/multiprofiles_intro_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
17 namespace chromeos {
18
19 namespace {
20
21 // Default width/height of the dialog.
22 const int kDefaultWidth = 600;
23 const int kDefaultHeight = 250;
24
25 const int kPaddingToMessage = 20;
26 const int kPaddingToCheckBox = 50;
27 const int kInset = 40;
28 const int kTopInset = 10;
29
30 ////////////////////////////////////////////////////////////////////////////////
31 // Dialog for multi-profiles introduction.
32 class MultiprofilesIntroView : public views::DialogDelegateView {
33  public:
34   explicit MultiprofilesIntroView(const base::Callback<void(bool)> on_accept);
35   virtual ~MultiprofilesIntroView();
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(MultiprofilesIntroView);
55 };
56
57 ////////////////////////////////////////////////////////////////////////////////
58 // MultiprofilesIntroDialog implementation.
59
60 MultiprofilesIntroView::MultiprofilesIntroView(
61     const base::Callback<void(bool)> on_accept)
62     : on_accept_(on_accept) {
63 }
64
65 MultiprofilesIntroView::~MultiprofilesIntroView() {
66 }
67
68 // static
69 void MultiprofilesIntroView::ShowDialog(
70     const base::Callback<void(bool)> on_accept) {
71   MultiprofilesIntroView* dialog_view =
72       new MultiprofilesIntroView(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
81 bool MultiprofilesIntroView::Accept() {
82   on_accept_.Run(no_show_checkbox_->checked());
83   return true;
84 }
85
86 ui::ModalType MultiprofilesIntroView::GetModalType() const {
87   return ui::MODAL_TYPE_SYSTEM;
88 }
89
90 gfx::Size MultiprofilesIntroView::GetPreferredSize() const {
91   return gfx::Size(kDefaultWidth, kDefaultHeight);
92 }
93
94 void MultiprofilesIntroView::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   views::Label* title_label_ = new views::Label(
106       l10n_util::GetStringUTF16(IDS_MULTIPROFILES_INTRO_HEADLINE));
107   title_label_->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
108       ui::ResourceBundle::MediumBoldFont));
109   title_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
110   grid_layout->StartRow(0, 0);
111   grid_layout->AddView(title_label_);
112   grid_layout->AddPaddingRow(0, kPaddingToMessage);
113
114   // Explanation string.
115   views::Label* label = new views::Label(
116       l10n_util::GetStringUTF16(IDS_MULTIPROFILES_INTRO_MESSAGE));
117   label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
118       ui::ResourceBundle::MediumFont));
119   label->SetMultiLine(true);
120   label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
121   label->SetAllowCharacterBreak(true);
122   grid_layout->StartRow(0, 0);
123   grid_layout->AddView(label);
124
125   // Next explanation string.
126   grid_layout->AddPaddingRow(0, kPaddingToMessage);
127   views::Label* lower_label = new views::Label(
128       l10n_util::GetStringUTF16(IDS_MULTIPROFILES_INTRO_EXPLANATION));
129   lower_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
130       ui::ResourceBundle::MediumFont));
131   lower_label->SetMultiLine(true);
132   lower_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
133   lower_label->SetAllowCharacterBreak(true);
134   grid_layout->StartRow(0, 0);
135   grid_layout->AddView(lower_label);
136
137   // No-show again checkbox.
138   grid_layout->AddPaddingRow(0, kPaddingToCheckBox);
139   no_show_checkbox_.reset(new views::Checkbox(
140       l10n_util::GetStringUTF16(IDS_MULTIPROFILES_INTRO_NOSHOW_AGAIN)));
141   no_show_checkbox_->SetChecked(true);
142   no_show_checkbox_->SetFontList(
143       ui::ResourceBundle::GetSharedInstance().GetFontList(
144       ui::ResourceBundle::MediumFont));
145   no_show_checkbox_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
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
158 void ShowMultiprofilesIntroDialog(const base::Callback<void(bool)> on_accept) {
159   MultiprofilesIntroView::ShowDialog(on_accept);
160 }
161
162 }  // namespace chromeos