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