guest_user_view.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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#include "chrome/browser/chromeos/login/guest_user_view.h"
6
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/chromeos/login/user_controller.h"
9#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
10#include "grit/generated_resources.h"
11#include "ui/base/l10n/l10n_util.h"
12
13namespace chromeos {
14
15// Button with custom processing for Tab/Shift+Tab to select entries.
16class UserEntryButton : public login::WideButton {
17 public:
18  UserEntryButton(views::ButtonListener* button_listener,
19                  UserController* user_controller,
20                  const std::wstring& label)
21      : WideButton(button_listener, label),
22        user_controller_(user_controller) {}
23
24  // Overridden from views::View:
25  virtual bool OnKeyPressed(const views::KeyEvent& e) {
26    if (e.key_code() == ui::VKEY_TAB) {
27      user_controller_->SelectUserRelative(e.IsShiftDown() ? -1 : 1);
28      return true;
29    }
30    return WideButton::OnKeyPressed(e);
31  }
32
33  virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) {
34    if (e.key_code() == ui::VKEY_TAB)
35      return true;
36    return WideButton::SkipDefaultKeyEventProcessing(e);
37  }
38
39 private:
40  UserController* user_controller_;
41
42  DISALLOW_COPY_AND_ASSIGN(UserEntryButton);
43};
44
45
46GuestUserView::GuestUserView(UserController* uc)
47    : submit_button_(NULL),
48      user_controller_(uc),
49      accel_toggle_accessibility_(
50          WizardAccessibilityHelper::GetAccelerator()),
51      accel_login_off_the_record_(
52          views::Accelerator(ui::VKEY_B, false, false, true)),
53      accel_previous_pod_by_arrow_(
54          views::Accelerator(ui::VKEY_LEFT, false, false, false)),
55      accel_next_pod_by_arrow_(
56          views::Accelerator(ui::VKEY_RIGHT, false, false, false)) {
57  AddAccelerator(accel_toggle_accessibility_);
58  AddAccelerator(accel_login_off_the_record_);
59  AddAccelerator(accel_previous_pod_by_arrow_);
60  AddAccelerator(accel_next_pod_by_arrow_);
61}
62
63void GuestUserView::RecreateFields() {
64  delete submit_button_;
65  submit_button_ = new UserEntryButton(
66      this,
67      user_controller_,
68      UTF16ToWide(l10n_util::GetStringUTF16(IDS_ENTER_GUEST_SESSION_BUTTON)));
69  AddChildView(submit_button_);
70  Layout();
71  SchedulePaint();
72}
73
74bool GuestUserView::AcceleratorPressed(
75    const views::Accelerator& accelerator) {
76  if (accelerator == accel_login_off_the_record_)
77    user_controller_->OnLoginAsGuest();
78  else if (accelerator == accel_toggle_accessibility_)
79    WizardAccessibilityHelper::GetInstance()->ToggleAccessibility();
80  else if (accelerator == accel_previous_pod_by_arrow_)
81    user_controller_->SelectUserRelative(-1);
82  else if (accelerator == accel_next_pod_by_arrow_)
83    user_controller_->SelectUserRelative(1);
84  else
85    return false;
86  return true;
87}
88
89void GuestUserView::RequestFocus() {
90  submit_button_->RequestFocus();
91}
92
93void GuestUserView::ButtonPressed(
94    views::Button* sender, const views::Event& event) {
95  DCHECK(sender == submit_button_);
96  user_controller_->OnLoginAsGuest();
97}
98
99void GuestUserView::EnableInputControls(bool enabled) {
100  submit_button_->SetEnabled(enabled);
101}
102
103void GuestUserView::OnLocaleChanged() {
104  RecreateFields();
105}
106
107void GuestUserView::Layout() {
108  gfx::Size submit_button_size = submit_button_->GetPreferredSize();
109  int submit_button_x = (width() - submit_button_size.width()) / 2;
110  int submit_button_y = (height() - submit_button_size.height()) / 2;
111  submit_button_->SetBounds(submit_button_x,
112                            submit_button_y,
113                            submit_button_size.width(),
114                            submit_button_size.height());
115}
116
117void GuestUserView::ClearAndFocusControls() {
118}
119
120void GuestUserView::ClearAndFocusPassword() {
121}
122
123gfx::Rect GuestUserView::GetMainInputScreenBounds() const {
124  NOTREACHED();
125  return gfx::Rect();
126}
127
128}  // namespace chromeos
129