summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/login_view.cc
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/views/login_view.cc
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/login_view.cc')
-rw-r--r--chrome/browser/views/login_view.cc149
1 files changed, 149 insertions, 0 deletions
diff --git a/chrome/browser/views/login_view.cc b/chrome/browser/views/login_view.cc
new file mode 100644
index 0000000..28cc8d0
--- /dev/null
+++ b/chrome/browser/views/login_view.cc
@@ -0,0 +1,149 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <string>
+
+#include "chrome/browser/views/login_view.h"
+
+#include "base/message_loop.h"
+#include "chrome/browser/standard_layout.h"
+#include "chrome/common/l10n_util.h"
+#include "chrome/views/grid_layout.h"
+#include "chrome/views/label.h"
+#include "chrome/views/root_view.h"
+#include "chrome/views/text_field.h"
+
+#include "generated_resources.h"
+
+namespace ChromeViews {
+
+static const int kMessageWidth = 320;
+static const int kTextFieldStackHorizontalSpacing = 30;
+
+///////////////////////////////////////////////////////////////////////////////
+// LoginView, public:
+
+LoginView::LoginView(const std::wstring& explanation)
+ : username_field_(new TextField),
+ password_field_(new TextField(TextField::STYLE_PASSWORD)),
+ username_label_(new Label(
+ l10n_util::GetString(IDS_LOGIN_DIALOG_USERNAME_FIELD))),
+ password_label_(new Label(
+ l10n_util::GetString(IDS_LOGIN_DIALOG_PASSWORD_FIELD))),
+ message_label_(new Label(explanation)),
+ focus_grabber_factory_(this),
+ login_model_(NULL) {
+ message_label_->SetMultiLine(true);
+ message_label_->SetHorizontalAlignment(Label::ALIGN_LEFT);
+
+ // Initialize the Grid Layout Manager used for this dialog box.
+ GridLayout* layout = CreatePanelGridLayout(this);
+ SetLayoutManager(layout);
+
+ // Add the column set for the information message at the top of the dialog
+ // box.
+ const int single_column_view_set_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
+ GridLayout::FIXED, kMessageWidth, 0);
+
+ // Add the column set for the user name and password fields and labels.
+ const int labels_column_set_id = 1;
+ column_set = layout->AddColumnSet(labels_column_set_id);
+ column_set->AddPaddingColumn(0, kTextFieldStackHorizontalSpacing);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1,
+ GridLayout::USE_PREF, 0, 0);
+ column_set->AddPaddingColumn(0, kTextFieldStackHorizontalSpacing);
+
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(message_label_);
+
+ layout->AddPaddingRow(0, kUnrelatedControlLargeVerticalSpacing);
+
+ layout->StartRow(0, labels_column_set_id);
+ layout->AddView(username_label_);
+ layout->AddView(username_field_);
+
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+
+ layout->StartRow(0, labels_column_set_id);
+ layout->AddView(password_label_);
+ layout->AddView(password_field_);
+
+ layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
+}
+
+LoginView::~LoginView() {
+ if (login_model_)
+ login_model_->SetObserver(NULL);
+}
+
+std::wstring LoginView::GetUsername() {
+ return username_field_->GetText();
+}
+
+std::wstring LoginView::GetPassword() {
+ return password_field_->GetText();
+}
+
+void LoginView::SetModel(LoginModel* model) {
+ login_model_ = model;
+ if (login_model_)
+ login_model_->SetObserver(this);
+}
+///////////////////////////////////////////////////////////////////////////////
+// LoginView, ChromeViews::View, ChromeViews::LoginModelObserver overrides:
+
+void LoginView::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
+ if (is_add && child == this) {
+ MessageLoop::current()->PostTask(FROM_HERE,
+ focus_grabber_factory_.NewRunnableMethod(&LoginView::FocusFirstField));
+ }
+}
+
+void LoginView::OnAutofillDataAvailable(const std::wstring& username,
+ const std::wstring& password) {
+ if (username_field_->GetText().empty()) {
+ username_field_->SetText(username);
+ password_field_->SetText(password);
+ username_field_->SelectAll();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// LoginView, private:
+
+void LoginView::FocusFirstField() {
+ username_field_->RequestFocus();
+}
+
+} // namespace