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