Index: chrome/browser/views/infobars/before_translate_infobar.cc |
diff --git a/chrome/browser/views/infobars/before_translate_infobar.cc b/chrome/browser/views/infobars/before_translate_infobar.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ccc47514bf5a16c1585f1d661c5c79262eb08062 |
--- /dev/null |
+++ b/chrome/browser/views/infobars/before_translate_infobar.cc |
@@ -0,0 +1,137 @@ |
+// 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/before_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_text_button.h" |
+#include "grit/generated_resources.h" |
+#include "views/controls/button/menu_button.h" |
+#include "views/controls/image_view.h" |
+#include "views/controls/menu/menu_2.h" |
+ |
+BeforeTranslateInfoBar::BeforeTranslateInfoBar( |
+ TranslateInfoBarDelegate2* delegate) |
+ : TranslateInfoBarBase(delegate), |
+ languages_menu_model_(delegate, LanguagesMenuModel2::ORIGINAL), |
+ options_menu_model_(delegate) { |
+ size_t offset = 0; |
+ string16 text = |
+ l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE, |
+ string16(), &offset); |
+ |
+ label_1_ = CreateLabel(text.substr(0, offset)); |
+ AddChildView(label_1_); |
+ |
+ label_2_ = CreateLabel(text.substr(offset)); |
+ AddChildView(label_2_); |
+ |
+ accept_button_ = |
+ InfoBarTextButton::CreateWithMessageID(this, |
+ IDS_TRANSLATE_INFOBAR_ACCEPT); |
+ AddChildView(accept_button_); |
+ |
+ deny_button_ = |
+ InfoBarTextButton::CreateWithMessageID(this, |
+ IDS_TRANSLATE_INFOBAR_DENY); |
+ AddChildView(deny_button_); |
+ |
+ language_menu_button_ = CreateMenuButton(string16(), true, this); |
+ AddChildView(language_menu_button_); |
+ |
+ options_menu_button_ = |
+ CreateMenuButton(l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), |
+ false, this); |
+ AddChildView(options_menu_button_); |
+ |
+ UpdateOriginalButtonText(); |
+} |
+ |
+BeforeTranslateInfoBar::~BeforeTranslateInfoBar() { |
+} |
+ |
+// Overridden from views::View: |
+void BeforeTranslateInfoBar::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()); |
+ |
+ 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 = language_menu_button_->GetPreferredSize(); |
+ language_menu_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(language_menu_button_->bounds().right() + |
+ InfoBar::kButtonInLabelSpacing , InfoBar::OffsetY(this, pref_size), |
+ pref_size.width(), pref_size.height()); |
+ |
+ pref_size = accept_button_->GetPreferredSize(); |
+ accept_button_->SetBounds( |
+ label_2_->bounds().right() + InfoBar::kEndOfLabelSpacing, |
+ OffsetY(this, pref_size), pref_size.width(), pref_size.height()); |
+ |
+ pref_size = deny_button_->GetPreferredSize(); |
+ deny_button_->SetBounds( |
+ accept_button_->bounds().right() + InfoBar::kButtonButtonSpacing, |
+ OffsetY(this, pref_size), pref_size.width(), pref_size.height()); |
+} |
+ |
+void BeforeTranslateInfoBar::ButtonPressed(views::Button* sender, |
+ const views::Event& event) { |
+ if (sender == accept_button_) { |
+ GetDelegate()->Translate(); |
+ } else if (sender == deny_button_) { |
+ Close(); |
+ } else { |
+ TranslateInfoBarBase::ButtonPressed(sender, event); |
+ } |
+} |
+ |
+void BeforeTranslateInfoBar::OriginalLanguageChanged() { |
+ UpdateOriginalButtonText(); |
+} |
+ |
+void BeforeTranslateInfoBar::TargetLanguageChanged() { |
+ NOTREACHED(); |
+} |
+ |
+void BeforeTranslateInfoBar::RunMenu(views::View* source, |
+ const gfx::Point& pt) { |
+ if (source == language_menu_button_) { |
+ if (!languages_menu_.get()) |
+ languages_menu_.reset(new views::Menu2(&languages_menu_model_)); |
+ languages_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 BeforeTranslateInfoBar::UpdateOriginalButtonText() { |
+ string16 language = GetDelegate()->GetLanguageDisplayableNameAt( |
+ GetDelegate()->original_language_index()); |
+ language_menu_button_->SetText(UTF16ToWideHack(language)); |
+ // The following line is necessary for the preferred size to be recomputed. |
+ language_menu_button_->ClearMaxTextSize(); |
+ // The button may have to grow to show the new text. |
+ Layout(); |
+ SchedulePaint(); |
+} |