summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/infobars/translate_infobars.h
blob: ae2d5124371ad01506eaa56c5532e019590ec948 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// 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_VIEWS_INFOBARS_TRANSLATE_INFOBARS_H_
#define CHROME_BROWSER_VIEWS_INFOBARS_TRANSLATE_INFOBARS_H_

#include "app/menus/simple_menu_model.h"
#include "chrome/browser/translate/translate_infobars_delegates.h"
#include "chrome/browser/views/infobars/infobars.h"
#include "views/controls/menu/view_menu_delegate.h"
#include "views/controls/menu/menu_2.h"

namespace views {
class ImageButton;
class ImageView;
class Label;
class MenuButton;
}
class LanguagesMenuModel;
class OptionsMenuModel;
class TranslateTextButton;

// This file contains implementations for infobars for the Translate feature.

class TranslateInfoBar : public InfoBar,
                         public views::ViewMenuDelegate,
                         public menus::SimpleMenuModel::Delegate {
 public:
  TranslateInfoBar(TranslateInfoBarDelegate* delegate, bool before_translate,
      int label_id);
  virtual ~TranslateInfoBar();

  // Overridden from views::View:
  virtual void Layout();

  // Overridden from views::MenuDelegate:
  virtual void RunMenu(views::View* source, const gfx::Point& pt);

  // Overridden from menus::SimpleMenuModel::Delegate:
  virtual bool IsCommandIdChecked(int command_id) const;
  virtual bool IsCommandIdEnabled(int command_id) const;
  virtual bool GetAcceleratorForCommandId(int command_id,
      menus::Accelerator* accelerator);
  virtual void ExecuteCommand(int command_id);

 protected:
  views::MenuButton* CreateMenuButton(int menu_id, const std::wstring& label);
  gfx::Point DetermineMenuPositionAndAlignment(views::MenuButton* menu_button,
      views::Menu2::Alignment* alignment);
  void OnLanguageModified(views::MenuButton* menu_button,
      const string16& new_language);
  TranslateInfoBarDelegate* GetDelegate() const;

  // Overridden from InfoBar:
  virtual int GetAvailableWidth() const;

  // Returns the leftmost position that subclasses can position their controls.
  virtual int GetAvailableX() const;

  virtual views::MenuButton* target_language_menu_button() {
    return NULL;
  }

 private:
  bool before_translate_;
  views::ImageView* icon_;
  views::Label* label_1_;
  views::Label* label_2_;
  views::Label* label_3_;
  views::MenuButton* original_language_menu_button_;
  views::MenuButton* options_menu_button_;

  scoped_ptr<LanguagesMenuModel> original_language_menu_model_;
  scoped_ptr<OptionsMenuModel> options_menu_model_;

  scoped_ptr<views::Menu2> original_language_menu_menu_;
  scoped_ptr<views::Menu2> options_menu_menu_;

  // This is true if language placeholders in label have been swapped.
  bool swapped_language_placeholders_;

  DISALLOW_COPY_AND_ASSIGN(TranslateInfoBar);
};

class BeforeTranslateInfoBar : public TranslateInfoBar {
 public:
  explicit BeforeTranslateInfoBar(BeforeTranslateInfoBarDelegate* delegate);
  virtual ~BeforeTranslateInfoBar();

  // Overridden from views::View:
  virtual void Layout();

 protected:
  // Overridden from views::ButtonListener:
  virtual void ButtonPressed(views::Button* sender, const views::Event& event);

  // Overridden from InfoBar:
  virtual int GetAvailableWidth() const;

 private:
  TranslateTextButton* accept_button_;
  TranslateTextButton* deny_button_;

  DISALLOW_COPY_AND_ASSIGN(BeforeTranslateInfoBar);
};

class AfterTranslateInfoBar : public TranslateInfoBar {
 public:
  explicit AfterTranslateInfoBar(AfterTranslateInfoBarDelegate* delegate);
  virtual ~AfterTranslateInfoBar();

  // Overridden from views::MenuDelegate:
  virtual void RunMenu(views::View* source, const gfx::Point& pt);

  // Overridden from menus::SimpleMenuModel::Delegate:
  virtual void ExecuteCommand(int command_id);

 protected:
  // Overridden from InfoBar:
  virtual int GetAvailableWidth() const;

  virtual views::MenuButton* target_language_menu_button() {
    return target_language_menu_button_;
  }

 private:
  views::MenuButton* target_language_menu_button_;

  scoped_ptr<LanguagesMenuModel> target_language_menu_model_;

  scoped_ptr<views::Menu2> target_language_menu_menu_;

  DISALLOW_COPY_AND_ASSIGN(AfterTranslateInfoBar);
};

#endif  // CHROME_BROWSER_VIEWS_INFOBARS_TRANSLATE_INFOBARS_H_