summaryrefslogtreecommitdiffstats
path: root/chrome/browser/translate/translate_infobar_delegate2.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/translate/translate_infobar_delegate2.h')
-rw-r--r--chrome/browser/translate/translate_infobar_delegate2.h178
1 files changed, 178 insertions, 0 deletions
diff --git a/chrome/browser/translate/translate_infobar_delegate2.h b/chrome/browser/translate/translate_infobar_delegate2.h
new file mode 100644
index 0000000..2129776
--- /dev/null
+++ b/chrome/browser/translate/translate_infobar_delegate2.h
@@ -0,0 +1,178 @@
+// 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.
+
+#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE2_H
+#define CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE2_H
+
+#include <string>
+#include <vector>
+
+#include "chrome/browser/tab_contents/infobar_delegate.h"
+#include "chrome/browser/translate/translate_prefs.h"
+#include "chrome/common/translate_errors.h"
+
+class SkBitmap;
+class TranslateInfoBarView;
+
+class TranslateInfoBarDelegate2 : public InfoBarDelegate {
+ public:
+ // The different types of infobars that can be shown for translation.
+ enum Type {
+ BEFORE_TRANSLATE,
+ TRANSLATING,
+ AFTER_TRANSLATE,
+ TRANSLATION_ERROR
+ };
+
+ // The types of background color animations.
+ enum BackgroundAnimationType {
+ NONE,
+ NORMAL_TO_ERROR,
+ ERROR_TO_NORMAL
+ };
+
+ // Factory method.
+ // The original and target language specified are the ASCII language codes
+ // (ex: en, fr...).
+ // Returns NULL if it failed, typically if |original_language| or
+ // |target_language| is not a supported language.
+ // |error| should be set to NONE if |infobar_type| is not TRANSLATION_ERROR.
+ static TranslateInfoBarDelegate2* CreateInstance(
+ Type infobar_type,
+ TranslateErrors::Type error,
+ TabContents* tab_contents,
+ const std::string& original_language,
+ const std::string& target_language);
+
+ // Returns the number of languages supported.
+ int GetLanguageCount() const;
+
+ // Returns the ISO code for the language at |index|.
+ const std::string& GetLanguageCodeAt(int index) const;
+
+ // Returns the displayable name for the language at |index|.
+ const string16& GetLanguageDisplayableNameAt(int index) const;
+
+ TabContents* tab_contents() const { return tab_contents_; }
+
+ Type type() const { return type_; }
+
+ int original_language_index() const { return original_language_index_; }
+ int target_language_index() const { return target_language_index_; }
+
+ // Convenience methods.
+ const std::string& GetOriginalLanguageCode() const;
+ const std::string& GetTargetLanguageCode() const;
+
+ // Called by the InfoBar to notify that the original/target language has
+ // changed and is now the language at |language_index|.
+ virtual void SetOriginalLanguage(int language_index);
+ virtual void SetTargetLanguage(int language_index);
+
+ // Returns true if the current infobar indicates an error (in which case it
+ // should get a yellow background instead of a blue one).
+ bool IsError();
+
+ // Returns what kind of background fading effect the infobar should use when
+ // its is shown.
+ BackgroundAnimationType background_animation_type() const {
+ return background_animation_;
+ }
+
+ virtual void Translate();
+ virtual void RevertTranslation();
+
+ // Called when the user declines to translate a page, by either closing the
+ // infobar or pressing the "Don't translate" button.
+ void TranslationDeclined();
+
+ // InfoBarDelegate implementation:
+ virtual InfoBar* CreateInfoBar();
+ void InfoBarDismissed();
+ virtual SkBitmap* GetIcon() const;
+ virtual InfoBarDelegate::Type GetInfoBarType();
+ virtual TranslateInfoBarDelegate2* AsTranslateInfoBarDelegate2() {
+ return this;
+ }
+
+ // Methods called by the Options menu delegate.
+ virtual bool IsLanguageBlacklisted();
+ virtual void ToggleLanguageBlacklist();
+ virtual bool IsSiteBlacklisted();
+ virtual void ToggleSiteBlacklist();
+ virtual bool ShouldAlwaysTranslate();
+ virtual void ToggleAlwaysTranslate();
+
+ // The following methods are called by the infobar that displays the status
+ // while translating and also the one displaying the error message.
+ string16 GetMessageInfoBarText();
+ string16 GetMessageInfoBarButtonText();
+ void MessageInfoBarButtonPressed();
+
+ // Sets this infobar background animation based on the previous infobar shown.
+ // A fading background effect is used when transitioning from a normal state
+ // to an error state (and vice-versa).
+ void UpdateBackgroundAnimation(TranslateInfoBarDelegate2* previous_infobar);
+
+ // Convenience method that returns the displayable language name for
+ // |language_code| in the current application locale.
+ static string16 GetLanguageDisplayableName(const std::string& language_code);
+
+ // Adds the strings that should be displayed in the after translate infobar to
+ // |strings|. The text in that infobar is:
+ // "The page has been translated from <lang1> to <lang2>."
+ // Because <lang1> and <lang2> are displayed in menu buttons, the text is
+ // split in 3 chunks. |swap_languages| is set to true if <lang1> and <lang2>
+ // should be inverted (some languages express the sentense as "The page has
+ // been translate to <lang2> from <lang1>.").
+ static void GetAfterTranslateStrings(std::vector<string16>* strings,
+ bool* swap_languages);
+
+ private:
+ typedef std::pair<std::string, string16> LanguageNamePair;
+
+ // Gets the host of the page being translated, or an empty string if no URL is
+ // associated with the current page.
+ std::string GetPageHost();
+
+ TranslateInfoBarDelegate2(Type infobar_type,
+ TranslateErrors::Type error,
+ TabContents* tab_contents,
+ const std::string& original_language,
+ const std::string& target_language);
+
+ Type type_;
+
+ // The type of fading animation if any that should be used when showing this
+ // infobar.
+ BackgroundAnimationType background_animation_;
+
+ TabContents* tab_contents_;
+
+ // The list supported languages for translation.
+ // The pair first string is the language ISO code (ex: en, fr...), the second
+ // string is the displayable name on the current locale.
+ // The languages are sorted alphabetically based on the displayable name.
+ std::vector<LanguageNamePair> languages_;
+
+ // The index for language the page is originally in.
+ int original_language_index_;
+
+ // The index for language the page should be translated to.
+ int target_language_index_;
+
+ // The error that occurred when trying to translate (NONE if no error).
+ TranslateErrors::Type error_;
+
+ // The current infobar view.
+ TranslateInfoBarView* infobar_view_;
+
+ // The translation related preferences.
+ TranslatePrefs prefs_;
+
+ DISALLOW_COPY_AND_ASSIGN(TranslateInfoBarDelegate2);
+};
+
+#endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE2_H
+