Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: chrome/browser/ui/views/first_run_search_engine_view.cc

Issue 8618001: Get rid of the EnableClose() infrastructure in Widget. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/first_run_search_engine_view.h" 5 #include "chrome/browser/ui/views/first_run_search_engine_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 bool randomize_search_engine_experiment) { 57 bool randomize_search_engine_experiment) {
58 // If the default search is managed via policy, we don't ask the user to 58 // If the default search is managed via policy, we don't ask the user to
59 // choose. 59 // choose.
60 TemplateURLService* model = TemplateURLServiceFactory::GetForProfile(profile); 60 TemplateURLService* model = TemplateURLServiceFactory::GetForProfile(profile);
61 if (!FirstRun::ShouldShowSearchEngineSelector(model)) 61 if (!FirstRun::ShouldShowSearchEngineSelector(model))
62 return; 62 return;
63 63
64 views::Widget* window = views::Widget::CreateWindow( 64 views::Widget* window = views::Widget::CreateWindow(
65 new FirstRunSearchEngineView( 65 new FirstRunSearchEngineView(
66 profile, randomize_search_engine_experiment)); 66 profile, randomize_search_engine_experiment));
67 DCHECK(window);
68
69 window->SetAlwaysOnTop(true); 67 window->SetAlwaysOnTop(true);
70 window->Show(); 68 window->Show();
71 views::AcceleratorHandler accelerator_handler; 69 views::AcceleratorHandler accelerator_handler;
72 MessageLoopForUI::current()->RunWithDispatcher(&accelerator_handler); 70 MessageLoopForUI::current()->RunWithDispatcher(&accelerator_handler);
73 window->Close();
74 } 71 }
75 72
76 } // namespace first_run 73 } // namespace first_run
77 74
78 SearchEngineChoice::SearchEngineChoice(views::ButtonListener* listener, 75 SearchEngineChoice::SearchEngineChoice(views::ButtonListener* listener,
79 const TemplateURL* search_engine, 76 const TemplateURL* search_engine,
80 bool use_small_logos) 77 bool use_small_logos)
81 : NativeTextButton( 78 : NativeTextButton(
82 listener, 79 listener,
83 UTF16ToWide(l10n_util::GetStringUTF16(IDS_FR_SEARCH_CHOOSE))), 80 UTF16ToWide(l10n_util::GetStringUTF16(IDS_FR_SEARCH_CHOOSE))),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 void SearchEngineChoice::SetChoiceViewBounds(int x, int y, int width, 136 void SearchEngineChoice::SetChoiceViewBounds(int x, int y, int width,
140 int height) { 137 int height) {
141 choice_view_->SetBounds(x, y, width, height); 138 choice_view_->SetBounds(x, y, width, height);
142 } 139 }
143 140
144 FirstRunSearchEngineView::FirstRunSearchEngineView(Profile* profile, 141 FirstRunSearchEngineView::FirstRunSearchEngineView(Profile* profile,
145 bool randomize) 142 bool randomize)
146 : background_image_(NULL), 143 : background_image_(NULL),
147 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile)), 144 template_url_service_(TemplateURLServiceFactory::GetForProfile(profile)),
148 text_direction_is_rtl_(base::i18n::IsRTL()), 145 text_direction_is_rtl_(base::i18n::IsRTL()),
149 template_url_service_loaded_(false),
150 added_to_view_hierarchy_(false), 146 added_to_view_hierarchy_(false),
151 randomize_(randomize) { 147 randomize_(randomize),
148 user_chosen_engine_(false),
149 fallback_choice_(NULL),
150 quit_on_closing_(true) {
152 // Don't show ourselves until all the search engines have loaded from 151 // Don't show ourselves until all the search engines have loaded from
153 // the profile -- otherwise we have nothing to show. 152 // the profile -- otherwise we have nothing to show.
154 SetVisible(false); 153 SetVisible(false);
155 154
156 // Start loading the search engines for the given profile. 155 // Start loading the search engines for the given profile. The service is
156 // already loaded in tests.
157 DCHECK(template_url_service_); 157 DCHECK(template_url_service_);
158 DCHECK(!template_url_service_->loaded()); 158 if (!template_url_service_->loaded()) {
159 template_url_service_->AddObserver(this); 159 template_url_service_->AddObserver(this);
160 template_url_service_->Load(); 160 template_url_service_->Load();
161 }
161 } 162 }
162 163
163 FirstRunSearchEngineView::~FirstRunSearchEngineView() { 164 FirstRunSearchEngineView::~FirstRunSearchEngineView() {
164 template_url_service_->RemoveObserver(this); 165 template_url_service_->RemoveObserver(this);
165 } 166 }
166 167
167 string16 FirstRunSearchEngineView::GetWindowTitle() const { 168 string16 FirstRunSearchEngineView::GetWindowTitle() const {
168 return l10n_util::GetStringUTF16(IDS_FIRSTRUN_DLG_TITLE); 169 return l10n_util::GetStringUTF16(IDS_FIRSTRUN_DLG_TITLE);
169 } 170 }
170 171
172 void FirstRunSearchEngineView::WindowClosing() {
173 // If the window is closed by clicking the close button, we default to the
174 // engine in the first slot.
175 if (!user_chosen_engine_)
176 ChooseSearchEngine(fallback_choice_);
177 if (quit_on_closing_)
178 MessageLoop::current()->Quit();
179 }
180
171 void FirstRunSearchEngineView::ButtonPressed(views::Button* sender, 181 void FirstRunSearchEngineView::ButtonPressed(views::Button* sender,
172 const views::Event& event) { 182 const views::Event& event) {
173 SearchEngineChoice* choice = static_cast<SearchEngineChoice*>(sender); 183 ChooseSearchEngine(static_cast<SearchEngineChoice*>(sender));
174 DCHECK(template_url_service_); 184 GetWidget()->Close();
175 template_url_service_->SetSearchEngineDialogSlot(choice->slot()); 185 // This will call through to WindowClosing() above and will quit the message
176 const TemplateURL* default_search = choice->GetSearchEngine(); 186 // loop.
177 if (default_search)
178 template_url_service_->SetDefaultSearchProvider(default_search);
179
180 MessageLoop::current()->Quit();
181 } 187 }
182 188
183 void FirstRunSearchEngineView::OnPaint(gfx::Canvas* canvas) { 189 void FirstRunSearchEngineView::OnPaint(gfx::Canvas* canvas) {
184 // Fill in behind the background image with the standard gray toolbar color. 190 // Fill in behind the background image with the standard gray toolbar color.
185 canvas->FillRect(GetThemeProvider()->GetColor(ThemeService::COLOR_TOOLBAR), 191 canvas->FillRect(GetThemeProvider()->GetColor(ThemeService::COLOR_TOOLBAR),
186 gfx::Rect(0, 0, width(), background_image_->height())); 192 gfx::Rect(0, 0, width(), background_image_->height()));
187 // The rest of the dialog background should be white. 193 // The rest of the dialog background should be white.
188 DCHECK(height() > background_image_->height()); 194 DCHECK(height() > background_image_->height());
189 canvas->FillRect(SK_ColorWHITE, 195 canvas->FillRect(SK_ColorWHITE,
190 gfx::Rect(0, background_image_->height(), width(), 196 gfx::Rect(0, background_image_->height(), width(),
191 height() - background_image_->height())); 197 height() - background_image_->height()));
192 } 198 }
193 199
194 void FirstRunSearchEngineView::OnTemplateURLServiceChanged() { 200 void FirstRunSearchEngineView::OnTemplateURLServiceChanged() {
195 // We only watch the search engine model change once, on load. Remove 201 // We only watch the search engine model change once, on load. Remove
196 // observer so we don't try to redraw if engines change under us. 202 // observer so we don't try to redraw if engines change under us.
197 template_url_service_->RemoveObserver(this); 203 template_url_service_->RemoveObserver(this);
198
199 template_url_service_loaded_ = true;
200 AddSearchEnginesIfPossible(); 204 AddSearchEnginesIfPossible();
201 } 205 }
202 206
203 gfx::Size FirstRunSearchEngineView::GetPreferredSize() { 207 gfx::Size FirstRunSearchEngineView::GetPreferredSize() {
204 return views::Widget::GetLocalizedContentsSize( 208 return views::Widget::GetLocalizedContentsSize(
205 IDS_FIRSTRUN_SEARCH_ENGINE_SELECTION_WIDTH_CHARS, 209 IDS_FIRSTRUN_SEARCH_ENGINE_SELECTION_WIDTH_CHARS,
206 IDS_FIRSTRUN_SEARCH_ENGINE_SELECTION_HEIGHT_LINES); 210 IDS_FIRSTRUN_SEARCH_ENGINE_SELECTION_HEIGHT_LINES);
207 } 211 }
208 212
209 void FirstRunSearchEngineView::Layout() { 213 void FirstRunSearchEngineView::Layout() {
210 // Disable the close button.
211 GetWidget()->EnableClose(false);
212
213 gfx::Size pref_size = background_image_->GetPreferredSize(); 214 gfx::Size pref_size = background_image_->GetPreferredSize();
214 background_image_->SetBounds(0, 0, GetPreferredSize().width(), 215 background_image_->SetBounds(0, 0, GetPreferredSize().width(),
215 pref_size.height()); 216 pref_size.height());
216 217
217 // General vertical spacing between elements: 218 // General vertical spacing between elements:
218 const int kVertSpacing = 8; 219 const int kVertSpacing = 8;
219 // Percentage of vertical space around logos to use for upper padding. 220 // Percentage of vertical space around logos to use for upper padding.
220 const double kUpperPaddingPercent = 0.4; 221 const double kUpperPaddingPercent = 0.4;
221 222
222 int num_choices = search_engine_choices_.size(); 223 int num_choices = search_engine_choices_.size();
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 AddSearchEnginesIfPossible(); 363 AddSearchEnginesIfPossible();
363 } 364 }
364 } 365 }
365 366
366 void FirstRunSearchEngineView::GetAccessibleState( 367 void FirstRunSearchEngineView::GetAccessibleState(
367 ui::AccessibleViewState* state) { 368 ui::AccessibleViewState* state) {
368 state->role = ui::AccessibilityTypes::ROLE_ALERT; 369 state->role = ui::AccessibilityTypes::ROLE_ALERT;
369 } 370 }
370 371
371 void FirstRunSearchEngineView::AddSearchEnginesIfPossible() { 372 void FirstRunSearchEngineView::AddSearchEnginesIfPossible() {
372 if (!template_url_service_loaded_ || !added_to_view_hierarchy_) 373 if (!template_url_service_->loaded() || !added_to_view_hierarchy_)
373 return; 374 return;
374 375
375 // Add search engines in template_url_service_ to buttons list. The 376 // Add search engines in template_url_service_ to buttons list. The
376 // first three will always be from prepopulated data. 377 // first three will always be from prepopulated data.
377 std::vector<const TemplateURL*> template_urls = 378 std::vector<const TemplateURL*> template_urls =
378 template_url_service_->GetTemplateURLs(); 379 template_url_service_->GetTemplateURLs();
379 380
380 // If we have fewer than two search engines, end search engine dialog 381 // If we have fewer than two search engines, end search engine dialog
381 // immediately, leaving imported default search engine setting intact. 382 // immediately, leaving imported default search engine setting intact.
382 if (template_urls.size() < 2) { 383 if (template_urls.size() < 2) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 AddChildView(choice->GetView()); // The logo or text view. 425 AddChildView(choice->GetView()); // The logo or text view.
425 AddChildView(choice); // The button associated with the choice. 426 AddChildView(choice); // The button associated with the choice.
426 } 427 }
427 // Push the default choice to the fourth position. 428 // Push the default choice to the fourth position.
428 if (default_choice) { 429 if (default_choice) {
429 search_engine_choices_.push_back(default_choice); 430 search_engine_choices_.push_back(default_choice);
430 AddChildView(default_choice->GetView()); // The logo or text view. 431 AddChildView(default_choice->GetView()); // The logo or text view.
431 AddChildView(default_choice); // The button associated with the choice. 432 AddChildView(default_choice); // The button associated with the choice.
432 } 433 }
433 434
435 // It is critically important that this line happens before randomization is
436 // done below.
437 fallback_choice_ = search_engine_choices_.front();
438
434 // Randomize order of logos if option has been set. 439 // Randomize order of logos if option has been set.
435 if (randomize_) { 440 if (randomize_) {
436 std::random_shuffle(search_engine_choices_.begin(), 441 std::random_shuffle(search_engine_choices_.begin(),
437 search_engine_choices_.end(), 442 search_engine_choices_.end(),
438 base::RandGenerator); 443 base::RandGenerator);
439 // Assign to each choice the position in which it is shown on the screen. 444 // Assign to each choice the position in which it is shown on the screen.
440 std::vector<SearchEngineChoice*>::iterator it; 445 std::vector<SearchEngineChoice*>::iterator it;
441 int slot = 0; 446 int slot = 0;
442 for (it = search_engine_choices_.begin(); 447 for (it = search_engine_choices_.begin();
443 it != search_engine_choices_.end(); 448 it != search_engine_choices_.end();
(...skipping 18 matching lines...) Expand all
462 (*it)->SetText((*it)->GetSearchEngine()->short_name()); 467 (*it)->SetText((*it)->GetSearchEngine()->short_name());
463 } 468 }
464 } 469 }
465 470
466 // This will tell screenreaders that they should read the full text 471 // This will tell screenreaders that they should read the full text
467 // of this dialog to the user now (rather than waiting for the user 472 // of this dialog to the user now (rather than waiting for the user
468 // to explore it). 473 // to explore it).
469 GetWidget()->NotifyAccessibilityEvent( 474 GetWidget()->NotifyAccessibilityEvent(
470 this, ui::AccessibilityTypes::EVENT_ALERT, true); 475 this, ui::AccessibilityTypes::EVENT_ALERT, true);
471 } 476 }
477
478 void FirstRunSearchEngineView::ChooseSearchEngine(SearchEngineChoice* choice) {
479 user_chosen_engine_ = true;
480 DCHECK(template_url_service_);
481 template_url_service_->SetSearchEngineDialogSlot(choice->slot());
482 const TemplateURL* default_search = choice->GetSearchEngine();
483 if (default_search)
484 template_url_service_->SetDefaultSearchProvider(default_search);
485 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698