Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(664)

Side by Side Diff: chrome/browser/chromeos/login/new_user_view.cc

Issue 5709001: Place the spinner in the right corner of the controls window. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/browser/chromeos/login
Patch Set: nits Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "app/keyboard_codes.h" 13 #include "app/keyboard_codes.h"
14 #include "app/l10n_util.h" 14 #include "app/l10n_util.h"
15 #include "app/resource_bundle.h" 15 #include "app/resource_bundle.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/command_line.h" 17 #include "base/command_line.h"
18 #include "base/message_loop.h" 18 #include "base/message_loop.h"
19 #include "base/process_util.h" 19 #include "base/process_util.h"
20 #include "base/string_util.h" 20 #include "base/string_util.h"
21 #include "base/utf_string_conversions.h" 21 #include "base/utf_string_conversions.h"
22 #include "chrome/browser/chromeos/cros/cros_library.h" 22 #include "chrome/browser/chromeos/cros/cros_library.h"
23 #include "chrome/browser/chromeos/login/helper.h"
24 #include "chrome/browser/chromeos/login/rounded_rect_painter.h" 23 #include "chrome/browser/chromeos/login/rounded_rect_painter.h"
25 #include "chrome/browser/chromeos/login/textfield_with_margin.h" 24 #include "chrome/browser/chromeos/login/textfield_with_margin.h"
26 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" 25 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
27 #include "chrome/browser/chromeos/user_cros_settings_provider.h" 26 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
28 #include "chrome/browser/chromeos/views/copy_background.h" 27 #include "chrome/browser/chromeos/views/copy_background.h"
29 #include "gfx/font.h" 28 #include "gfx/font.h"
30 #include "grit/app_resources.h" 29 #include "grit/app_resources.h"
31 #include "grit/chromium_strings.h" 30 #include "grit/chromium_strings.h"
32 #include "grit/generated_resources.h" 31 #include "grit/generated_resources.h"
33 #include "views/controls/label.h" 32 #include "views/controls/label.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 title_label_(NULL), 87 title_label_(NULL),
89 title_hint_label_(NULL), 88 title_hint_label_(NULL),
90 splitter_up1_(NULL), 89 splitter_up1_(NULL),
91 splitter_up2_(NULL), 90 splitter_up2_(NULL),
92 splitter_down1_(NULL), 91 splitter_down1_(NULL),
93 splitter_down2_(NULL), 92 splitter_down2_(NULL),
94 sign_in_button_(NULL), 93 sign_in_button_(NULL),
95 create_account_link_(NULL), 94 create_account_link_(NULL),
96 guest_link_(NULL), 95 guest_link_(NULL),
97 languages_menubutton_(NULL), 96 languages_menubutton_(NULL),
98 throbber_(NULL),
99 accel_focus_pass_(views::Accelerator(app::VKEY_P, false, false, true)), 97 accel_focus_pass_(views::Accelerator(app::VKEY_P, false, false, true)),
100 accel_focus_user_(views::Accelerator(app::VKEY_U, false, false, true)), 98 accel_focus_user_(views::Accelerator(app::VKEY_U, false, false, true)),
101 accel_login_off_the_record_( 99 accel_login_off_the_record_(
102 views::Accelerator(app::VKEY_B, false, false, true)), 100 views::Accelerator(app::VKEY_B, false, false, true)),
103 accel_enable_accessibility_(WizardAccessibilityHelper::GetAccelerator()), 101 accel_enable_accessibility_(WizardAccessibilityHelper::GetAccelerator()),
104 delegate_(delegate), 102 delegate_(delegate),
105 ALLOW_THIS_IN_INITIALIZER_LIST(focus_grabber_factory_(this)), 103 ALLOW_THIS_IN_INITIALIZER_LIST(focus_grabber_factory_(this)),
106 focus_delayed_(false), 104 focus_delayed_(false),
107 login_in_process_(false), 105 login_in_process_(false),
108 need_border_(need_border), 106 need_border_(need_border),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 splitter_down2_ = CreateSplitter(kSplitterDown2Color); 149 splitter_down2_ = CreateSplitter(kSplitterDown2Color);
152 150
153 username_field_ = new UsernameField(); 151 username_field_ = new UsernameField();
154 username_field_->set_background(new CopyBackground(this)); 152 username_field_->set_background(new CopyBackground(this));
155 AddChildView(username_field_); 153 AddChildView(username_field_);
156 154
157 password_field_ = new TextfieldWithMargin(views::Textfield::STYLE_PASSWORD); 155 password_field_ = new TextfieldWithMargin(views::Textfield::STYLE_PASSWORD);
158 password_field_->set_background(new CopyBackground(this)); 156 password_field_->set_background(new CopyBackground(this));
159 AddChildView(password_field_); 157 AddChildView(password_field_);
160 158
161 throbber_ = CreateDefaultSmoothedThrobber();
162 AddChildView(throbber_);
163
164 language_switch_menu_.InitLanguageMenu(); 159 language_switch_menu_.InitLanguageMenu();
165 160
166 RecreatePeculiarControls(); 161 RecreatePeculiarControls();
167 162
168 AddChildView(sign_in_button_); 163 AddChildView(sign_in_button_);
169 if (need_create_account_) { 164 if (need_create_account_) {
170 InitLink(&create_account_link_); 165 InitLink(&create_account_link_);
171 } 166 }
172 if (need_guest_link_) { 167 if (need_guest_link_) {
173 InitLink(&guest_link_); 168 InitLink(&guest_link_);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 // Center main controls. 405 // Center main controls.
411 height = username_field_->GetPreferredSize().height() + 406 height = username_field_->GetPreferredSize().height() +
412 password_field_->GetPreferredSize().height() + 407 password_field_->GetPreferredSize().height() +
413 sign_in_button_->GetPreferredSize().height() + 408 sign_in_button_->GetPreferredSize().height() +
414 2 * kRowPad; 409 2 * kRowPad;
415 y = title_end + (bottom_start - title_end - height) / 2; 410 y = title_end + (bottom_start - title_end - height) / 2;
416 411
417 y += setViewBounds(username_field_, x, y, width, true) + kRowPad; 412 y += setViewBounds(username_field_, x, y, width, true) + kRowPad;
418 y += setViewBounds(password_field_, x, y, width, true) + kRowPad; 413 y += setViewBounds(password_field_, x, y, width, true) + kRowPad;
419 414
420 int throbber_y = y;
421 int sign_in_button_width = sign_in_button_->GetPreferredSize().width(); 415 int sign_in_button_width = sign_in_button_->GetPreferredSize().width();
422 setViewBounds(sign_in_button_, x, y, sign_in_button_width,true); 416 setViewBounds(sign_in_button_, x, y, sign_in_button_width,true);
423 setViewBounds(throbber_,
424 x + width - throbber_->GetPreferredSize().width(),
425 throbber_y + (sign_in_button_->GetPreferredSize().height() -
426 throbber_->GetPreferredSize().height()) / 2,
427 width,
428 false);
429 417
430 SchedulePaint(); 418 SchedulePaint();
431 } 419 }
432 420
433 gfx::Size NewUserView::GetPreferredSize() { 421 gfx::Size NewUserView::GetPreferredSize() {
434 return need_guest_link_ ? 422 return need_guest_link_ ?
435 gfx::Size(kNewUserPodFullWidth, kNewUserPodFullHeight) : 423 gfx::Size(kNewUserPodFullWidth, kNewUserPodFullHeight) :
436 gfx::Size(kNewUserPodSmallWidth, kNewUserPodSmallHeight); 424 gfx::Size(kNewUserPodSmallWidth, kNewUserPodSmallHeight);
437 } 425 }
438 426
439 void NewUserView::SetUsername(const std::string& username) { 427 void NewUserView::SetUsername(const std::string& username) {
440 username_field_->SetText(UTF8ToUTF16(username)); 428 username_field_->SetText(UTF8ToUTF16(username));
441 } 429 }
442 430
443 void NewUserView::SetPassword(const std::string& password) { 431 void NewUserView::SetPassword(const std::string& password) {
444 password_field_->SetText(UTF8ToUTF16(password)); 432 password_field_->SetText(UTF8ToUTF16(password));
445 } 433 }
446 434
447 void NewUserView::Login() { 435 void NewUserView::Login() {
448 if (login_in_process_ || username_field_->text().empty()) 436 if (login_in_process_ || username_field_->text().empty())
449 return; 437 return;
450 438
451 StartThrobber();
452 login_in_process_ = true; 439 login_in_process_ = true;
453 EnableInputControls(false);
454 std::string username = UTF16ToUTF8(username_field_->text()); 440 std::string username = UTF16ToUTF8(username_field_->text());
455 // todo(cmasone) Need to sanitize memory used to store password. 441 // todo(cmasone) Need to sanitize memory used to store password.
456 std::string password = UTF16ToUTF8(password_field_->text()); 442 std::string password = UTF16ToUTF8(password_field_->text());
457 443
458 if (username.find('@') == std::string::npos) { 444 if (username.find('@') == std::string::npos) {
459 username += kDefaultDomain; 445 username += kDefaultDomain;
460 username_field_->SetText(UTF8ToUTF16(username)); 446 username_field_->SetText(UTF8ToUTF16(username));
461 } 447 }
462 448
463 delegate_->OnLogin(username, password); 449 delegate_->OnLogin(username, password);
464 } 450 }
465 451
466 // Sign in button causes a login attempt. 452 // Sign in button causes a login attempt.
467 void NewUserView::ButtonPressed(views::Button* sender, 453 void NewUserView::ButtonPressed(views::Button* sender,
468 const views::Event& event) { 454 const views::Event& event) {
469 DCHECK(sender == sign_in_button_); 455 DCHECK(sender == sign_in_button_);
470 Login(); 456 Login();
471 } 457 }
472 458
473 void NewUserView::LinkActivated(views::Link* source, int event_flags) { 459 void NewUserView::LinkActivated(views::Link* source, int event_flags) {
474 if (source == create_account_link_) { 460 if (source == create_account_link_) {
475 delegate_->OnCreateAccount(); 461 delegate_->OnCreateAccount();
476 } else if (source == guest_link_) { 462 } else if (source == guest_link_) {
477 delegate_->OnLoginOffTheRecord(); 463 delegate_->OnLoginOffTheRecord();
478 } 464 }
479 } 465 }
480 466
481 void NewUserView::ClearAndEnablePassword() { 467 void NewUserView::ClearAndFocusControls() {
482 login_in_process_ = false; 468 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()); 469 SetUsername(std::string());
493 SetPassword(std::string()); 470 SetPassword(std::string());
494 username_field_->RequestFocus(); 471 username_field_->RequestFocus();
495 StopThrobber(); 472 }
473
474 void NewUserView::ClearAndFocusPassword() {
475 login_in_process_ = false;
476 SetPassword(std::string());
477 password_field_->RequestFocus();
478 }
479
480 gfx::Rect NewUserView::GetMainInputScreenBounds() const {
481 return GetUsernameBounds();
482 }
483
484 gfx::Rect NewUserView::CalculateThrobberBounds(views::Throbber* throbber) {
485 DCHECK(password_field_);
486 DCHECK(sign_in_button_);
487
488 gfx::Size throbber_size = throbber->GetPreferredSize();
489 int x = password_field_->x();
490 x += password_field_->width() - throbber_size.width();
491 int y = sign_in_button_->y();
492 y += (sign_in_button_->height() - throbber_size.height()) / 2;
493
494 return gfx::Rect(gfx::Point(x, y), throbber_size);
496 } 495 }
497 496
498 gfx::Rect NewUserView::GetPasswordBounds() const { 497 gfx::Rect NewUserView::GetPasswordBounds() const {
499 return password_field_->GetScreenBounds(); 498 return password_field_->GetScreenBounds();
500 } 499 }
501 500
502 gfx::Rect NewUserView::GetUsernameBounds() const { 501 gfx::Rect NewUserView::GetUsernameBounds() const {
503 return username_field_->GetScreenBounds(); 502 return username_field_->GetScreenBounds();
504 } 503 }
505 504
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, 505 bool NewUserView::HandleKeystroke(views::Textfield* s,
515 const views::Textfield::Keystroke& keystroke) { 506 const views::Textfield::Keystroke& keystroke) {
516 if (!CrosLibrary::Get()->EnsureLoaded() || login_in_process_) 507 if (!CrosLibrary::Get()->EnsureLoaded() || login_in_process_)
517 return false; 508 return false;
518 509
519 if (keystroke.GetKeyboardCode() == app::VKEY_RETURN) { 510 if (keystroke.GetKeyboardCode() == app::VKEY_RETURN) {
520 Login(); 511 Login();
521 // Return true so that processing ends 512 // Return true so that processing ends
522 return true; 513 return true;
523 } else if (keystroke.GetKeyboardCode() == app::VKEY_LEFT) { 514 } else if (keystroke.GetKeyboardCode() == app::VKEY_LEFT) {
(...skipping 18 matching lines...) Expand all
542 languages_menubutton_->SetEnabled(enabled); 533 languages_menubutton_->SetEnabled(enabled);
543 username_field_->SetEnabled(enabled); 534 username_field_->SetEnabled(enabled);
544 password_field_->SetEnabled(enabled); 535 password_field_->SetEnabled(enabled);
545 sign_in_button_->SetEnabled(enabled); 536 sign_in_button_->SetEnabled(enabled);
546 if (need_create_account_) { 537 if (need_create_account_) {
547 create_account_link_->SetEnabled(enabled); 538 create_account_link_->SetEnabled(enabled);
548 } 539 }
549 if (need_guest_link_) { 540 if (need_guest_link_) {
550 guest_link_->SetEnabled(enabled); 541 guest_link_->SetEnabled(enabled);
551 } 542 }
552 delegate_->SetStatusAreaEnabled(enabled);
553 } 543 }
554 544
555 void NewUserView::InitLink(views::Link** link) { 545 void NewUserView::InitLink(views::Link** link) {
556 *link = new views::Link(std::wstring()); 546 *link = new views::Link(std::wstring());
557 (*link)->SetController(this); 547 (*link)->SetController(this);
558 (*link)->SetNormalColor(login::kLinkColor); 548 (*link)->SetNormalColor(login::kLinkColor);
559 (*link)->SetHighlightedColor(login::kLinkColor); 549 (*link)->SetHighlightedColor(login::kLinkColor);
560 AddChildView(*link); 550 AddChildView(*link);
561 } 551 }
562 552
563 } // namespace chromeos 553 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/new_user_view.h ('k') | chrome/browser/chromeos/login/rounded_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698