Home | History | Annotate | Download | only in infobars
      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