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/views/infobars/translate_language_menu_model.h" 6 7 #include "base/metrics/histogram.h" 8 #include "chrome/browser/translate/translate_infobar_delegate.h" 9 #include "chrome/browser/ui/views/infobars/translate_infobar_base.h" 10 11 TranslateLanguageMenuModel::TranslateLanguageMenuModel( 12 LanguageType language_type, 13 TranslateInfoBarDelegate* infobar_delegate, 14 TranslateInfoBarBase* infobar, 15 views::MenuButton* button, 16 bool translate_on_change) 17 : ui::SimpleMenuModel(this), 18 language_type_(language_type), 19 infobar_delegate_(infobar_delegate), 20 infobar_(infobar), 21 button_(button), 22 translate_on_change_(translate_on_change) { 23 for (size_t i = 0; i < infobar_delegate_->num_languages(); ++i) 24 AddCheckItem(static_cast<int>(i), infobar_delegate_->language_name_at(i)); 25 } 26 27 TranslateLanguageMenuModel::~TranslateLanguageMenuModel() { 28 } 29 30 bool TranslateLanguageMenuModel::IsCommandIdChecked(int command_id) const { 31 return static_cast<size_t>(command_id) == GetLanguageIndex(); 32 } 33 34 bool TranslateLanguageMenuModel::IsCommandIdEnabled(int command_id) const { 35 // Prevent the same language from being selectable in original and target. 36 return static_cast<size_t>(command_id) != ((language_type_ == ORIGINAL) ? 37 infobar_delegate_->target_language_index() : 38 infobar_delegate_->original_language_index()); 39 } 40 41 bool TranslateLanguageMenuModel::GetAcceleratorForCommandId( 42 int command_id, 43 ui::Accelerator* accelerator) { 44 return false; 45 } 46 47 void TranslateLanguageMenuModel::ExecuteCommand(int command_id, 48 int event_flags) { 49 size_t command_id_size_t = static_cast<size_t>(command_id); 50 if (language_type_ == ORIGINAL) { 51 UMA_HISTOGRAM_BOOLEAN("Translate.ModifyOriginalLang", true); 52 infobar_delegate_->set_original_language_index(command_id_size_t); 53 } else { 54 UMA_HISTOGRAM_BOOLEAN("Translate.ModifyTargetLang", true); 55 infobar_delegate_->set_target_language_index(command_id_size_t); 56 } 57 infobar_->UpdateLanguageButtonText(button_, 58 infobar_delegate_->language_name_at(GetLanguageIndex())); 59 if (translate_on_change_) 60 infobar_delegate_->Translate(); 61 } 62 63 size_t TranslateLanguageMenuModel::GetLanguageIndex() const { 64 return (language_type_ == ORIGINAL) ? 65 infobar_delegate_->original_language_index() : 66 infobar_delegate_->target_language_index(); 67 } 68