| Index: chrome/browser/gtk/translate/translate_infobar_base_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/translate/translate_infobar_base_gtk.cc (revision 71352)
|
| +++ chrome/browser/gtk/translate/translate_infobar_base_gtk.cc (working copy)
|
| @@ -1,241 +0,0 @@
|
| -// 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/gtk/translate/translate_infobar_base_gtk.h"
|
| -
|
| -#include "app/l10n_util.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/translate/options_menu_model.h"
|
| -#include "chrome/browser/translate/translate_infobar_delegate.h"
|
| -#include "chrome/browser/gtk/translate/after_translate_infobar_gtk.h"
|
| -#include "chrome/browser/gtk/translate/before_translate_infobar_gtk.h"
|
| -#include "chrome/browser/gtk/translate/translate_message_infobar_gtk.h"
|
| -#include "chrome/browser/gtk/gtk_util.h"
|
| -#include "chrome/browser/gtk/menu_gtk.h"
|
| -#include "gfx/canvas.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "ui/base/animation/slide_animation.h"
|
| -
|
| -namespace {
|
| -
|
| -// To be able to map from language id <-> entry in the combo box, we
|
| -// store the language id in the combo box data model in addition to the
|
| -// displayed name.
|
| -enum {
|
| - LANGUAGE_COMBO_COLUMN_ID,
|
| - LANGUAGE_COMBO_COLUMN_NAME,
|
| - LANGUAGE_COMBO_COLUMN_COUNT
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TranslateInfoBarBase::TranslateInfoBarBase(TranslateInfoBarDelegate* delegate)
|
| - : InfoBar(delegate) {
|
| - TranslateInfoBarDelegate::BackgroundAnimationType animation =
|
| - delegate->background_animation_type();
|
| - if (animation != TranslateInfoBarDelegate::NONE) {
|
| - background_color_animation_.reset(new ui::SlideAnimation(this));
|
| - background_color_animation_->SetTweenType(ui::Tween::LINEAR);
|
| - background_color_animation_->SetSlideDuration(500);
|
| - if (animation == TranslateInfoBarDelegate::NORMAL_TO_ERROR) {
|
| - background_color_animation_->Show();
|
| - } else {
|
| - DCHECK_EQ(TranslateInfoBarDelegate::ERROR_TO_NORMAL, animation);
|
| - // Hide() runs the animation in reverse.
|
| - background_color_animation_->Reset(1.0);
|
| - background_color_animation_->Hide();
|
| - }
|
| - } else {
|
| - background_error_percent_ = delegate->IsError() ? 1 : 0;
|
| - }
|
| -}
|
| -
|
| -TranslateInfoBarBase::~TranslateInfoBarBase() {
|
| -}
|
| -
|
| -void TranslateInfoBarBase::Init() {
|
| - if (!ShowOptionsMenuButton())
|
| - return;
|
| -
|
| - // The options button sits outside the translate_box so that it can be end
|
| - // packed in hbox_.
|
| - GtkWidget* options_menu_button = BuildOptionsMenuButton();
|
| - g_signal_connect(options_menu_button, "clicked",
|
| - G_CALLBACK(&OnOptionsClickedThunk), this);
|
| - gtk_widget_show_all(options_menu_button);
|
| - gtk_util::CenterWidgetInHBox(hbox_, options_menu_button, true, 0);
|
| -}
|
| -
|
| -void TranslateInfoBarBase::GetTopColor(InfoBarDelegate::Type type,
|
| - double* r, double* g, double *b) {
|
| - if (background_error_percent_ <= 0) {
|
| - InfoBar::GetTopColor(InfoBarDelegate::PAGE_ACTION_TYPE, r, g, b);
|
| - } else if (background_error_percent_ >= 1) {
|
| - InfoBar::GetTopColor(InfoBarDelegate::WARNING_TYPE, r, g, b);
|
| - } else {
|
| - double normal_r, normal_g, normal_b;
|
| - InfoBar::GetTopColor(InfoBarDelegate::PAGE_ACTION_TYPE,
|
| - &normal_r, &normal_g, &normal_b);
|
| -
|
| - double error_r, error_g, error_b;
|
| - InfoBar::GetTopColor(InfoBarDelegate::WARNING_TYPE,
|
| - &error_r, &error_g, &error_b);
|
| -
|
| - double offset_r = error_r - normal_r;
|
| - double offset_g = error_g - normal_g;
|
| - double offset_b = error_b - normal_b;
|
| -
|
| - *r = normal_r + (background_error_percent_ * offset_r);
|
| - *g = normal_g + (background_error_percent_ * offset_g);
|
| - *b = normal_b + (background_error_percent_ * offset_b);
|
| - }
|
| -}
|
| -
|
| -void TranslateInfoBarBase::GetBottomColor(InfoBarDelegate::Type type,
|
| - double* r, double* g, double *b) {
|
| - if (background_error_percent_ <= 0) {
|
| - InfoBar::GetBottomColor(InfoBarDelegate::PAGE_ACTION_TYPE, r, g, b);
|
| - } else if (background_error_percent_ >= 1) {
|
| - InfoBar::GetBottomColor(InfoBarDelegate::WARNING_TYPE, r, g, b);
|
| - } else {
|
| - double normal_r, normal_g, normal_b;
|
| - InfoBar::GetBottomColor(InfoBarDelegate::PAGE_ACTION_TYPE,
|
| - &normal_r, &normal_g, &normal_b);
|
| -
|
| - double error_r, error_g, error_b;
|
| - InfoBar::GetBottomColor(InfoBarDelegate::WARNING_TYPE,
|
| - &error_r, &error_g, &error_b);
|
| -
|
| - double offset_r = error_r - normal_r;
|
| - double offset_g = error_g - normal_g;
|
| - double offset_b = error_b - normal_b;
|
| -
|
| - *r = normal_r + (background_error_percent_ * offset_r);
|
| - *g = normal_g + (background_error_percent_ * offset_g);
|
| - *b = normal_b + (background_error_percent_ * offset_b);
|
| - }
|
| -}
|
| -
|
| -void TranslateInfoBarBase::AnimationProgressed(const ui::Animation* animation) {
|
| - DCHECK(animation == background_color_animation_.get());
|
| - background_error_percent_ = animation->GetCurrentValue();
|
| - // Queue the info bar widget for redisplay so it repaints its background.
|
| - gtk_widget_queue_draw(widget());
|
| -}
|
| -
|
| -bool TranslateInfoBarBase::ShowOptionsMenuButton() const {
|
| - return false;
|
| -}
|
| -
|
| -GtkWidget* TranslateInfoBarBase::CreateLabel(const std::string& text) {
|
| - GtkWidget* label = gtk_label_new(text.c_str());
|
| - gtk_widget_modify_fg(label, GTK_STATE_NORMAL, >k_util::kGdkBlack);
|
| - return label;
|
| -}
|
| -
|
| -GtkWidget* TranslateInfoBarBase::CreateLanguageCombobox(int selected_language,
|
| - int exclude_language) {
|
| - GtkListStore* model = gtk_list_store_new(LANGUAGE_COMBO_COLUMN_COUNT,
|
| - G_TYPE_INT, G_TYPE_STRING);
|
| - bool set_selection = false;
|
| - GtkTreeIter selected_iter;
|
| - TranslateInfoBarDelegate* delegate = GetDelegate();
|
| - for (int i = 0; i < delegate->GetLanguageCount(); ++i) {
|
| - if (i == exclude_language)
|
| - continue;
|
| - GtkTreeIter tree_iter;
|
| - const string16& name = delegate->GetLanguageDisplayableNameAt(i);
|
| -
|
| - gtk_list_store_append(model, &tree_iter);
|
| - gtk_list_store_set(model, &tree_iter,
|
| - LANGUAGE_COMBO_COLUMN_ID, i,
|
| - LANGUAGE_COMBO_COLUMN_NAME, UTF16ToUTF8(name).c_str(),
|
| - -1);
|
| - if (i == selected_language) {
|
| - selected_iter = tree_iter;
|
| - set_selection = true;
|
| - }
|
| - }
|
| -
|
| - GtkWidget* combobox = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
|
| - if (set_selection)
|
| - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combobox), &selected_iter);
|
| - g_object_unref(model);
|
| - GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
|
| - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, TRUE);
|
| - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), renderer,
|
| - "text", LANGUAGE_COMBO_COLUMN_NAME,
|
| - NULL);
|
| - return combobox;
|
| -}
|
| -
|
| -// static
|
| -int TranslateInfoBarBase::GetLanguageComboboxActiveId(GtkComboBox* combo) {
|
| - GtkTreeIter iter;
|
| - if (!gtk_combo_box_get_active_iter(combo, &iter))
|
| - return 0;
|
| -
|
| - gint id = 0;
|
| - gtk_tree_model_get(gtk_combo_box_get_model(combo), &iter,
|
| - LANGUAGE_COMBO_COLUMN_ID, &id,
|
| - -1);
|
| - return id;
|
| -}
|
| -
|
| -TranslateInfoBarDelegate* TranslateInfoBarBase::GetDelegate() const {
|
| - return static_cast<TranslateInfoBarDelegate*>(delegate());
|
| -}
|
| -
|
| -// static
|
| -GtkWidget* TranslateInfoBarBase::BuildOptionsMenuButton() {
|
| - GtkWidget* button = gtk_button_new();
|
| - GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(button));
|
| - if (former_child)
|
| - gtk_container_remove(GTK_CONTAINER(button), former_child);
|
| -
|
| - GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
|
| -
|
| - GtkWidget* label = gtk_label_new(
|
| - l10n_util::GetStringUTF8(IDS_TRANSLATE_INFOBAR_OPTIONS).c_str());
|
| - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
|
| -
|
| - GtkWidget* arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE);
|
| - gtk_box_pack_start(GTK_BOX(hbox), arrow, FALSE, FALSE, 0);
|
| -
|
| - gtk_container_add(GTK_CONTAINER(button), hbox);
|
| -
|
| - return button;
|
| -}
|
| -
|
| -void TranslateInfoBarBase::OnOptionsClicked(GtkWidget* sender) {
|
| - if (!options_menu_model_.get()) {
|
| - options_menu_model_.reset(new OptionsMenuModel(GetDelegate()));
|
| - options_menu_menu_.reset(new MenuGtk(NULL, options_menu_model_.get()));
|
| - }
|
| - options_menu_menu_->Popup(sender, 1, gtk_get_current_event_time());
|
| -}
|
| -
|
| -// TranslateInfoBarDelegate specific method:
|
| -InfoBar* TranslateInfoBarDelegate::CreateInfoBar() {
|
| - TranslateInfoBarBase* infobar = NULL;
|
| - switch (type_) {
|
| - case BEFORE_TRANSLATE:
|
| - infobar = new BeforeTranslateInfoBar(this);
|
| - break;
|
| - case AFTER_TRANSLATE:
|
| - infobar = new AfterTranslateInfoBar(this);
|
| - break;
|
| - case TRANSLATING:
|
| - case TRANSLATION_ERROR:
|
| - infobar = new TranslateMessageInfoBar(this);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - infobar->Init();
|
| - // Set |infobar_view_| so that the model can notify the infobar when it
|
| - // changes.
|
| - infobar_view_ = infobar;
|
| - return infobar;
|
| -}
|
|
|