Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/login/new_user_view.h" | 5 #include "chrome/browser/chromeos/login/new_user_view.h" |
| 6 | 6 |
| 7 #include <signal.h> | 7 #include <signal.h> |
| 8 #include <sys/types.h> | 8 #include <sys/types.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 title_label_(NULL), | 88 title_label_(NULL), |
| 89 title_hint_label_(NULL), | 89 title_hint_label_(NULL), |
| 90 splitter_up1_(NULL), | 90 splitter_up1_(NULL), |
| 91 splitter_up2_(NULL), | 91 splitter_up2_(NULL), |
| 92 splitter_down1_(NULL), | 92 splitter_down1_(NULL), |
| 93 splitter_down2_(NULL), | 93 splitter_down2_(NULL), |
| 94 sign_in_button_(NULL), | 94 sign_in_button_(NULL), |
| 95 create_account_link_(NULL), | 95 create_account_link_(NULL), |
| 96 guest_link_(NULL), | 96 guest_link_(NULL), |
| 97 languages_menubutton_(NULL), | 97 languages_menubutton_(NULL), |
| 98 throbber_(NULL), | |
| 99 accel_focus_pass_(views::Accelerator(app::VKEY_P, false, false, true)), | 98 accel_focus_pass_(views::Accelerator(app::VKEY_P, false, false, true)), |
|
whywhat
2010/12/09 16:20:18
Do we need to initialize throbber positions here t
altimofeev
2010/12/10 16:37:40
Added impossible initial value for |throbber_cente
| |
| 100 accel_focus_user_(views::Accelerator(app::VKEY_U, false, false, true)), | 99 accel_focus_user_(views::Accelerator(app::VKEY_U, false, false, true)), |
| 101 accel_login_off_the_record_( | 100 accel_login_off_the_record_( |
| 102 views::Accelerator(app::VKEY_B, false, false, true)), | 101 views::Accelerator(app::VKEY_B, false, false, true)), |
| 103 accel_enable_accessibility_(WizardAccessibilityHelper::GetAccelerator()), | 102 accel_enable_accessibility_(WizardAccessibilityHelper::GetAccelerator()), |
| 104 delegate_(delegate), | 103 delegate_(delegate), |
| 105 ALLOW_THIS_IN_INITIALIZER_LIST(focus_grabber_factory_(this)), | 104 ALLOW_THIS_IN_INITIALIZER_LIST(focus_grabber_factory_(this)), |
| 106 focus_delayed_(false), | 105 focus_delayed_(false), |
| 107 login_in_process_(false), | 106 login_in_process_(false), |
| 108 need_border_(need_border), | 107 need_border_(need_border), |
| 109 need_guest_link_(false), | 108 need_guest_link_(false), |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 splitter_down2_ = CreateSplitter(kSplitterDown2Color); | 150 splitter_down2_ = CreateSplitter(kSplitterDown2Color); |
| 152 | 151 |
| 153 username_field_ = new UsernameField(); | 152 username_field_ = new UsernameField(); |
| 154 username_field_->set_background(new CopyBackground(this)); | 153 username_field_->set_background(new CopyBackground(this)); |
| 155 AddChildView(username_field_); | 154 AddChildView(username_field_); |
| 156 | 155 |
| 157 password_field_ = new TextfieldWithMargin(views::Textfield::STYLE_PASSWORD); | 156 password_field_ = new TextfieldWithMargin(views::Textfield::STYLE_PASSWORD); |
| 158 password_field_->set_background(new CopyBackground(this)); | 157 password_field_->set_background(new CopyBackground(this)); |
| 159 AddChildView(password_field_); | 158 AddChildView(password_field_); |
| 160 | 159 |
| 161 throbber_ = CreateDefaultSmoothedThrobber(); | |
| 162 AddChildView(throbber_); | |
| 163 | |
| 164 language_switch_menu_.InitLanguageMenu(); | 160 language_switch_menu_.InitLanguageMenu(); |
| 165 | 161 |
| 166 RecreatePeculiarControls(); | 162 RecreatePeculiarControls(); |
| 167 | 163 |
| 168 AddChildView(sign_in_button_); | 164 AddChildView(sign_in_button_); |
| 169 if (need_create_account_) { | 165 if (need_create_account_) { |
| 170 InitLink(&create_account_link_); | 166 InitLink(&create_account_link_); |
| 171 } | 167 } |
| 172 if (need_guest_link_) { | 168 if (need_guest_link_) { |
| 173 InitLink(&guest_link_); | 169 InitLink(&guest_link_); |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 413 sign_in_button_->GetPreferredSize().height() + | 409 sign_in_button_->GetPreferredSize().height() + |
| 414 2 * kRowPad; | 410 2 * kRowPad; |
| 415 y = title_end + (bottom_start - title_end - height) / 2; | 411 y = title_end + (bottom_start - title_end - height) / 2; |
| 416 | 412 |
| 417 y += setViewBounds(username_field_, x, y, width, true) + kRowPad; | 413 y += setViewBounds(username_field_, x, y, width, true) + kRowPad; |
| 418 y += setViewBounds(password_field_, x, y, width, true) + kRowPad; | 414 y += setViewBounds(password_field_, x, y, width, true) + kRowPad; |
| 419 | 415 |
| 420 int throbber_y = y; | 416 int throbber_y = y; |
| 421 int sign_in_button_width = sign_in_button_->GetPreferredSize().width(); | 417 int sign_in_button_width = sign_in_button_->GetPreferredSize().width(); |
| 422 setViewBounds(sign_in_button_, x, y, sign_in_button_width,true); | 418 setViewBounds(sign_in_button_, x, y, sign_in_button_width,true); |
| 423 setViewBounds(throbber_, | 419 |
| 424 x + width - throbber_->GetPreferredSize().width(), | 420 |
| 425 throbber_y + (sign_in_button_->GetPreferredSize().height() - | 421 throbber_right_ = x + width; |
| 426 throbber_->GetPreferredSize().height()) / 2, | 422 throbber_center_y_ = |
| 427 width, | 423 throbber_y + sign_in_button_->GetPreferredSize().height() / 2; |
| 428 false); | |
| 429 | 424 |
| 430 SchedulePaint(); | 425 SchedulePaint(); |
| 431 } | 426 } |
| 432 | 427 |
| 433 gfx::Size NewUserView::GetPreferredSize() { | 428 gfx::Size NewUserView::GetPreferredSize() { |
| 434 return need_guest_link_ ? | 429 return need_guest_link_ ? |
| 435 gfx::Size(kNewUserPodFullWidth, kNewUserPodFullHeight) : | 430 gfx::Size(kNewUserPodFullWidth, kNewUserPodFullHeight) : |
| 436 gfx::Size(kNewUserPodSmallWidth, kNewUserPodSmallHeight); | 431 gfx::Size(kNewUserPodSmallWidth, kNewUserPodSmallHeight); |
| 437 } | 432 } |
| 438 | 433 |
| 439 void NewUserView::SetUsername(const std::string& username) { | 434 void NewUserView::SetUsername(const std::string& username) { |
| 440 username_field_->SetText(UTF8ToUTF16(username)); | 435 username_field_->SetText(UTF8ToUTF16(username)); |
| 441 } | 436 } |
| 442 | 437 |
| 443 void NewUserView::SetPassword(const std::string& password) { | 438 void NewUserView::SetPassword(const std::string& password) { |
| 444 password_field_->SetText(UTF8ToUTF16(password)); | 439 password_field_->SetText(UTF8ToUTF16(password)); |
| 445 } | 440 } |
| 446 | 441 |
| 447 void NewUserView::Login() { | 442 void NewUserView::Login() { |
| 448 if (login_in_process_ || username_field_->text().empty()) | 443 if (login_in_process_ || username_field_->text().empty()) |
| 449 return; | 444 return; |
| 450 | 445 |
| 451 StartThrobber(); | |
| 452 login_in_process_ = true; | 446 login_in_process_ = true; |
| 453 EnableInputControls(false); | |
| 454 std::string username = UTF16ToUTF8(username_field_->text()); | 447 std::string username = UTF16ToUTF8(username_field_->text()); |
| 455 // todo(cmasone) Need to sanitize memory used to store password. | 448 // todo(cmasone) Need to sanitize memory used to store password. |
| 456 std::string password = UTF16ToUTF8(password_field_->text()); | 449 std::string password = UTF16ToUTF8(password_field_->text()); |
| 457 | 450 |
| 458 if (username.find('@') == std::string::npos) { | 451 if (username.find('@') == std::string::npos) { |
| 459 username += kDefaultDomain; | 452 username += kDefaultDomain; |
| 460 username_field_->SetText(UTF8ToUTF16(username)); | 453 username_field_->SetText(UTF8ToUTF16(username)); |
| 461 } | 454 } |
| 462 | 455 |
| 463 delegate_->OnLogin(username, password); | 456 delegate_->OnLogin(username, password); |
| 464 } | 457 } |
| 465 | 458 |
| 466 // Sign in button causes a login attempt. | 459 // Sign in button causes a login attempt. |
| 467 void NewUserView::ButtonPressed(views::Button* sender, | 460 void NewUserView::ButtonPressed(views::Button* sender, |
| 468 const views::Event& event) { | 461 const views::Event& event) { |
| 469 DCHECK(sender == sign_in_button_); | 462 DCHECK(sender == sign_in_button_); |
| 470 Login(); | 463 Login(); |
| 471 } | 464 } |
| 472 | 465 |
| 473 void NewUserView::LinkActivated(views::Link* source, int event_flags) { | 466 void NewUserView::LinkActivated(views::Link* source, int event_flags) { |
| 474 if (source == create_account_link_) { | 467 if (source == create_account_link_) { |
| 475 delegate_->OnCreateAccount(); | 468 delegate_->OnCreateAccount(); |
| 476 } else if (source == guest_link_) { | 469 } else if (source == guest_link_) { |
| 477 delegate_->OnLoginOffTheRecord(); | 470 delegate_->OnLoginOffTheRecord(); |
| 478 } | 471 } |
| 479 } | 472 } |
| 480 | 473 |
| 481 void NewUserView::ClearAndEnablePassword() { | 474 void NewUserView::ClearAndFocusControls() { |
| 482 login_in_process_ = false; | 475 login_in_process_ = false; |
| 483 EnableInputControls(true); | |
| 484 SetPassword(std::string()); | |
| 485 password_field_->RequestFocus(); | |
| 486 StopThrobber(); | |
| 487 } | |
| 488 | |
| 489 void NewUserView::ClearAndEnableFields() { | |
| 490 login_in_process_ = false; | |
| 491 EnableInputControls(true); | |
| 492 SetUsername(std::string()); | 476 SetUsername(std::string()); |
| 493 SetPassword(std::string()); | 477 SetPassword(std::string()); |
| 494 username_field_->RequestFocus(); | 478 username_field_->RequestFocus(); |
| 495 StopThrobber(); | 479 } |
| 480 | |
| 481 void NewUserView::ClearAndFocusPassword() { | |
| 482 login_in_process_ = false; | |
| 483 SetPassword(std::string()); | |
| 484 password_field_->RequestFocus(); | |
| 485 } | |
| 486 | |
| 487 gfx::Rect NewUserView::GetControlWithErrorBounds() const { | |
| 488 return GetUsernameBounds(); | |
| 489 } | |
| 490 | |
| 491 bool NewUserView::UseCustomBoundsForThrobber(const gfx::Size& throbber, | |
| 492 gfx::Rect* bounds) const { | |
| 493 gfx::Point origin(throbber_right_- throbber.width(), | |
| 494 throbber_center_y_ - throbber.height() / 2); | |
|
whywhat
2010/12/09 16:20:18
Move this one space to the right.
Also as I noted
altimofeev
2010/12/10 16:37:40
Added call to Layout() if there wasn't any.
| |
| 495 bounds->set_origin(origin); | |
| 496 bounds->set_size(throbber); | |
| 497 return true; | |
| 496 } | 498 } |
| 497 | 499 |
| 498 gfx::Rect NewUserView::GetPasswordBounds() const { | 500 gfx::Rect NewUserView::GetPasswordBounds() const { |
| 499 return password_field_->GetScreenBounds(); | 501 return password_field_->GetScreenBounds(); |
| 500 } | 502 } |
| 501 | 503 |
| 502 gfx::Rect NewUserView::GetUsernameBounds() const { | 504 gfx::Rect NewUserView::GetUsernameBounds() const { |
| 503 return username_field_->GetScreenBounds(); | 505 return username_field_->GetScreenBounds(); |
| 504 } | 506 } |
| 505 | 507 |
| 506 void NewUserView::StartThrobber() { | |
| 507 throbber_->Start(); | |
| 508 } | |
| 509 | |
| 510 void NewUserView::StopThrobber() { | |
| 511 throbber_->Stop(); | |
| 512 } | |
| 513 | |
| 514 bool NewUserView::HandleKeystroke(views::Textfield* s, | 508 bool NewUserView::HandleKeystroke(views::Textfield* s, |
| 515 const views::Textfield::Keystroke& keystroke) { | 509 const views::Textfield::Keystroke& keystroke) { |
| 516 if (!CrosLibrary::Get()->EnsureLoaded() || login_in_process_) | 510 if (!CrosLibrary::Get()->EnsureLoaded() || login_in_process_) |
| 517 return false; | 511 return false; |
| 518 | 512 |
| 519 if (keystroke.GetKeyboardCode() == app::VKEY_RETURN) { | 513 if (keystroke.GetKeyboardCode() == app::VKEY_RETURN) { |
| 520 Login(); | 514 Login(); |
| 521 // Return true so that processing ends | 515 // Return true so that processing ends |
| 522 return true; | 516 return true; |
| 523 } else if (keystroke.GetKeyboardCode() == app::VKEY_LEFT) { | 517 } else if (keystroke.GetKeyboardCode() == app::VKEY_LEFT) { |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 542 languages_menubutton_->SetEnabled(enabled); | 536 languages_menubutton_->SetEnabled(enabled); |
| 543 username_field_->SetEnabled(enabled); | 537 username_field_->SetEnabled(enabled); |
| 544 password_field_->SetEnabled(enabled); | 538 password_field_->SetEnabled(enabled); |
| 545 sign_in_button_->SetEnabled(enabled); | 539 sign_in_button_->SetEnabled(enabled); |
| 546 if (need_create_account_) { | 540 if (need_create_account_) { |
| 547 create_account_link_->SetEnabled(enabled); | 541 create_account_link_->SetEnabled(enabled); |
| 548 } | 542 } |
| 549 if (need_guest_link_) { | 543 if (need_guest_link_) { |
| 550 guest_link_->SetEnabled(enabled); | 544 guest_link_->SetEnabled(enabled); |
| 551 } | 545 } |
| 552 delegate_->SetStatusAreaEnabled(enabled); | |
| 553 } | 546 } |
| 554 | 547 |
| 555 void NewUserView::InitLink(views::Link** link) { | 548 void NewUserView::InitLink(views::Link** link) { |
| 556 *link = new views::Link(std::wstring()); | 549 *link = new views::Link(std::wstring()); |
| 557 (*link)->SetController(this); | 550 (*link)->SetController(this); |
| 558 (*link)->SetNormalColor(login::kLinkColor); | 551 (*link)->SetNormalColor(login::kLinkColor); |
| 559 (*link)->SetHighlightedColor(login::kLinkColor); | 552 (*link)->SetHighlightedColor(login::kLinkColor); |
| 560 AddChildView(*link); | 553 AddChildView(*link); |
| 561 } | 554 } |
| 562 | 555 |
| 563 } // namespace chromeos | 556 } // namespace chromeos |
| OLD | NEW |