Home | History | Annotate | Download | only in login
      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 
     13 namespace chromeos {
     14 
     15 // Button with custom processing for Tab/Shift+Tab to select entries.
     16 class 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 
     46 GuestUserView::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 
     63 void 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 
     74 bool 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 
     89 void GuestUserView::RequestFocus() {
     90   submit_button_->RequestFocus();
     91 }
     92 
     93 void GuestUserView::ButtonPressed(
     94     views::Button* sender, const views::Event& event) {
     95   DCHECK(sender == submit_button_);
     96   user_controller_->OnLoginAsGuest();
     97 }
     98 
     99 void GuestUserView::EnableInputControls(bool enabled) {
    100   submit_button_->SetEnabled(enabled);
    101 }
    102 
    103 void GuestUserView::OnLocaleChanged() {
    104   RecreateFields();
    105 }
    106 
    107 void 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 
    117 void GuestUserView::ClearAndFocusControls() {
    118 }
    119 
    120 void GuestUserView::ClearAndFocusPassword() {
    121 }
    122 
    123 gfx::Rect GuestUserView::GetMainInputScreenBounds() const {
    124   NOTREACHED();
    125   return gfx::Rect();
    126 }
    127 
    128 }  // namespace chromeos
    129