1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/gtk/infobars/before_translate_infobar_gtk.h" 6 7#include "base/utf_string_conversions.h" 8#include "chrome/browser/translate/translate_infobar_delegate.h" 9#include "chrome/browser/ui/gtk/gtk_util.h" 10#include "grit/generated_resources.h" 11#include "ui/base/l10n/l10n_util.h" 12 13BeforeTranslateInfoBar::BeforeTranslateInfoBar( 14 TranslateInfoBarDelegate* delegate) 15 : TranslateInfoBarBase(delegate) { 16} 17 18BeforeTranslateInfoBar::~BeforeTranslateInfoBar() { 19} 20 21void BeforeTranslateInfoBar::Init() { 22 TranslateInfoBarBase::Init(); 23 24 GtkWidget* hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing); 25 gtk_util::CenterWidgetInHBox(hbox_, hbox, false, 0); 26 size_t offset = 0; 27 string16 text = 28 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE, 29 string16(), &offset); 30 31 gtk_box_pack_start(GTK_BOX(hbox), 32 CreateLabel(UTF16ToUTF8(text.substr(0, offset))), 33 FALSE, FALSE, 0); 34 GtkWidget* combobox = 35 CreateLanguageCombobox(GetDelegate()->original_language_index(), 36 GetDelegate()->target_language_index()); 37 g_signal_connect(combobox, "changed", 38 G_CALLBACK(&OnLanguageModifiedThunk), this); 39 gtk_box_pack_start(GTK_BOX(hbox), combobox, FALSE, FALSE, 0); 40 gtk_box_pack_start(GTK_BOX(hbox), 41 CreateLabel(UTF16ToUTF8(text.substr(offset))), 42 FALSE, FALSE, 0); 43 44 GtkWidget* button = gtk_button_new_with_label( 45 l10n_util::GetStringUTF8(IDS_TRANSLATE_INFOBAR_ACCEPT).c_str()); 46 g_signal_connect(button, "clicked",G_CALLBACK(&OnAcceptPressedThunk), this); 47 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 48 49 button = gtk_button_new_with_label( 50 l10n_util::GetStringUTF8(IDS_TRANSLATE_INFOBAR_DENY).c_str()); 51 g_signal_connect(button, "clicked",G_CALLBACK(&OnDenyPressedThunk), this); 52 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 53 54 TranslateInfoBarDelegate* delegate = GetDelegate(); 55 if (delegate->ShouldShowNeverTranslateButton()) { 56 std::string label = 57 l10n_util::GetStringFUTF8(IDS_TRANSLATE_INFOBAR_NEVER_TRANSLATE, 58 delegate->GetLanguageDisplayableNameAt( 59 delegate->original_language_index())); 60 button = gtk_button_new_with_label(label.c_str()); 61 g_signal_connect(button, "clicked", 62 G_CALLBACK(&OnNeverTranslatePressedThunk), this); 63 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 64 } 65 66 if (delegate->ShouldShowAlwaysTranslateButton()) { 67 std::string label = 68 l10n_util::GetStringFUTF8(IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, 69 delegate->GetLanguageDisplayableNameAt( 70 delegate->original_language_index())); 71 button = gtk_button_new_with_label(label.c_str()); 72 g_signal_connect(button, "clicked", 73 G_CALLBACK(&OnAlwaysTranslatePressedThunk), this); 74 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 75 } 76} 77 78bool BeforeTranslateInfoBar::ShowOptionsMenuButton() const { 79 return true; 80} 81 82void BeforeTranslateInfoBar::OnLanguageModified(GtkWidget* sender) { 83 size_t index = GetLanguageComboboxActiveId(GTK_COMBO_BOX(sender)); 84 if (index == GetDelegate()->original_language_index()) 85 return; 86 87 GetDelegate()->SetOriginalLanguage(index); 88} 89 90void BeforeTranslateInfoBar::OnAcceptPressed(GtkWidget* sender) { 91 GetDelegate()->Translate(); 92} 93 94void BeforeTranslateInfoBar::OnDenyPressed(GtkWidget* sender) { 95 GetDelegate()->TranslationDeclined(); 96 RemoveInfoBar(); 97} 98 99void BeforeTranslateInfoBar::OnNeverTranslatePressed(GtkWidget* sender) { 100 GetDelegate()->NeverTranslatePageLanguage(); 101} 102 103void BeforeTranslateInfoBar::OnAlwaysTranslatePressed(GtkWidget* sender) { 104 GetDelegate()->AlwaysTranslatePageLanguage(); 105} 106