- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / gtk / infobars / translate_infobar_base_gtk.h
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_UI_GTK_INFOBARS_TRANSLATE_INFOBAR_BASE_GTK_H_
6 #define CHROME_BROWSER_UI_GTK_INFOBARS_TRANSLATE_INFOBAR_BASE_GTK_H_
7
8 #include "base/compiler_specific.h"
9 #include "chrome/browser/ui/gtk/infobars/infobar_gtk.h"
10 #include "ui/gfx/animation/animation_delegate.h"
11
12 class TranslateInfoBarDelegate;
13
14 // This class contains some of the base functionality that translate infobars
15 // use.
16 class TranslateInfoBarBase : public InfoBarGtk {
17  protected:
18   TranslateInfoBarBase(InfoBarService* owner,
19                        TranslateInfoBarDelegate* delegate);
20   virtual ~TranslateInfoBarBase();
21
22   // InfoBarGtk:
23   virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
24   virtual void GetTopColor(InfoBarDelegate::Type type,
25                            double* r, double* g, double* b) OVERRIDE;
26   virtual void GetBottomColor(InfoBarDelegate::Type type,
27                               double* r, double* g, double* b) OVERRIDE;
28   virtual void InitWidgets() OVERRIDE;
29
30   // Sub-classes that want to have the options menu button showing should
31   // override and return true.
32   virtual bool ShowOptionsMenuButton() const;
33
34   // Creates a combobox that displays the languages currently available.
35   // |selected_language| is the language index (as used in the
36   // TranslateInfoBarDelegate) that should be selected initially.
37   // |exclude_language| is the language index of the language that should not be
38   // included in the list (TranslateInfoBarDelegate::kNoIndex means no language
39   // excluded).
40   GtkWidget* CreateLanguageCombobox(size_t selected_language,
41                                     size_t exclude_language);
42
43   // Given an above-constructed combobox, returns the currently selected
44   // language id.
45   static size_t GetLanguageComboboxActiveId(GtkComboBox* combo);
46
47   // Convenience to retrieve the TranslateInfoBarDelegate for this infobar.
48   TranslateInfoBarDelegate* GetDelegate();
49
50  private:
51   // To be able to map from language id <-> entry in the combo box, we
52   // store the language id in the combo box data model in addition to the
53   // displayed name.
54   enum {
55     LANGUAGE_COMBO_COLUMN_ID,
56     LANGUAGE_COMBO_COLUMN_NAME,
57     LANGUAGE_COMBO_COLUMN_COUNT
58   };
59
60   CHROMEGTK_CALLBACK_0(TranslateInfoBarBase, void, OnOptionsClicked);
61
62   // A percentage to average the normal page action background with the error
63   // background. When 0, the infobar background should be pure PAGE_ACTION_TYPE.
64   // When 1, the infobar background should be pure WARNING_TYPE.
65   double background_error_percent_;
66
67   // Changes the color of the background from normal to error color and back.
68   scoped_ptr<gfx::SlideAnimation> background_color_animation_;
69
70   // The model for the current menu displayed.
71   scoped_ptr<ui::MenuModel> menu_model_;
72
73   DISALLOW_COPY_AND_ASSIGN(TranslateInfoBarBase);
74 };
75
76 #endif  // CHROME_BROWSER_UI_GTK_INFOBARS_TRANSLATE_INFOBAR_BASE_GTK_H_