172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 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
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/gtk/infobars/before_translate_infobar_gtk.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/translate/translate_infobar_delegate.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.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
7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool BeforeTranslateInfoBar::ShowOptionsMenuButton() const {
7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return true;
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BeforeTranslateInfoBar::OnLanguageModified(GtkWidget* sender) {
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  size_t index = GetLanguageComboboxActiveId(GTK_COMBO_BOX(sender));
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (index == GetDelegate()->original_language_index())
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return;
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetDelegate()->SetOriginalLanguage(index);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BeforeTranslateInfoBar::OnAcceptPressed(GtkWidget* sender) {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetDelegate()->Translate();
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BeforeTranslateInfoBar::OnDenyPressed(GtkWidget* sender) {
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetDelegate()->TranslationDeclined();
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RemoveInfoBar();
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BeforeTranslateInfoBar::OnNeverTranslatePressed(GtkWidget* sender) {
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetDelegate()->NeverTranslatePageLanguage();
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BeforeTranslateInfoBar::OnAlwaysTranslatePressed(GtkWidget* sender) {
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetDelegate()->AlwaysTranslatePageLanguage();
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
106