1// Copyright (c) 2011 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_CHROMEOS_LOGIN_LANGUAGE_SWITCH_MENU_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_LANGUAGE_SWITCH_MENU_H_
7#pragma once
8
9#include <string>
10
11#include "base/memory/scoped_ptr.h"
12#include "chrome/browser/language_combobox_model.h"
13#include "testing/gtest/include/gtest/gtest_prod.h"
14#include "ui/base/models/simple_menu_model.h"
15#include "views/controls/menu/menu_2.h"
16#include "views/controls/menu/view_menu_delegate.h"
17#include "views/view.h"
18
19class WizardControllerTest_SwitchLanguage_Test;
20
21namespace chromeos {
22
23class ScreenObserver;
24
25class LanguageSwitchMenu : public views::ViewMenuDelegate,
26                           public ui::SimpleMenuModel::Delegate {
27 public:
28  LanguageSwitchMenu();
29
30  // Initializes language selection menu contents.
31  void InitLanguageMenu();
32
33  // Sets menu's alignment.
34  void set_menu_alignment(views::Menu2::Alignment alignment) {
35    menu_alignment_ = alignment;
36  }
37
38  // Returns current locale name to be placed on the language menu-button.
39  string16 GetCurrentLocaleName() const;
40
41  // Sets the minimum width of the first level menu to be shown.
42  void SetFirstLevelMenuWidth(int width);
43
44  // Switches the current locale, saves the new locale in preferences.
45  // Returns true if it has switched the current locale.
46  static bool SwitchLanguage(const std::string& locale);
47
48  // Switches the current locale, saves the new locale in preferences.
49  // Enables the keyboard layouts associated with the new locale.
50  static void SwitchLanguageAndEnableKeyboardLayouts(
51      const std::string& locale);
52
53 private:
54  static void LoadFontsForCurrentLocale();
55
56  // views::ViewMenuDelegate implementation.
57  virtual void RunMenu(views::View* source, const gfx::Point& pt);
58
59  // ui::SimpleMenuModel::Delegate implementation.
60  virtual bool IsCommandIdChecked(int command_id) const;
61  virtual bool IsCommandIdEnabled(int command_id) const;
62  virtual bool GetAcceleratorForCommandId(int command_id,
63                                          ui::Accelerator* accelerator);
64  virtual void ExecuteCommand(int command_id);
65
66  // Dialog controls that we own ourselves.
67  ui::SimpleMenuModel menu_model_;
68  ui::SimpleMenuModel menu_model_submenu_;
69  scoped_ptr<views::Menu2> menu_;
70
71  // Language locale name storage.
72  scoped_ptr<LanguageList> language_list_;
73
74  // Menu alignment.
75  views::Menu2::Alignment menu_alignment_;
76
77  FRIEND_TEST(::WizardControllerTest, SwitchLanguage);
78  DISALLOW_COPY_AND_ASSIGN(LanguageSwitchMenu);
79};
80
81}  // namespace chromeos
82
83#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_LANGUAGE_SWITCH_MENU_H_
84