Chromium Code Reviews

Side by Side Diff: chrome/browser/views/first_run_bubble.cc

Issue 2822026: Mac: First run bubble. (Closed)
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/views/first_run_bubble.h" 5 #include "chrome/browser/views/first_run_bubble.h"
6 6
7 #include "app/gfx/font_util.h" 7 #include "app/gfx/font_util.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "app/resource_bundle.h" 9 #include "app/resource_bundle.h"
10 #include "app/win_util.h" 10 #include "app/win_util.h"
11 #include "base/utf_string_conversions.h"
11 #include "base/win_util.h" 12 #include "base/win_util.h"
12 #include "chrome/browser/browser.h" 13 #include "chrome/browser/browser.h"
13 #include "chrome/browser/browser_list.h" 14 #include "chrome/browser/browser_list.h"
14 #include "chrome/browser/browser_window.h" 15 #include "chrome/browser/browser_window.h"
15 #include "chrome/browser/first_run.h" 16 #include "chrome/browser/first_run.h"
16 #include "chrome/browser/options_window.h" 17 #include "chrome/browser/options_window.h"
17 #include "chrome/browser/profile.h" 18 #include "chrome/browser/search_engines/util.h"
18 #include "chrome/browser/search_engines/template_url_model.h"
19 #include "chrome/browser/metrics/user_metrics.h" 19 #include "chrome/browser/metrics/user_metrics.h"
20 #include "grit/chromium_strings.h" 20 #include "grit/chromium_strings.h"
21 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
22 #include "grit/locale_settings.h" 22 #include "grit/locale_settings.h"
23 #include "grit/theme_resources.h" 23 #include "grit/theme_resources.h"
24 #include "views/event.h" 24 #include "views/event.h"
25 #include "views/controls/button/native_button.h" 25 #include "views/controls/button/native_button.h"
26 #include "views/controls/button/image_button.h" 26 #include "views/controls/button/image_button.h"
27 #include "views/controls/label.h" 27 #include "views/controls/label.h"
28 #include "views/focus/focus_manager.h" 28 #include "views/focus/focus_manager.h"
(...skipping 10 matching lines...)
39 // provides in alternative OEM bubble. 39 // provides in alternative OEM bubble.
40 const int kOEMBubblePadding = 4; 40 const int kOEMBubblePadding = 4;
41 41
42 // Padding between parts of strings on the same line (for instance, 42 // Padding between parts of strings on the same line (for instance,
43 // "New!" and "Search from the address bar!" 43 // "New!" and "Search from the address bar!"
44 const int kStringSeparationPadding = 2; 44 const int kStringSeparationPadding = 2;
45 45
46 // Margin around close button. 46 // Margin around close button.
47 const int kMarginRightOfCloseButton = 7; 47 const int kMarginRightOfCloseButton = 7;
48 48
49 std::wstring GetDefaultSearchEngineName(Profile* profile) {
50 if (!profile) {
51 NOTREACHED();
52 return std::wstring();
53 }
54 const TemplateURL* const default_provider =
55 profile->GetTemplateURLModel()->GetDefaultSearchProvider();
56 if (!default_provider) {
57 // TODO(cpu): bug 1187517. It is possible to have no default provider.
58 // returning an empty string is a stopgap measure for the crash
59 // http://code.google.com/p/chromium/issues/detail?id=2573
60 return std::wstring();
61 }
62 return default_provider->short_name();
63 }
64
65 } // namespace 49 } // namespace
66 50
67 // Base class for implementations of the client view which appears inside the 51 // Base class for implementations of the client view which appears inside the
68 // first run bubble. It is a dialog-ish view, but is not a true dialog. 52 // first run bubble. It is a dialog-ish view, but is not a true dialog.
69 class FirstRunBubbleViewBase : public views::View, 53 class FirstRunBubbleViewBase : public views::View,
70 public views::ButtonListener, 54 public views::ButtonListener,
71 public views::FocusChangeListener { 55 public views::FocusChangeListener {
72 public: 56 public:
73 // Called by FirstRunBubble::Show to request focus for the proper button 57 // Called by FirstRunBubble::Show to request focus for the proper button
74 // in the FirstRunBubbleView when it is shown. 58 // in the FirstRunBubbleView when it is shown.
(...skipping 51 matching lines...)
126 gfx::Size ps = GetPreferredSize(); 110 gfx::Size ps = GetPreferredSize();
127 111
128 label2_ = new views::Label(l10n_util::GetString(IDS_FR_BUBBLE_SUBTEXT)); 112 label2_ = new views::Label(l10n_util::GetString(IDS_FR_BUBBLE_SUBTEXT));
129 label2_->SetMultiLine(true); 113 label2_->SetMultiLine(true);
130 label2_->SetFont(font); 114 label2_->SetFont(font);
131 label2_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 115 label2_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
132 label2_->SizeToFit(ps.width() - kBubblePadding * 2); 116 label2_->SizeToFit(ps.width() - kBubblePadding * 2);
133 AddChildView(label2_); 117 AddChildView(label2_);
134 118
135 std::wstring question_str = l10n_util::GetStringF(IDS_FR_BUBBLE_QUESTION, 119 std::wstring question_str = l10n_util::GetStringF(IDS_FR_BUBBLE_QUESTION,
136 GetDefaultSearchEngineName(profile)); 120 UTF16ToWideHack(GetDefaultSearchEngineName(profile)));
137 label3_ = new views::Label(question_str); 121 label3_ = new views::Label(question_str);
138 label3_->SetMultiLine(true); 122 label3_->SetMultiLine(true);
139 label3_->SetFont(font); 123 label3_->SetFont(font);
140 label3_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 124 label3_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
141 label3_->SizeToFit(ps.width() - kBubblePadding * 2); 125 label3_->SizeToFit(ps.width() - kBubblePadding * 2);
142 AddChildView(label3_); 126 AddChildView(label3_);
143 127
144 std::wstring keep_str = l10n_util::GetStringF(IDS_FR_BUBBLE_OK, 128 std::wstring keep_str = l10n_util::GetStringF(IDS_FR_BUBBLE_OK,
145 GetDefaultSearchEngineName(profile)); 129 UTF16ToWideHack(GetDefaultSearchEngineName(profile)));
146 keep_button_ = new views::NativeButton(this, keep_str); 130 keep_button_ = new views::NativeButton(this, keep_str);
147 keep_button_->SetIsDefault(true); 131 keep_button_->SetIsDefault(true);
148 AddChildView(keep_button_); 132 AddChildView(keep_button_);
149 133
150 std::wstring change_str = l10n_util::GetString(IDS_FR_BUBBLE_CHANGE); 134 std::wstring change_str = l10n_util::GetString(IDS_FR_BUBBLE_CHANGE);
151 change_button_ = new views::NativeButton(this, change_str); 135 change_button_ = new views::NativeButton(this, change_str);
152 AddChildView(change_button_); 136 AddChildView(change_button_);
153 } 137 }
154 138
155 void FirstRunBubbleView::BubbleShown() { 139 void FirstRunBubbleView::BubbleShown() {
(...skipping 258 matching lines...)
414 FirstRunBubble* bubble_window, 398 FirstRunBubble* bubble_window,
415 Profile* profile) 399 Profile* profile)
416 : bubble_window_(bubble_window), 400 : bubble_window_(bubble_window),
417 profile_(profile), 401 profile_(profile),
418 label1_(NULL), 402 label1_(NULL),
419 label2_(NULL) { 403 label2_(NULL) {
420 const gfx::Font& font = 404 const gfx::Font& font =
421 ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::MediumFont); 405 ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::MediumFont);
422 406
423 label1_ = new views::Label(l10n_util::GetStringF(IDS_FR_SE_BUBBLE_TITLE, 407 label1_ = new views::Label(l10n_util::GetStringF(IDS_FR_SE_BUBBLE_TITLE,
424 GetDefaultSearchEngineName(profile_))); 408 UTF16ToWideHack(GetDefaultSearchEngineName(profile_))));
425 label1_->SetFont(font.DeriveFont(3, gfx::Font::BOLD)); 409 label1_->SetFont(font.DeriveFont(3, gfx::Font::BOLD));
426 label1_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 410 label1_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
427 AddChildView(label1_); 411 AddChildView(label1_);
428 412
429 gfx::Size ps = GetPreferredSize(); 413 gfx::Size ps = GetPreferredSize();
430 414
431 label2_ = new views::Label(l10n_util::GetString(IDS_FR_BUBBLE_SUBTEXT)); 415 label2_ = new views::Label(l10n_util::GetString(IDS_FR_BUBBLE_SUBTEXT));
432 label2_->SetMultiLine(true); 416 label2_->SetMultiLine(true);
433 label2_->SetFont(font); 417 label2_->SetFont(font);
434 label2_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 418 label2_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
(...skipping 113 matching lines...)
548 } 532 }
549 533
550 void FirstRunBubble::InfoBubbleClosing(InfoBubble* info_bubble, 534 void FirstRunBubble::InfoBubbleClosing(InfoBubble* info_bubble,
551 bool closed_by_escape) { 535 bool closed_by_escape) {
552 // Make sure our parent window is re-enabled. 536 // Make sure our parent window is re-enabled.
553 if (!IsWindowEnabled(GetParent())) 537 if (!IsWindowEnabled(GetParent()))
554 ::EnableWindow(GetParent(), true); 538 ::EnableWindow(GetParent(), true);
555 enable_window_method_factory_.RevokeAll(); 539 enable_window_method_factory_.RevokeAll();
556 GetFocusManager()->RemoveFocusChangeListener(view_); 540 GetFocusManager()->RemoveFocusChangeListener(view_);
557 } 541 }
OLDNEW

Powered by Google App Engine