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 |