| Index: chrome/browser/chromeos/login/captcha_view.cc
|
| diff --git a/chrome/browser/chromeos/login/captcha_view.cc b/chrome/browser/chromeos/login/captcha_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c45f1eae6d72bbd732c1a5ea83d55ec4a678b342
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/login/captcha_view.cc
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/chromeos/login/captcha_view.h"
|
| +
|
| +#include "app/l10n_util.h"
|
| +#include "base/string_util.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/chromeos/login/image_downloader.h"
|
| +#include "grit/chromium_strings.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "grit/locale_settings.h"
|
| +#include "views/controls/image_view.h"
|
| +#include "views/controls/label.h"
|
| +#include "views/grid_layout.h"
|
| +#include "views/standard_layout.h"
|
| +#include "views/widget/widget_gtk.h"
|
| +#include "views/window/window.h"
|
| +
|
| +using views::Label;
|
| +using views::Textfield;
|
| +using views::WidgetGtk;
|
| +
|
| +namespace chromeos {
|
| +
|
| +CaptchaView::CaptchaView(const GURL& captcha_url)
|
| + : delegate_(NULL),
|
| + captcha_url_(captcha_url),
|
| + captcha_image_(NULL),
|
| + captcha_textfield_(NULL) {
|
| +}
|
| +
|
| +bool CaptchaView::Accept() {
|
| + if (delegate_)
|
| + delegate_->OnCaptchaEntered(UTF16ToUTF8(captcha_textfield_->text()));
|
| + return true;
|
| +}
|
| +
|
| +std::wstring CaptchaView::GetWindowTitle() const {
|
| + return l10n_util::GetString(IDS_LOGIN_CAPTCHA_DIALOG_TITLE);
|
| +}
|
| +
|
| +gfx::Size CaptchaView::GetPreferredSize() {
|
| + // TODO(nkostylev): Once UI is finalized, create locale settings.
|
| + return gfx::Size(views::Window::GetLocalizedContentsSize(
|
| + IDS_CAPTCHA_INPUT_DIALOG_WIDTH_CHARS,
|
| + IDS_CAPTCHA_INPUT_DIALOG_HEIGHT_LINES));
|
| +}
|
| +
|
| +void CaptchaView::ViewHierarchyChanged(bool is_add,
|
| + views::View* parent,
|
| + views::View* child) {
|
| + // Can't init before we're inserted into a Container, because we require
|
| + // a HWND to parent native child controls to.
|
| + if (is_add && child == this)
|
| + Init();
|
| +}
|
| +
|
| +bool CaptchaView::HandleKeystroke(views::Textfield* sender,
|
| + const views::Textfield::Keystroke& keystroke) {
|
| + return false;
|
| +}
|
| +
|
| +void CaptchaView::OnImageDecoded(const SkBitmap& decoded_image) {
|
| + captcha_image_->SetImage(decoded_image);
|
| + SchedulePaint();
|
| + Layout();
|
| +}
|
| +
|
| +void CaptchaView::Init() {
|
| + views::GridLayout* layout = CreatePanelGridLayout(this);
|
| + SetLayoutManager(layout);
|
| +
|
| + int column_view_set_id = 0;
|
| + views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
|
| + column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
|
| + views::GridLayout::USE_PREF, 0, 0);
|
| + layout->StartRow(0, column_view_set_id);
|
| + Label* label =
|
| + new views::Label(l10n_util::GetString(IDS_LOGIN_CAPTCHA_INSTRUCTIONS));
|
| + label->SetMultiLine(true);
|
| + layout->AddView(label);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| +
|
| + layout->StartRow(0, column_view_set_id);
|
| + captcha_image_ = new views::ImageView();
|
| + layout->AddView(captcha_image_);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| +
|
| + layout->StartRow(0, column_view_set_id);
|
| + captcha_textfield_ = new views::Textfield(
|
| + views::Textfield::STYLE_DEFAULT);
|
| + captcha_textfield_->SetController(this);
|
| + layout->AddView(captcha_textfield_);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| +
|
| + layout->StartRow(0, column_view_set_id);
|
| + label = new views::Label(
|
| + l10n_util::GetString(IDS_SYNC_GAIA_CAPTCHA_CASE_INSENSITIVE_TIP));
|
| + label->SetMultiLine(true);
|
| + layout->AddView(label);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| +
|
| + captcha_textfield_->RequestFocus();
|
| +
|
| + // ImageDownloader will disable itself once URL is fetched.
|
| + new ImageDownloader(this, GURL(captcha_url_), std::string());
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|