172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_INFOBARS_TRANSLATE_INFOBAR_BASE_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_INFOBARS_TRANSLATE_INFOBAR_BASE_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/translate/languages_menu_model.h"
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/translate/translate_infobar_view.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/infobars/infobar_background.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/infobars/infobar_view.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TranslateInfoBarDelegate;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass MenuButton;
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// This class contains some of the base functionality that translate infobars
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// use.
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TranslateInfoBarBase : public TranslateInfoBarView,
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             public InfoBarView {
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  explicit TranslateInfoBarBase(TranslateInfoBarDelegate* delegate);
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~TranslateInfoBarBase();
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static const int kButtonInLabelSpacing;
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // InfoBarView:
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Sets the text of the provided language menu button to reflect the current
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // value from the delegate.
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void UpdateLanguageButtonText(views::MenuButton* button,
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                LanguagesMenuModel::LanguageType language);
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Convenience to retrieve the TranslateInfoBarDelegate for this infobar.
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TranslateInfoBarDelegate* GetDelegate();
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // InfoBarView:
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnPaintBackground(gfx::Canvas* canvas);
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void AnimationProgressed(const ui::Animation* animation);
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the background that should be displayed when not animating.
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const views::Background& GetBackground();
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Paints |background| to |canvas| with the opacity level based on
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // |animation_value|.
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void FadeBackground(gfx::Canvas* canvas,
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                      double animation_value,
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                      const views::Background& background);
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  InfoBarBackground error_background_;
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<ui::SlideAnimation> background_color_animation_;
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TranslateInfoBarBase);
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_INFOBARS_TRANSLATE_INFOBAR_BASE_H_
63