summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authorglen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-16 20:50:23 +0000
committerglen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-16 20:50:23 +0000
commitc9d01f92e082319a59215e2e812ca94168704695 (patch)
treeda17f05c8432cee9665969a8be7d5a090f43dbe5 /chrome/browser/views
parentde54a5f6e53a3aa2cd218cb5f19aaf205af382d5 (diff)
downloadchromium_src-c9d01f92e082319a59215e2e812ca94168704695.zip
chromium_src-c9d01f92e082319a59215e2e812ca94168704695.tar.gz
chromium_src-c9d01f92e082319a59215e2e812ca94168704695.tar.bz2
Commit for MirandaC of Smaller alternate first run bubble. http://codereview.chromium.org/115265
BUG=9223 TBR=mirandac Review URL: http://codereview.chromium.org/113504 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16241 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r--chrome/browser/views/first_run_bubble.cc150
-rw-r--r--chrome/browser/views/first_run_bubble.h9
-rw-r--r--chrome/browser/views/location_bar_view.cc8
-rw-r--r--chrome/browser/views/location_bar_view.h4
4 files changed, 149 insertions, 22 deletions
diff --git a/chrome/browser/views/first_run_bubble.cc b/chrome/browser/views/first_run_bubble.cc
index 0ca491c..32d38da 100644
--- a/chrome/browser/views/first_run_bubble.cc
+++ b/chrome/browser/views/first_run_bubble.cc
@@ -16,8 +16,10 @@
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "grit/theme_resources.h"
#include "views/event.h"
#include "views/controls/button/native_button.h"
+#include "views/controls/button/image_button.h"
#include "views/controls/label.h"
#include "views/focus/focus_manager.h"
#include "views/standard_layout.h"
@@ -29,6 +31,17 @@ namespace {
// provides.
static const int kBubblePadding = 4;
+// How much extra padding to put around our content over what the InfoBubble
+// provides in alternative OEM bubble.
+static const int kOEMBubblePadding = 4;
+
+// Padding between parts of strings on the same line (for instance,
+// "New!" and "Search from the address bar!"
+static const int kStringSeparationPadding = 2;
+
+// Margin around close button.
+static const int kMarginRightOfCloseButton = 7;
+
std::wstring GetDefaultSearchEngineName(Profile* profile) {
if (!profile) {
NOTREACHED();
@@ -47,11 +60,18 @@ std::wstring GetDefaultSearchEngineName(Profile* profile) {
} // namespace
-// Implements the client view inside the first run bubble. It is kind of a
-// dialog-ish view, but is not a true dialog.
-class FirstRunBubbleView : public views::View,
- public views::ButtonListener,
- public views::FocusChangeListener {
+// Base class for implementations of the client view which appears inside the
+// first run bubble. It is a dialog-ish view, but is not a true dialog.
+class FirstRunBubbleViewBase : public views::View,
+ public views::ButtonListener,
+ public views::FocusChangeListener {
+ public:
+ // Called by FirstRunBubble::Show to request focus for the proper button
+ // in the FirstRunBubbleView when it is shown.
+ virtual void BubbleShown() = 0;
+};
+
+class FirstRunBubbleView : public FirstRunBubbleViewBase {
public:
FirstRunBubbleView(FirstRunBubble* bubble_window, Profile* profile)
: bubble_window_(bubble_window),
@@ -103,7 +123,6 @@ class FirstRunBubbleView : public views::View,
keep_button_->RequestFocus();
}
- // Overridden from ButtonListener.
virtual void ButtonPressed(views::Button* sender) {
bubble_window_->Close();
if (change_button_ == sender) {
@@ -115,7 +134,6 @@ class FirstRunBubbleView : public views::View,
}
}
- // Overridden from views::View.
virtual void Layout() {
gfx::Size canvas = GetPreferredSize();
@@ -157,7 +175,6 @@ class FirstRunBubbleView : public views::View,
pref_size.width(), pref_size.height());
}
- // Overridden from views::View.
virtual gfx::Size GetPreferredSize() {
return gfx::Size(views::Window::GetLocalizedContentsSize(
IDS_FIRSTRUNBUBBLE_DIALOG_WIDTH_CHARS,
@@ -190,6 +207,111 @@ class FirstRunBubbleView : public views::View,
DISALLOW_COPY_AND_ASSIGN(FirstRunBubbleView);
};
+class FirstRunOEMBubbleView : public FirstRunBubbleViewBase {
+ public:
+ FirstRunOEMBubbleView(FirstRunBubble* bubble_window, Profile* profile)
+ : bubble_window_(bubble_window),
+ label1_(NULL),
+ label2_(NULL),
+ label3_(NULL),
+ close_button_(NULL) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ ChromeFont& font = rb.GetFont(ResourceBundle::MediumFont);
+
+ label1_ = new views::Label(
+ l10n_util::GetString(IDS_FR_OEM_BUBBLE_TITLE_1));
+ label1_->SetFont(font.DeriveFont(3, ChromeFont::BOLD));
+ label1_->SetColor(SK_ColorRED);
+ label1_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ AddChildView(label1_);
+
+ label2_ = new views::Label(
+ l10n_util::GetString(IDS_FR_OEM_BUBBLE_TITLE_2));
+ label2_->SetFont(font.DeriveFont(3, ChromeFont::BOLD));
+ label2_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ AddChildView(label2_);
+
+ gfx::Size ps = GetPreferredSize();
+
+ label3_ = new views::Label(
+ l10n_util::GetString(IDS_FR_OEM_BUBBLE_SUBTEXT));
+ label3_->SetMultiLine(true);
+ label3_->SetFont(font);
+ label3_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ label3_->SizeToFit(ps.width() - kOEMBubblePadding * 2);
+ AddChildView(label3_);
+
+ close_button_ = new views::ImageButton(this);
+ close_button_->SetImage(views::CustomButton::BS_NORMAL,
+ rb.GetBitmapNamed(IDR_CLOSE_BAR));
+ close_button_->SetImage(views::CustomButton::BS_HOT,
+ rb.GetBitmapNamed(IDR_CLOSE_BAR_H));
+ close_button_->SetImage(views::CustomButton::BS_PUSHED,
+ rb.GetBitmapNamed(IDR_CLOSE_BAR_P));
+
+ AddChildView(close_button_);
+ }
+
+ void BubbleShown() {
+ // No button in oem_bubble to request focus.
+ }
+
+ virtual void ButtonPressed(views::Button* sender) {
+ bubble_window_->Close();
+ }
+
+ virtual void Layout() {
+ gfx::Size canvas = GetPreferredSize();
+
+ // First, draw the close button on the far right.
+ gfx::Size sz = close_button_->GetPreferredSize();
+ close_button_->SetBounds(canvas.width() - sz.width() -
+ kMarginRightOfCloseButton,
+ kOEMBubblePadding,
+ sz.width(),
+ sz.height());
+
+ gfx::Size pref_size = label1_->GetPreferredSize();
+ label1_->SetBounds(kOEMBubblePadding, kOEMBubblePadding,
+ pref_size.width() + kOEMBubblePadding * 2,
+ pref_size.height());
+
+ pref_size = label2_->GetPreferredSize();
+ label2_->SetBounds(kOEMBubblePadding * 2 + label1_->
+ GetPreferredSize().width(),
+ kOEMBubblePadding,
+ canvas.width() - kOEMBubblePadding * 2,
+ pref_size.height());
+
+ int next_v_space = label1_->y() + pref_size.height() +
+ kRelatedControlSmallVerticalSpacing;
+
+ pref_size = label3_->GetPreferredSize();
+ label3_->SetBounds(kOEMBubblePadding, next_v_space,
+ canvas.width() - kOEMBubblePadding * 2,
+ pref_size.height());
+ }
+
+ virtual gfx::Size GetPreferredSize() {
+ return gfx::Size(views::Window::GetLocalizedContentsSize(
+ IDS_FIRSTRUNOEMBUBBLE_DIALOG_WIDTH_CHARS,
+ IDS_FIRSTRUNOEMBUBBLE_DIALOG_HEIGHT_LINES));
+ }
+
+ virtual void FocusWillChange(View* focused_before, View* focused_now) {
+ // No buttons in oem_bubble to register focus changes.
+ }
+
+ private:
+ FirstRunBubble* bubble_window_;
+ views::Label* label1_;
+ views::Label* label2_;
+ views::Label* label3_;
+ views::ImageButton* close_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(FirstRunOEMBubbleView);
+};
+
// Keep the bubble around for kLingerTime milliseconds, to prevent accidental
// closure.
static const int kLingerTime = 1000;
@@ -201,8 +323,6 @@ void FirstRunBubble::OnActivate(UINT action, BOOL minimized, HWND window) {
if (action == WA_ACTIVE && !has_been_activated_) {
has_been_activated_ = true;
- // Disable the browser to prevent accidental rapid clicks from closing the
- // bubble.
::EnableWindow(GetParent(), false);
MessageLoop::current()->PostDelayedTask(FROM_HERE,
@@ -210,6 +330,7 @@ void FirstRunBubble::OnActivate(UINT action, BOOL minimized, HWND window) {
&FirstRunBubble::EnableParent),
kLingerTime);
}
+
InfoBubble::OnActivate(action, minimized, window);
}
@@ -226,9 +347,14 @@ void FirstRunBubble::InfoBubbleClosing(InfoBubble* info_bubble,
// static
FirstRunBubble* FirstRunBubble::Show(Profile* profile, HWND parent_hwnd,
- const gfx::Rect& position_relative_to) {
+ const gfx::Rect& position_relative_to,
+ bool use_OEM_bubble) {
FirstRunBubble* window = new FirstRunBubble();
- FirstRunBubbleView* view = new FirstRunBubbleView(window, profile);
+ FirstRunBubbleViewBase* view = NULL;
+ if (use_OEM_bubble)
+ view = new FirstRunOEMBubbleView(window, profile);
+ else
+ view = new FirstRunBubbleView(window, profile);
window->SetDelegate(window);
window->set_view(view);
window->Init(parent_hwnd, position_relative_to, view);
diff --git a/chrome/browser/views/first_run_bubble.h b/chrome/browser/views/first_run_bubble.h
index d921987..598362b 100644
--- a/chrome/browser/views/first_run_bubble.h
+++ b/chrome/browser/views/first_run_bubble.h
@@ -8,14 +8,15 @@
#include "base/task.h"
#include "chrome/browser/views/info_bubble.h"
-class FirstRunBubbleView;
+class FirstRunBubbleViewBase;
class Profile;
class FirstRunBubble : public InfoBubble,
public InfoBubbleDelegate {
public:
static FirstRunBubble* Show(Profile* profile, HWND parent_hwnd,
- const gfx::Rect& position_relative_to);
+ const gfx::Rect& position_relative_to,
+ bool use_OEM_bubble);
FirstRunBubble()
: enable_window_method_factory_(this),
@@ -29,7 +30,7 @@ class FirstRunBubble : public InfoBubble,
enable_window_method_factory_.RevokeAll();
}
- void set_view(FirstRunBubbleView* view) { view_ = view; }
+ void set_view(FirstRunBubbleViewBase* view) { view_ = view; }
// Overridden from InfoBubble:
virtual void OnActivate(UINT action, BOOL minimized, HWND window);
@@ -49,7 +50,7 @@ class FirstRunBubble : public InfoBubble,
ScopedRunnableMethodFactory<FirstRunBubble> enable_window_method_factory_;
// The view inside the FirstRunBubble.
- FirstRunBubbleView* view_;
+ FirstRunBubbleViewBase* view_;
DISALLOW_COPY_AND_ASSIGN(FirstRunBubble);
};
diff --git a/chrome/browser/views/location_bar_view.cc b/chrome/browser/views/location_bar_view.cc
index 415334e..83c23c9 100644
--- a/chrome/browser/views/location_bar_view.cc
+++ b/chrome/browser/views/location_bar_view.cc
@@ -936,7 +936,7 @@ void LocationBarView::ShowInfoBubbleTask::Cancel() {
// -----------------------------------------------------------------------------
-void LocationBarView::ShowFirstRunBubbleInternal() {
+void LocationBarView::ShowFirstRunBubbleInternal(bool use_OEM_bubble) {
if (!location_entry_view_)
return;
if (!location_entry_view_->GetWidget()->IsActive()) {
@@ -965,7 +965,7 @@ void LocationBarView::ShowFirstRunBubbleInternal() {
FirstRunBubble::Show(profile_,
location_entry_view_->GetRootView()->GetWidget()->GetNativeView(),
- bounds);
+ bounds, use_OEM_bubble);
}
// LocationBarImageView---------------------------------------------------------
@@ -1169,10 +1169,10 @@ bool LocationBarView::OverrideAccelerator(
////////////////////////////////////////////////////////////////////////////////
// LocationBarView, LocationBar implementation:
-void LocationBarView::ShowFirstRunBubble() {
+void LocationBarView::ShowFirstRunBubble(bool use_OEM_bubble) {
// We wait 30 milliseconds to open. It allows less flicker.
Task* task = first_run_bubble_.NewRunnableMethod(
- &LocationBarView::ShowFirstRunBubbleInternal);
+ &LocationBarView::ShowFirstRunBubbleInternal, use_OEM_bubble);
MessageLoop::current()->PostDelayedTask(FROM_HERE, task, 30);
}
diff --git a/chrome/browser/views/location_bar_view.h b/chrome/browser/views/location_bar_view.h
index b0648d7..e81c5fc 100644
--- a/chrome/browser/views/location_bar_view.h
+++ b/chrome/browser/views/location_bar_view.h
@@ -111,7 +111,7 @@ class LocationBarView : public LocationBar,
virtual bool OverrideAccelerator(const views::Accelerator& accelerator);
// Overridden from LocationBar:
- virtual void ShowFirstRunBubble();
+ virtual void ShowFirstRunBubble(bool use_OEM_bubble);
virtual std::wstring GetInputString() const;
virtual WindowOpenDisposition GetWindowOpenDisposition() const;
virtual PageTransition::Type GetPageTransition() const;
@@ -416,7 +416,7 @@ class LocationBarView : public LocationBar,
void OnMouseEvent(const views::MouseEvent& event, UINT msg);
// Helper to show the first run info bubble.
- void ShowFirstRunBubbleInternal();
+ void ShowFirstRunBubbleInternal(bool use_OEM_bubble);
// Current profile. Not owned by us.
Profile* profile_;