172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be
3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file.
4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/default_search_view.h"
6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include <string>
8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/utf_string_conversions.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/search_engines/template_url.h"
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/search_engines/template_url_model.h"
13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "grit/generated_resources.h"
16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "grit/locale_settings.h"
17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "grit/theme_resources.h"
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/message_box_flags.h"
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas.h"
22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/controls/button/native_button.h"
23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/controls/image_view.h"
24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/controls/label.h"
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h"
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/layout_constants.h"
27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/window/dialog_client_view.h"
28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/window/window.h"
29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochnamespace {
31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Returns a short name and logo resource id for the given host.
33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid GetShortNameAndLogoId(PrefService* prefs,
34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                           const TemplateURL* turl,
35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                           std::wstring* short_name,
36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                           int* logo_id) {
37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(prefs);
38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(turl);
39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(short_name);
40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(logo_id);
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  GURL url = TemplateURLModel::GenerateSearchURL(turl);
43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  scoped_ptr<TemplateURL> built_in_data(
44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      TemplateURLPrepopulateData::GetEngineForOrigin(prefs, url));
45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Use the built-in information to generate the short name (to ensure
47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // that we don't use a name given by the search engine to itself which
48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // in the worst case could be misleading).
49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (built_in_data.get()) {
50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    *short_name = built_in_data->short_name();
51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    *logo_id = built_in_data->logo_id();
52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  } else {
53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    *short_name = UTF8ToWide(url.host()).c_str();
54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    *logo_id = kNoSearchEngineLogo;
55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochviews::Label* CreateProviderLabel(int message_id) {
59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  views::Label* choice_label =
603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      new views::Label(UTF16ToWide(l10n_util::GetStringUTF16(message_id)));
61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  choice_label->SetColor(SK_ColorBLACK);
62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  choice_label->SetFont(
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      choice_label->font().DeriveFont(1, gfx::Font::NORMAL));
64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  return choice_label;
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochviews::View* CreateProviderLogo(
68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    int logo_id,
69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    const std::wstring& short_name) {
70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  views::View* logo_view = NULL;
71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // The width for the "logo" element when text is displayed.
73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  const int kTextLogoWidth = 132;
74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  bool use_images = false;
76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#if defined(GOOGLE_CHROME_BUILD)
77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  use_images = true;
78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif
79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (use_images && logo_id != kNoSearchEngineLogo) {
81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    views::ImageView* logo_image = new views::ImageView();
82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    SkBitmap* logo_bmp =
83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        ResourceBundle::GetSharedInstance().GetBitmapNamed(logo_id);
84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_image->SetImage(logo_bmp);
85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_image->SetTooltipText(short_name);
86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_view = logo_image;
87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  } else {
88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // No logo -- show a text label.
89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    views::Label* logo_label = new views::Label(short_name);
90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_label->SetColor(SK_ColorDKGRAY);
91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_label->SetFont(logo_label->font().DeriveFont(3, gfx::Font::BOLD));
92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_label->SetHorizontalAlignment(views::Label::ALIGN_CENTER);
93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Tooltip text provides accessibility for low-vision users.
94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_label->SetTooltipText(short_name);
95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    logo_view = logo_label;
96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  return logo_view;
99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochviews::NativeButton* CreateProviderChoiceButton(
101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    views::ButtonListener* listener,
102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    int message_id,
103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    const std::wstring& short_name) {
1043f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  return new views::NativeButton(listener, UTF16ToWide(
1053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringFUTF16(message_id, WideToUTF16(short_name))));
106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}  // namespace
109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// static
111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid DefaultSearchView::Show(TabContents* tab_contents,
112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             TemplateURL* default_url,
113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             TemplateURLModel* template_url_model) {
114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_ptr<TemplateURL> template_url(default_url);
115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!template_url_model->CanMakeDefault(default_url) ||
116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      default_url->url()->GetHost().empty())
117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    return;
118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // When the window closes, it will delete itself.
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  new DefaultSearchView(tab_contents, template_url.release(),
121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                        template_url_model);
122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochDefaultSearchView::~DefaultSearchView() {
125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid DefaultSearchView::OnPaint(gfx::Canvas* canvas) {
128201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Fill in behind the background image with the standard gray toolbar color.
129201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  canvas->FillRectInt(SkColorSetRGB(237, 238, 237), 0, 0, width(),
130201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                      background_image_->height());
131201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // The rest of the dialog background should be white.
132201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(height() > background_image_->height());
133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  canvas->FillRectInt(SK_ColorWHITE, 0, background_image_->height(), width(),
134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                      height() - background_image_->height());
135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
137201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid DefaultSearchView::ButtonPressed(views::Button* sender,
138201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                      const views::Event& event) {
139201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  views::DialogClientView* client = GetDialogClientView();
140201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (sender == proposed_provider_button_)
141201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    client->AcceptWindow();
142201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  else
143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    client->CancelWindow();
144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstd::wstring DefaultSearchView::GetWindowTitle() const {
1473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  return UTF16ToWide(l10n_util::GetStringUTF16(IDS_DEFAULT_SEARCH_TITLE));
148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochviews::View* DefaultSearchView::GetInitiallyFocusedView() {
151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  return default_provider_button_;
152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickviews::View* DefaultSearchView::GetContentsView() {
155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  return this;
156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
158201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochint DefaultSearchView::GetDialogButtons() const {
15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return ui::MessageBoxFlags::DIALOGBUTTON_NONE;
160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool DefaultSearchView::Accept() {
163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Check this again in case the default became managed while this dialog was
164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // displayed.
165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TemplateURL* set_as_default = proposed_turl_.get();
166201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (!template_url_model_->CanMakeDefault(set_as_default))
167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    return true;
168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
169201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  template_url_model_->Add(proposed_turl_.release());
170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  template_url_model_->SetDefaultSearchProvider(set_as_default);
171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return true;
172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
174731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDefaultSearchView::DefaultSearchView(TabContents* tab_contents,
175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                     TemplateURL* proposed_default_turl,
176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                     TemplateURLModel* template_url_model)
177201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    : background_image_(NULL),
178201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      default_provider_button_(NULL),
179201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      proposed_provider_button_(NULL),
180201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      proposed_turl_(proposed_default_turl),
181731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      template_url_model_(template_url_model) {
182201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  PrefService* prefs = tab_contents->profile()->GetPrefs();
183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  SetupControls(prefs);
184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Show the dialog.
186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  tab_contents->CreateConstrainedDialog(this);
187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
188731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
189201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid DefaultSearchView::SetupControls(PrefService* prefs) {
190201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  using views::ColumnSet;
191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  using views::GridLayout;
192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  using views::ImageView;
193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  using views::Label;
194201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
195201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Column set id's.
196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  const int kWholeDialogViewSetId = 0;
197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  const int kPaddedWholeDialogViewSetId = 1;
198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  const int kChoicesViewSetId = 2;
199201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
200201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Set up the information for the proposed default.
201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::wstring proposed_short_name;
202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  int proposed_logo_id = kNoSearchEngineLogo;
203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  GetShortNameAndLogoId(prefs,
204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        proposed_turl_.get(),
205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        &proposed_short_name,
206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        &proposed_logo_id);
207201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (proposed_logo_id != kNoSearchEngineLogo)
208201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    proposed_turl_->set_logo_id(proposed_logo_id);
209201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
210201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
211201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Set up the information for the current default.
212201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::wstring default_short_name;
213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  int default_logo_id = kNoSearchEngineLogo;
214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  GetShortNameAndLogoId(prefs,
215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        template_url_model_->GetDefaultSearchProvider(),
216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        &default_short_name,
217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                        &default_logo_id);
218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Now set-up the dialog contents.
220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  GridLayout* layout = new views::GridLayout(this);
221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  layout->SetInsets(0, 0, views::kPanelVertMargin, 0);
222201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  SetLayoutManager(layout);
223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add a column set that spans the whole dialog.
225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ColumnSet* whole_dialog_column_set =
226201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      layout->AddColumnSet(kWholeDialogViewSetId);
227201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  whole_dialog_column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
228201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                     1, GridLayout::FIXED,
229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                     views::Window::GetLocalizedContentsWidth(
230201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                         IDS_DEFAULT_SEARCH_WIDTH_CHARS),
231201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                     0);
232201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add a column set that spans the whole dialog but obeying padding.
234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ColumnSet* padded_whole_dialog_column_set =
235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      layout->AddColumnSet(kPaddedWholeDialogViewSetId);
236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  padded_whole_dialog_column_set->AddColumn(
238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      GridLayout::LEADING, GridLayout::LEADING,
239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      1, GridLayout::USE_PREF, 0, 0);
240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
241201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
242201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add a column set for the search engine choices.
243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ColumnSet* choices_column_set = layout->AddColumnSet(kChoicesViewSetId);
244dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
245201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  choices_column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER,
246201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                1, GridLayout::USE_PREF, 0, 0);
24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  choices_column_set->AddPaddingColumn(
24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      1, views::kRelatedControlHorizontalSpacing);
249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  choices_column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER,
250201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                1, GridLayout::USE_PREF, 0, 0);
251201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  choices_column_set->LinkColumnSizes(0, 2, -1);
252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
254201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add the "search box" image.
255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->StartRow(0, kWholeDialogViewSetId);
256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  background_image_ = new ImageView();
258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  background_image_->SetImage(rb.GetBitmapNamed(IDR_SEARCH_ENGINE_DIALOG_TOP));
259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  background_image_->EnableCanvasFlippingForRTLUI(true);
260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ImageView::Alignment horizontal_alignment =
261201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      base::i18n::IsRTL() ? ImageView::LEADING : ImageView::TRAILING;
262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  background_image_->SetHorizontalAlignment(horizontal_alignment);
263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(background_image_);
264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add text informing the user about the requested default change.
266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->StartRowWithPadding(0, kPaddedWholeDialogViewSetId,
267dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                              1, views::kLabelToControlVerticalSpacing);
2683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  Label* summary_label = new Label(UTF16ToWide(l10n_util::GetStringFUTF16(
269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      IDS_DEFAULT_SEARCH_SUMMARY,
2703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      WideToUTF16(proposed_short_name))));
271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  summary_label->SetColor(SK_ColorBLACK);
272201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  summary_label->SetFont(
273201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      summary_label->font().DeriveFont(1, gfx::Font::NORMAL));
274201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  summary_label->SetHorizontalAlignment(Label::ALIGN_LEFT);
275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(summary_label);
276201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add the labels for the tops of the choices.
278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->StartRowWithPadding(0, kChoicesViewSetId,
27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                              0, views::kRelatedControlVerticalSpacing);
280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_CURRENT));
281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_PROPOSED));
282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add the logos.
284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->StartRowWithPadding(0, kChoicesViewSetId,
28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                              0, views::kRelatedControlVerticalSpacing);
286201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(CreateProviderLogo(default_logo_id, default_short_name));
287201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(CreateProviderLogo(proposed_logo_id, proposed_short_name));
288731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
289201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Add the buttons.
290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->StartRowWithPadding(0, kChoicesViewSetId,
29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                              0, views::kRelatedControlVerticalSpacing);
292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  default_provider_button_ = CreateProviderChoiceButton(
293201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      this,
294201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      IDS_DEFAULT_SEARCH_PROMPT_CURRENT,
295201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      default_short_name);
296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(default_provider_button_);
297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  proposed_provider_button_ = CreateProviderChoiceButton(
298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      this,
299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      IDS_DEFAULT_SEARCH_PROMPT_PROPOSED,
300201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      proposed_short_name);
301201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  layout->AddView(proposed_provider_button_);
302731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
303