1// Copyright 2013 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/translate/translate_bubble_model_impl.h"
6
7#include "chrome/browser/translate/chrome_translate_client.h"
8#include "components/translate/core/browser/language_state.h"
9#include "components/translate/core/browser/translate_ui_delegate.h"
10
11TranslateBubbleModelImpl::TranslateBubbleModelImpl(
12    translate::TranslateStep step,
13    scoped_ptr<translate::TranslateUIDelegate> ui_delegate)
14    : ui_delegate_(ui_delegate.Pass()),
15      view_state_transition_(TranslateStepToViewState(step)) {
16}
17
18TranslateBubbleModelImpl::~TranslateBubbleModelImpl() {
19}
20
21// static
22TranslateBubbleModel::ViewState
23TranslateBubbleModelImpl::TranslateStepToViewState(
24    translate::TranslateStep step) {
25  switch (step) {
26    case translate::TRANSLATE_STEP_BEFORE_TRANSLATE:
27      return TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE;
28    case translate::TRANSLATE_STEP_TRANSLATING:
29      return TranslateBubbleModel::VIEW_STATE_TRANSLATING;
30    case translate::TRANSLATE_STEP_AFTER_TRANSLATE:
31      return TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE;
32    case translate::TRANSLATE_STEP_TRANSLATE_ERROR:
33      return TranslateBubbleModel::VIEW_STATE_ERROR;
34  }
35
36  NOTREACHED();
37  return TranslateBubbleModel::VIEW_STATE_ERROR;
38}
39
40TranslateBubbleModel::ViewState TranslateBubbleModelImpl::GetViewState() const {
41  return view_state_transition_.view_state();
42}
43
44void TranslateBubbleModelImpl::SetViewState(
45    TranslateBubbleModel::ViewState view_state) {
46  view_state_transition_.SetViewState(view_state);
47}
48
49void TranslateBubbleModelImpl::ShowError(
50    translate::TranslateErrors::Type error_type) {
51  ui_delegate_->OnErrorShown(error_type);
52}
53
54void TranslateBubbleModelImpl::GoBackFromAdvanced() {
55  view_state_transition_.GoBackFromAdvanced();
56}
57
58int TranslateBubbleModelImpl::GetNumberOfLanguages() const {
59  return ui_delegate_->GetNumberOfLanguages();
60}
61
62base::string16 TranslateBubbleModelImpl::GetLanguageNameAt(int index) const {
63  return ui_delegate_->GetLanguageNameAt(index);
64}
65
66int TranslateBubbleModelImpl::GetOriginalLanguageIndex() const {
67  return ui_delegate_->GetOriginalLanguageIndex();
68}
69
70void TranslateBubbleModelImpl::UpdateOriginalLanguageIndex(int index) {
71  ui_delegate_->UpdateOriginalLanguageIndex(index);
72}
73
74int TranslateBubbleModelImpl::GetTargetLanguageIndex() const {
75  return ui_delegate_->GetTargetLanguageIndex();
76}
77
78void TranslateBubbleModelImpl::UpdateTargetLanguageIndex(int index) {
79  ui_delegate_->UpdateTargetLanguageIndex(index);
80}
81
82void TranslateBubbleModelImpl::SetNeverTranslateLanguage(bool value) {
83  ui_delegate_->SetLanguageBlocked(value);
84}
85
86void TranslateBubbleModelImpl::SetNeverTranslateSite(bool value) {
87  ui_delegate_->SetSiteBlacklist(value);
88}
89
90bool TranslateBubbleModelImpl::ShouldAlwaysTranslate() const {
91  return ui_delegate_->ShouldAlwaysTranslate();
92}
93
94void TranslateBubbleModelImpl::SetAlwaysTranslate(bool value) {
95  ui_delegate_->SetAlwaysTranslate(value);
96}
97
98void TranslateBubbleModelImpl::Translate() {
99  ui_delegate_->Translate();
100}
101
102void TranslateBubbleModelImpl::RevertTranslation() {
103  ui_delegate_->RevertTranslation();
104}
105
106void TranslateBubbleModelImpl::TranslationDeclined(bool explicitly_closed) {
107  ui_delegate_->TranslationDeclined(explicitly_closed);
108}
109
110bool TranslateBubbleModelImpl::IsPageTranslatedInCurrentLanguages() const {
111  const translate::LanguageState& language_state =
112      ui_delegate_->GetLanguageState();
113  return ui_delegate_->GetOriginalLanguageCode() ==
114      language_state.original_language() &&
115      ui_delegate_->GetTargetLanguageCode() ==
116      language_state.current_language();
117}
118