| OLD | NEW |
| 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/toolbar_view.h" | 5 #include "chrome/browser/views/toolbar_view.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
| 9 #include "chrome/app/chrome_dll_resource.h" | 9 #include "chrome/app/chrome_dll_resource.h" |
| 10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 | 60 |
| 61 static SkBitmap* kPopupBackgroundEdge = NULL; | 61 static SkBitmap* kPopupBackgroundEdge = NULL; |
| 62 | 62 |
| 63 //////////////////////////////////////////////////////////////////////////////// | 63 //////////////////////////////////////////////////////////////////////////////// |
| 64 // ToolbarView, public: | 64 // ToolbarView, public: |
| 65 | 65 |
| 66 ToolbarView::ToolbarView(Browser* browser) | 66 ToolbarView::ToolbarView(Browser* browser) |
| 67 : model_(browser->toolbar_model()), | 67 : model_(browser->toolbar_model()), |
| 68 back_(NULL), | 68 back_(NULL), |
| 69 forward_(NULL), | 69 forward_(NULL), |
| 70 reload_(NULL), |
| 70 home_(NULL), | 71 home_(NULL), |
| 71 reload_(NULL), | |
| 72 location_bar_(NULL), | 72 location_bar_(NULL), |
| 73 browser_actions_(NULL), | 73 browser_actions_(NULL), |
| 74 app_menu_(NULL), | 74 app_menu_(NULL), |
| 75 profile_(NULL), | 75 profile_(NULL), |
| 76 browser_(browser), | 76 browser_(browser), |
| 77 profiles_menu_contents_(NULL), | 77 profiles_menu_contents_(NULL), |
| 78 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), | 78 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), |
| 79 destroyed_flag_(NULL) { | 79 destroyed_flag_(NULL) { |
| 80 SetID(VIEW_ID_TOOLBAR); | 80 SetID(VIEW_ID_TOOLBAR); |
| 81 | 81 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 back_->SetID(VIEW_ID_BACK_BUTTON); | 124 back_->SetID(VIEW_ID_BACK_BUTTON); |
| 125 | 125 |
| 126 forward_ = new views::ButtonDropDown(this, forward_menu_model_.get()); | 126 forward_ = new views::ButtonDropDown(this, forward_menu_model_.get()); |
| 127 forward_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | | 127 forward_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | |
| 128 views::Event::EF_MIDDLE_BUTTON_DOWN); | 128 views::Event::EF_MIDDLE_BUTTON_DOWN); |
| 129 forward_->set_tag(IDC_FORWARD); | 129 forward_->set_tag(IDC_FORWARD); |
| 130 forward_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_FORWARD)); | 130 forward_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_FORWARD)); |
| 131 forward_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_FORWARD)); | 131 forward_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_FORWARD)); |
| 132 forward_->SetID(VIEW_ID_FORWARD_BUTTON); | 132 forward_->SetID(VIEW_ID_FORWARD_BUTTON); |
| 133 | 133 |
| 134 home_ = new views::ImageButton(this); | |
| 135 home_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | | |
| 136 views::Event::EF_MIDDLE_BUTTON_DOWN); | |
| 137 home_->set_tag(IDC_HOME); | |
| 138 home_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_HOME)); | |
| 139 home_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_HOME)); | |
| 140 home_->SetID(VIEW_ID_HOME_BUTTON); | |
| 141 | |
| 142 // Have to create this before |reload_| as |reload_|'s constructor needs it. | 134 // Have to create this before |reload_| as |reload_|'s constructor needs it. |
| 143 location_bar_ = new LocationBarView(profile, browser_->command_updater(), | 135 location_bar_ = new LocationBarView(profile, browser_->command_updater(), |
| 144 model_, this, (display_mode_ == DISPLAYMODE_LOCATION) ? | 136 model_, this, (display_mode_ == DISPLAYMODE_LOCATION) ? |
| 145 LocationBarView::POPUP : LocationBarView::NORMAL); | 137 LocationBarView::POPUP : LocationBarView::NORMAL); |
| 146 | 138 |
| 147 reload_ = new ReloadButton(location_bar_, browser_); | 139 reload_ = new ReloadButton(location_bar_, browser_); |
| 148 reload_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | | 140 reload_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | |
| 149 views::Event::EF_MIDDLE_BUTTON_DOWN); | 141 views::Event::EF_MIDDLE_BUTTON_DOWN); |
| 150 reload_->set_tag(IDC_RELOAD); | 142 reload_->set_tag(IDC_RELOAD); |
| 151 reload_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_RELOAD)); | 143 reload_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_RELOAD)); |
| 152 reload_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_RELOAD)); | 144 reload_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_RELOAD)); |
| 153 reload_->SetID(VIEW_ID_RELOAD_BUTTON); | 145 reload_->SetID(VIEW_ID_RELOAD_BUTTON); |
| 154 | 146 |
| 147 home_ = new views::ImageButton(this); |
| 148 home_->set_triggerable_event_flags(views::Event::EF_LEFT_BUTTON_DOWN | |
| 149 views::Event::EF_MIDDLE_BUTTON_DOWN); |
| 150 home_->set_tag(IDC_HOME); |
| 151 home_->SetTooltipText(l10n_util::GetString(IDS_TOOLTIP_HOME)); |
| 152 home_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_HOME)); |
| 153 home_->SetID(VIEW_ID_HOME_BUTTON); |
| 154 |
| 155 browser_actions_ = new BrowserActionsContainer(browser_, this); | 155 browser_actions_ = new BrowserActionsContainer(browser_, this); |
| 156 | 156 |
| 157 app_menu_ = new views::MenuButton(NULL, std::wstring(), this, false); | 157 app_menu_ = new views::MenuButton(NULL, std::wstring(), this, false); |
| 158 app_menu_->EnableCanvasFlippingForRTLUI(true); | 158 app_menu_->EnableCanvasFlippingForRTLUI(true); |
| 159 app_menu_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_APP)); | 159 app_menu_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_APP)); |
| 160 app_menu_->SetTooltipText(l10n_util::GetStringF(IDS_APPMENU_TOOLTIP, | 160 app_menu_->SetTooltipText(l10n_util::GetStringF(IDS_APPMENU_TOOLTIP, |
| 161 l10n_util::GetString(IDS_PRODUCT_NAME))); | 161 l10n_util::GetString(IDS_PRODUCT_NAME))); |
| 162 app_menu_->SetID(VIEW_ID_APP_MENU); | 162 app_menu_->SetID(VIEW_ID_APP_MENU); |
| 163 | 163 |
| 164 // Catch the case where the window is created after we detect a new version. | 164 // Catch the case where the window is created after we detect a new version. |
| 165 if (Singleton<UpgradeDetector>::get()->notify_upgrade()) | 165 if (Singleton<UpgradeDetector>::get()->notify_upgrade()) |
| 166 ShowUpgradeReminder(); | 166 ShowUpgradeReminder(); |
| 167 | 167 |
| 168 LoadImages(); | 168 LoadImages(); |
| 169 | 169 |
| 170 // Always add children in order from left to right, for accessibility. | 170 // Always add children in order from left to right, for accessibility. |
| 171 AddChildView(back_); | 171 AddChildView(back_); |
| 172 AddChildView(forward_); | 172 AddChildView(forward_); |
| 173 AddChildView(reload_); |
| 173 AddChildView(home_); | 174 AddChildView(home_); |
| 174 AddChildView(reload_); | |
| 175 AddChildView(location_bar_); | 175 AddChildView(location_bar_); |
| 176 AddChildView(browser_actions_); | 176 AddChildView(browser_actions_); |
| 177 AddChildView(app_menu_); | 177 AddChildView(app_menu_); |
| 178 | 178 |
| 179 location_bar_->Init(); | 179 location_bar_->Init(); |
| 180 show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this); | 180 show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this); |
| 181 | 181 |
| 182 SetProfile(profile); | 182 SetProfile(profile); |
| 183 } | 183 } |
| 184 | 184 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 browser_->ExecuteCommand(command_id); | 381 browser_->ExecuteCommand(command_id); |
| 382 } | 382 } |
| 383 | 383 |
| 384 //////////////////////////////////////////////////////////////////////////////// | 384 //////////////////////////////////////////////////////////////////////////////// |
| 385 // ToolbarView, views::View overrides: | 385 // ToolbarView, views::View overrides: |
| 386 | 386 |
| 387 gfx::Size ToolbarView::GetPreferredSize() { | 387 gfx::Size ToolbarView::GetPreferredSize() { |
| 388 if (IsDisplayModeNormal()) { | 388 if (IsDisplayModeNormal()) { |
| 389 int min_width = kControlIndent + back_->GetPreferredSize().width() + | 389 int min_width = kControlIndent + back_->GetPreferredSize().width() + |
| 390 forward_->GetPreferredSize().width() + kControlHorizOffset + | 390 forward_->GetPreferredSize().width() + kControlHorizOffset + |
| 391 reload_->GetPreferredSize().width() + kControlHorizOffset + |
| 391 (show_home_button_.GetValue() ? | 392 (show_home_button_.GetValue() ? |
| 392 (home_->GetPreferredSize().width() + kControlHorizOffset) : 0) + | 393 (home_->GetPreferredSize().width() + kControlHorizOffset) : 0) + |
| 393 reload_->GetPreferredSize().width() + kControlHorizOffset + | |
| 394 browser_actions_->GetPreferredSize().width() + | 394 browser_actions_->GetPreferredSize().width() + |
| 395 kMenuButtonOffset + | 395 kMenuButtonOffset + |
| 396 app_menu_->GetPreferredSize().width() + kPaddingRight; | 396 app_menu_->GetPreferredSize().width() + kPaddingRight; |
| 397 | 397 |
| 398 static SkBitmap normal_background; | 398 static SkBitmap normal_background; |
| 399 if (normal_background.isNull()) { | 399 if (normal_background.isNull()) { |
| 400 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 400 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 401 normal_background = *rb.GetBitmapNamed(IDR_CONTENT_TOP_CENTER); | 401 normal_background = *rb.GetBitmapNamed(IDR_CONTENT_TOP_CENTER); |
| 402 } | 402 } |
| 403 | 403 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 // http://crbug.com/5540 | 438 // http://crbug.com/5540 |
| 439 int back_width = back_->GetPreferredSize().width(); | 439 int back_width = back_->GetPreferredSize().width(); |
| 440 if (browser_->window() && browser_->window()->IsMaximized()) | 440 if (browser_->window() && browser_->window()->IsMaximized()) |
| 441 back_->SetBounds(0, child_y, back_width + kControlIndent, child_height); | 441 back_->SetBounds(0, child_y, back_width + kControlIndent, child_height); |
| 442 else | 442 else |
| 443 back_->SetBounds(kControlIndent, child_y, back_width, child_height); | 443 back_->SetBounds(kControlIndent, child_y, back_width, child_height); |
| 444 | 444 |
| 445 forward_->SetBounds(back_->x() + back_->width(), child_y, | 445 forward_->SetBounds(back_->x() + back_->width(), child_y, |
| 446 forward_->GetPreferredSize().width(), child_height); | 446 forward_->GetPreferredSize().width(), child_height); |
| 447 | 447 |
| 448 reload_->SetBounds(forward_->x() + forward_->width() + kControlHorizOffset, |
| 449 child_y, reload_->GetPreferredSize().width(), child_height); |
| 450 |
| 448 if (show_home_button_.GetValue()) { | 451 if (show_home_button_.GetValue()) { |
| 449 home_->SetVisible(true); | 452 home_->SetVisible(true); |
| 450 home_->SetBounds(forward_->x() + forward_->width() + kControlHorizOffset, | 453 home_->SetBounds(reload_->x() + reload_->width() + kControlHorizOffset, |
| 451 child_y, home_->GetPreferredSize().width(), child_height); | 454 child_y, home_->GetPreferredSize().width(), child_height); |
| 452 } else { | 455 } else { |
| 453 home_->SetVisible(false); | 456 home_->SetVisible(false); |
| 454 home_->SetBounds(forward_->x() + forward_->width(), child_y, 0, | 457 home_->SetBounds(reload_->x() + reload_->width(), child_y, 0, child_height); |
| 455 child_height); | |
| 456 } | 458 } |
| 457 | 459 |
| 458 reload_->SetBounds(home_->x() + home_->width() + kControlHorizOffset, child_y, | |
| 459 reload_->GetPreferredSize().width(), child_height); | |
| 460 | |
| 461 int browser_actions_width = browser_actions_->GetPreferredSize().width(); | 460 int browser_actions_width = browser_actions_->GetPreferredSize().width(); |
| 462 int app_menu_width = app_menu_->GetPreferredSize().width(); | 461 int app_menu_width = app_menu_->GetPreferredSize().width(); |
| 463 int location_x = reload_->x() + reload_->width() + kControlHorizOffset; | 462 int location_x = home_->x() + home_->width() + kControlHorizOffset; |
| 464 int available_width = width() - kPaddingRight - app_menu_width - | 463 int available_width = width() - kPaddingRight - app_menu_width - |
| 465 browser_actions_width - kMenuButtonOffset - location_x; | 464 browser_actions_width - kMenuButtonOffset - location_x; |
| 466 | 465 |
| 467 location_bar_->SetBounds(location_x, child_y, std::max(available_width, 0), | 466 location_bar_->SetBounds(location_x, child_y, std::max(available_width, 0), |
| 468 child_height); | 467 child_height); |
| 469 int next_menu_x = | 468 int next_menu_x = |
| 470 location_bar_->x() + location_bar_->width() + kMenuButtonOffset; | 469 location_bar_->x() + location_bar_->width() + kMenuButtonOffset; |
| 471 | 470 |
| 472 browser_actions_->SetBounds(next_menu_x, 0, browser_actions_width, height()); | 471 browser_actions_->SetBounds(next_menu_x, 0, browser_actions_width, height()); |
| 473 // The browser actions need to do a layout explicitly, because when an | 472 // The browser actions need to do a layout explicitly, because when an |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 tp->GetBitmapNamed(IDR_FORWARD)); | 549 tp->GetBitmapNamed(IDR_FORWARD)); |
| 551 forward_->SetImage(views::CustomButton::BS_HOT, | 550 forward_->SetImage(views::CustomButton::BS_HOT, |
| 552 tp->GetBitmapNamed(IDR_FORWARD_H)); | 551 tp->GetBitmapNamed(IDR_FORWARD_H)); |
| 553 forward_->SetImage(views::CustomButton::BS_PUSHED, | 552 forward_->SetImage(views::CustomButton::BS_PUSHED, |
| 554 tp->GetBitmapNamed(IDR_FORWARD_P)); | 553 tp->GetBitmapNamed(IDR_FORWARD_P)); |
| 555 forward_->SetImage(views::CustomButton::BS_DISABLED, | 554 forward_->SetImage(views::CustomButton::BS_DISABLED, |
| 556 tp->GetBitmapNamed(IDR_FORWARD_D)); | 555 tp->GetBitmapNamed(IDR_FORWARD_D)); |
| 557 forward_->SetBackground(color, background, | 556 forward_->SetBackground(color, background, |
| 558 tp->GetBitmapNamed(IDR_FORWARD_MASK)); | 557 tp->GetBitmapNamed(IDR_FORWARD_MASK)); |
| 559 | 558 |
| 560 home_->SetImage(views::CustomButton::BS_NORMAL, tp->GetBitmapNamed(IDR_HOME)); | |
| 561 home_->SetImage(views::CustomButton::BS_HOT, tp->GetBitmapNamed(IDR_HOME_H)); | |
| 562 home_->SetImage(views::CustomButton::BS_PUSHED, | |
| 563 tp->GetBitmapNamed(IDR_HOME_P)); | |
| 564 home_->SetBackground(color, background, | |
| 565 tp->GetBitmapNamed(IDR_BUTTON_MASK)); | |
| 566 | |
| 567 reload_->SetImage(views::CustomButton::BS_NORMAL, | 559 reload_->SetImage(views::CustomButton::BS_NORMAL, |
| 568 tp->GetBitmapNamed(IDR_RELOAD)); | 560 tp->GetBitmapNamed(IDR_RELOAD)); |
| 569 reload_->SetImage(views::CustomButton::BS_HOT, | 561 reload_->SetImage(views::CustomButton::BS_HOT, |
| 570 tp->GetBitmapNamed(IDR_RELOAD_H)); | 562 tp->GetBitmapNamed(IDR_RELOAD_H)); |
| 571 reload_->SetImage(views::CustomButton::BS_PUSHED, | 563 reload_->SetImage(views::CustomButton::BS_PUSHED, |
| 572 tp->GetBitmapNamed(IDR_RELOAD_P)); | 564 tp->GetBitmapNamed(IDR_RELOAD_P)); |
| 573 reload_->SetToggledImage(views::CustomButton::BS_NORMAL, | 565 reload_->SetToggledImage(views::CustomButton::BS_NORMAL, |
| 574 tp->GetBitmapNamed(IDR_STOP)); | 566 tp->GetBitmapNamed(IDR_STOP)); |
| 575 reload_->SetToggledImage(views::CustomButton::BS_HOT, | 567 reload_->SetToggledImage(views::CustomButton::BS_HOT, |
| 576 tp->GetBitmapNamed(IDR_STOP_H)); | 568 tp->GetBitmapNamed(IDR_STOP_H)); |
| 577 reload_->SetToggledImage(views::CustomButton::BS_PUSHED, | 569 reload_->SetToggledImage(views::CustomButton::BS_PUSHED, |
| 578 tp->GetBitmapNamed(IDR_STOP_P)); | 570 tp->GetBitmapNamed(IDR_STOP_P)); |
| 579 reload_->SetBackground(color, background, | 571 reload_->SetBackground(color, background, |
| 580 tp->GetBitmapNamed(IDR_BUTTON_MASK)); | 572 tp->GetBitmapNamed(IDR_BUTTON_MASK)); |
| 581 | 573 |
| 574 home_->SetImage(views::CustomButton::BS_NORMAL, tp->GetBitmapNamed(IDR_HOME)); |
| 575 home_->SetImage(views::CustomButton::BS_HOT, tp->GetBitmapNamed(IDR_HOME_H)); |
| 576 home_->SetImage(views::CustomButton::BS_PUSHED, |
| 577 tp->GetBitmapNamed(IDR_HOME_P)); |
| 578 home_->SetBackground(color, background, |
| 579 tp->GetBitmapNamed(IDR_BUTTON_MASK)); |
| 580 |
| 582 app_menu_->SetIcon(GetAppMenuIcon()); | 581 app_menu_->SetIcon(GetAppMenuIcon()); |
| 583 } | 582 } |
| 584 | 583 |
| 585 void ToolbarView::ShowUpgradeReminder() { | 584 void ToolbarView::ShowUpgradeReminder() { |
| 586 update_reminder_animation_.reset(new SlideAnimation(this)); | 585 update_reminder_animation_.reset(new SlideAnimation(this)); |
| 587 update_reminder_animation_->SetSlideDuration(kPulseDuration); | 586 update_reminder_animation_->SetSlideDuration(kPulseDuration); |
| 588 | 587 |
| 589 // Then start the recurring timer for pulsating it. | 588 // Then start the recurring timer for pulsating it. |
| 590 upgrade_reminder_pulse_timer_.Start( | 589 upgrade_reminder_pulse_timer_.Start( |
| 591 base::TimeDelta::FromMilliseconds(kPulsateEveryMs), | 590 base::TimeDelta::FromMilliseconds(kPulsateEveryMs), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 } | 661 } |
| 663 #endif | 662 #endif |
| 664 | 663 |
| 665 // Tell the menu button to activate, opening its pop-up menu. | 664 // Tell the menu button to activate, opening its pop-up menu. |
| 666 menu_button->Activate(); | 665 menu_button->Activate(); |
| 667 | 666 |
| 668 #if defined(OS_WIN) | 667 #if defined(OS_WIN) |
| 669 SetToolbarFocus(NULL, menu_button); | 668 SetToolbarFocus(NULL, menu_button); |
| 670 #endif | 669 #endif |
| 671 } | 670 } |
| OLD | NEW |