| Index: chrome/browser/views/infobars/after_translate_infobar.cc
|
| diff --git a/chrome/browser/views/infobars/after_translate_infobar.cc b/chrome/browser/views/infobars/after_translate_infobar.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c5c5691d4e27812077a1a804c3e41b289984df17
|
| --- /dev/null
|
| +++ b/chrome/browser/views/infobars/after_translate_infobar.cc
|
| @@ -0,0 +1,170 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/views/infobars/after_translate_infobar.h"
|
| +
|
| +#include "app/l10n_util.h"
|
| +#include "app/resource_bundle.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/translate/options_menu_model.h"
|
| +#include "chrome/browser/translate/translate_infobar_delegate2.h"
|
| +#include "chrome/browser/views/infobars/infobar_button_border.h"
|
| +#include "chrome/browser/views/infobars/infobar_text_button.h"
|
| +#include "grit/app_resources.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "views/controls/button/menu_button.h"
|
| +#include "views/controls/button/text_button.h"
|
| +#include "views/controls/image_view.h"
|
| +#include "views/controls/label.h"
|
| +#include "views/controls/menu/menu_2.h"
|
| +
|
| +AfterTranslateInfoBar::AfterTranslateInfoBar(
|
| + TranslateInfoBarDelegate2* delegate)
|
| + : TranslateInfoBarBase(delegate),
|
| + original_language_menu_model_(delegate, LanguagesMenuModel2::ORIGINAL),
|
| + target_language_menu_model_(delegate, LanguagesMenuModel2::TARGET),
|
| + options_menu_model_(delegate),
|
| + swapped_language_buttons_(false) {
|
| + std::vector<string16> strings;
|
| + TranslateInfoBarDelegate2::GetAfterTranslateStrings(
|
| + &strings, &swapped_language_buttons_);
|
| + DCHECK(strings.size() == 3U);
|
| +
|
| + label_1_ = CreateLabel(strings[0]);
|
| + AddChildView(label_1_);
|
| +
|
| + label_2_ = CreateLabel(strings[1]);
|
| + AddChildView(label_2_);
|
| +
|
| + label_3_ = CreateLabel(strings[2]);
|
| + AddChildView(label_3_);
|
| +
|
| + original_language_menu_button_ = CreateMenuButton(string16(), true, this);
|
| + AddChildView(original_language_menu_button_);
|
| +
|
| + target_language_menu_button_ = CreateMenuButton(string16(), true, this);
|
| + AddChildView(target_language_menu_button_);
|
| +
|
| + options_menu_button_ =
|
| + CreateMenuButton(l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS),
|
| + false, this);
|
| + AddChildView(options_menu_button_);
|
| +
|
| + revert_button_ = InfoBarTextButton::Create(this,
|
| + l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT));
|
| + AddChildView(revert_button_);
|
| +
|
| + UpdateLanguageButtonText(LanguagesMenuModel2::ORIGINAL);
|
| + UpdateLanguageButtonText(LanguagesMenuModel2::TARGET);
|
| +}
|
| +
|
| +AfterTranslateInfoBar::~AfterTranslateInfoBar() {
|
| +}
|
| +
|
| +// Overridden from views::View:
|
| +void AfterTranslateInfoBar::Layout() {
|
| + // Layout the icon and close button.
|
| + TranslateInfoBarBase::Layout();
|
| +
|
| + // Layout the options menu button on right of bar.
|
| + int available_width = InfoBar::GetAvailableWidth();
|
| + gfx::Size pref_size = options_menu_button_->GetPreferredSize();
|
| + options_menu_button_->SetBounds(available_width - pref_size.width(),
|
| + OffsetY(this, pref_size), pref_size.width(), pref_size.height());
|
| +
|
| + views::MenuButton* left_button = swapped_language_buttons_ ?
|
| + target_language_menu_button_ : original_language_menu_button_;
|
| + views::MenuButton* right_button = swapped_language_buttons_ ?
|
| + original_language_menu_button_ : target_language_menu_button_;
|
| +
|
| + pref_size = label_1_->GetPreferredSize();
|
| + label_1_->SetBounds(icon_->bounds().right() + InfoBar::kIconLabelSpacing,
|
| + InfoBar::OffsetY(this, pref_size), pref_size.width(), pref_size.height());
|
| +
|
| + pref_size = left_button->GetPreferredSize();
|
| + left_button->SetBounds(label_1_->bounds().right() +
|
| + InfoBar::kButtonInLabelSpacing, OffsetY(this, pref_size),
|
| + pref_size.width(), pref_size.height());
|
| +
|
| + pref_size = label_2_->GetPreferredSize();
|
| + label_2_->SetBounds(left_button->bounds().right() +
|
| + InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
|
| + pref_size.width(), pref_size.height());
|
| +
|
| + pref_size = right_button->GetPreferredSize();
|
| + right_button->SetBounds(label_2_->bounds().right() +
|
| + InfoBar::kButtonInLabelSpacing, OffsetY(this, pref_size),
|
| + pref_size.width(), pref_size.height());
|
| +
|
| + pref_size = label_3_->GetPreferredSize();
|
| + label_3_->SetBounds(right_button->bounds().right() +
|
| + InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
|
| + pref_size.width(), pref_size.height());
|
| +
|
| + pref_size = revert_button_->GetPreferredSize();
|
| + revert_button_->SetBounds(label_3_->bounds().right() +
|
| + InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
|
| + pref_size.width(), pref_size.height());
|
| +}
|
| +
|
| +void AfterTranslateInfoBar::OriginalLanguageChanged() {
|
| + UpdateLanguageButtonText(LanguagesMenuModel2::ORIGINAL);
|
| +}
|
| +
|
| +void AfterTranslateInfoBar::TargetLanguageChanged() {
|
| + UpdateLanguageButtonText(LanguagesMenuModel2::TARGET);
|
| +}
|
| +
|
| +void AfterTranslateInfoBar::ButtonPressed(views::Button* sender,
|
| + const views::Event& event) {
|
| + if (sender == revert_button_) {
|
| + GetDelegate()->RevertTranslation();
|
| + return;
|
| + }
|
| + TranslateInfoBarBase::ButtonPressed(sender, event);
|
| +}
|
| +
|
| +void AfterTranslateInfoBar::RunMenu(views::View* source,
|
| + const gfx::Point& pt) {
|
| + if (source == original_language_menu_button_) {
|
| + if (!original_language_menu_.get()) {
|
| + original_language_menu_.reset(
|
| + new views::Menu2(&original_language_menu_model_));
|
| + }
|
| + original_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
|
| + } else if (source == target_language_menu_button_) {
|
| + if (!target_language_menu_.get()) {
|
| + target_language_menu_.reset(
|
| + new views::Menu2(&target_language_menu_model_));
|
| + }
|
| + target_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
|
| + } else if (source == options_menu_button_) {
|
| + if (!options_menu_.get())
|
| + options_menu_.reset(new views::Menu2(&options_menu_model_));
|
| + options_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| +void AfterTranslateInfoBar::UpdateLanguageButtonText(
|
| + LanguagesMenuModel2::LanguageType language_type) {
|
| + int language_index;
|
| + views::MenuButton* language_button;
|
| + if (language_type == LanguagesMenuModel2::ORIGINAL) {
|
| + language_index = GetDelegate()->original_language_index();
|
| + language_button = original_language_menu_button_;
|
| + } else {
|
| + language_index = GetDelegate()->target_language_index();
|
| + language_button = target_language_menu_button_;
|
| + }
|
| + string16 language =
|
| + GetDelegate()->GetLanguageDisplayableNameAt(language_index);
|
| + language_button->SetText(UTF16ToWideHack(language));
|
| + // The following line is necessary for the preferred size to be recomputed.
|
| + language_button->ClearMaxTextSize();
|
| + // The button may have to grow to show the new text.
|
| + Layout();
|
| + SchedulePaint();
|
| +}
|
|
|