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