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