172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/network_selection_view.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <signal.h>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <sys/types.h>
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/helper.h"
13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/login/keyboard_switch_menu.h"
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/language_switch_menu.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/network_screen_delegate.h"
16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/proxy_settings_dialog.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/rounded_rect_painter.h"
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/status/network_dropdown_button.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/chromium_strings.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h"
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/size.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h"
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/throbber.h"
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/fill_layout.h"
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h"
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/layout_constants.h"
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget.h"
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_gtk.h"
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/non_client_view.h"
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window.h"
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window_gtk.h"
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::Background;
383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing views::GridLayout;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::Label;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::View;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::Widget;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::WidgetGtk;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickenum kLayoutColumnsets {
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  STANDARD_ROW,
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  THROBBER_ROW,
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickenum kContentsLayoutColumnsets {
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WELCOME_ROW,
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  CONTENTS_ROW,
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Grid layout constants.
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kBorderSize = 10;
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kWelcomeTitlePadding = 10;
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kPaddingColumnWidth = 55;
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kMediumPaddingColumnWidth = 20;
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kControlPaddingRow = 15;
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Fixed size for language/keyboard/network controls height.
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst int kSelectionBoxHeight = 29;
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Menu button is drawn using our custom icons in resources. See
67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// TextButtonBorder::OnPaint() for details. So this offset compensate
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// horizontal size, eaten by those icons.
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst int kMenuHorizontalOffset = -3;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Vertical addition to the menu window to make it appear exactly below
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// MenuButton.
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst int kMenuVerticalOffset = -1;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Offset that compensates menu width so that it matches
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// menu button visual width when being in pushed state.
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kMenuWidthOffset = 6;
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst SkColor kWelcomeColor = 0xFFCDD3D6;
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Initializes menu button default properties.
82513209b27ff55e2841eac0e4120199c23acce758Ben Murdochstatic void InitMenuButtonProperties(views::MenuButton* menu_button) {
83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->SetFocusable(true);
84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->SetNormalHasBorder(true);
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->SetEnabledColor(SK_ColorBLACK);
86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->SetHighlightColor(SK_ColorBLACK);
87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->SetHoverColor(SK_ColorBLACK);
88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->set_animate_on_state_change(false);
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Menu is positioned by bottom right corner of the MenuButton.
90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  menu_button->set_menu_offset(kMenuHorizontalOffset, kMenuVerticalOffset);
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic void SetMenuButtonFont(views::MenuButton* menu_button,
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              const gfx::Font& font) {
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  menu_button->SetFont(font);
96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  chromeos::CorrectMenuButtonFontSize(menu_button);
97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// NetworkDropdownButton with custom Activate() behavior.
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass NetworkControlReportOnActivate : public NetworkDropdownButton {
1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  NetworkControlReportOnActivate(bool browser_mode,
1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 gfx::NativeWindow parent_window,
1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 NetworkScreenDelegate* delegate)
1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      : NetworkDropdownButton(browser_mode, parent_window),
110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        delegate_(delegate) {}
1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Overridden from MenuButton:
1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual bool Activate() {
1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    delegate_->ClearErrors();
1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return MenuButton::Activate();
1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  NetworkScreenDelegate* delegate_;
1203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  DISALLOW_COPY_AND_ASSIGN(NetworkControlReportOnActivate);
1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// MenuButton with custom processing on focus events.
1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass NotifyingMenuButton : public DropDownButton {
1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  NotifyingMenuButton(views::ButtonListener* listener,
1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      const std::wstring& text,
1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      views::ViewMenuDelegate* menu_delegate,
1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      bool show_menu_marker,
1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      NetworkScreenDelegate* delegate)
1324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      : DropDownButton(listener, text, menu_delegate, show_menu_marker),
1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        delegate_(delegate) {}
1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Overridden from View:
136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnFocus() OVERRIDE {
1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    delegate_->ClearErrors();
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    GetWidget()->NotifyAccessibilityEvent(
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        this, ui::AccessibilityTypes::EVENT_FOCUS, true);
1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  NetworkScreenDelegate* delegate_;
1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DISALLOW_COPY_AND_ASSIGN(NotifyingMenuButton);
1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochNetworkSelectionView::NetworkSelectionView(NetworkScreenDelegate* delegate)
149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    : entire_screen_view_(NULL),
150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      contents_view_(NULL),
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      languages_menubutton_(NULL),
152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      keyboards_menubutton_(NULL),
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      welcome_label_(NULL),
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      select_language_label_(NULL),
155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      select_keyboard_label_(NULL),
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      select_network_label_(NULL),
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connecting_network_label_(NULL),
1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      network_dropdown_(NULL),
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      continue_button_(NULL),
1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      throbber_(CreateDefaultSmoothedThrobber()),
1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      proxy_settings_link_(NULL),
162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      show_keyboard_button_(false),
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      delegate_(delegate) {
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochNetworkSelectionView::~NetworkSelectionView() {
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  throbber_->Stop();
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  throbber_ = NULL;
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid NetworkSelectionView::AddControlsToLayout(
1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    views::GridLayout* contents_layout) {
173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Padding rows will be resized.
174731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  const int kPadding = 0;
1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (IsConnecting()) {
176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    contents_layout->AddPaddingRow(1, kPadding);
1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->StartRow(0, THROBBER_ROW);
1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(connecting_network_label_);
1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(throbber_);
180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    contents_layout->AddPaddingRow(1, kPadding);
1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  } else {
182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    contents_layout->AddPaddingRow(1, kPadding);
1833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->StartRow(0, STANDARD_ROW);
1843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(select_language_label_);
1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(languages_menubutton_, 1, 1,
1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    GridLayout::FILL, GridLayout::FILL,
1873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    languages_menubutton_->GetPreferredSize().width(),
1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    kSelectionBoxHeight);
189731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (show_keyboard_button_) {
190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      contents_layout->AddPaddingRow(0, kControlPaddingRow);
191731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      contents_layout->StartRow(0, STANDARD_ROW);
192731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      contents_layout->AddView(select_keyboard_label_);
193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      contents_layout->AddView(
194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          keyboards_menubutton_, 1, 1,
195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          GridLayout::FILL, GridLayout::FILL,
196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          keyboards_menubutton_->GetPreferredSize().width(),
197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          kSelectionBoxHeight);
198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
1993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddPaddingRow(0, kControlPaddingRow);
2003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->StartRow(0, STANDARD_ROW);
2013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(select_network_label_);
2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(network_dropdown_, 1, 1,
2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    GridLayout::FILL, GridLayout::FILL,
2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    network_dropdown_->GetPreferredSize().width(),
2053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    kSelectionBoxHeight);
2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddPaddingRow(0, kControlPaddingRow);
2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->StartRow(0, STANDARD_ROW);
2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->SkipColumns(1);
2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(proxy_settings_link_, 1, 1,
2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    GridLayout::LEADING, GridLayout::CENTER);
2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddPaddingRow(0, kControlPaddingRow);
2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->StartRow(0, STANDARD_ROW);
2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->SkipColumns(1);
2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    contents_layout->AddView(continue_button_, 1, 1,
2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                    GridLayout::LEADING, GridLayout::CENTER);
216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    contents_layout->AddPaddingRow(1, kPadding);
2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid NetworkSelectionView::InitLayout() {
2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  gfx::Size screen_size = delegate_->size();
2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int widest_label = std::max(
223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      std::max(
224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          select_language_label_->GetPreferredSize().width(),
225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          select_keyboard_label_->GetPreferredSize().width()),
2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      select_network_label_->GetPreferredSize().width());
2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int dropdown_width = screen_size.width() - 2 * kBorderSize -
2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      2 * kPaddingColumnWidth - kMediumPaddingColumnWidth - widest_label;
2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  delegate_->language_switch_menu()->SetFirstLevelMenuWidth(
2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      dropdown_width - kMenuWidthOffset);
231731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  delegate_->keyboard_switch_menu()->SetMinimumWidth(
232731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      dropdown_width - kMenuWidthOffset);
233731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  network_dropdown_->SetFirstLevelMenuWidth(dropdown_width - kMenuWidthOffset);
234731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
235731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Define layout and column set for entire screen (title + screen).
236731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  SetLayoutManager(new views::FillLayout);
237731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  views::GridLayout* screen_layout = new views::GridLayout(entire_screen_view_);
238731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  entire_screen_view_->SetLayoutManager(screen_layout);
2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::ColumnSet* column_set = screen_layout->AddColumnSet(WELCOME_ROW);
2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int welcome_width = screen_size.width() - 2 * kWelcomeTitlePadding -
2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      2 * kBorderSize;
2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddPaddingColumn(0, kWelcomeTitlePadding + kBorderSize);
2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        GridLayout::FIXED, welcome_width, welcome_width);
2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddPaddingColumn(0, kWelcomeTitlePadding + kBorderSize);
2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set = screen_layout->AddColumnSet(CONTENTS_ROW);
2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      GridLayout::FIXED, screen_size.width(), screen_size.width());
2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  screen_layout->StartRow(0, WELCOME_ROW);
2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  screen_layout->AddView(welcome_label_);
252731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  screen_layout->StartRow(1, CONTENTS_ROW);
2533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  screen_layout->AddView(contents_view_);
2543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Define layout and column set for screen contents.
2563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::GridLayout* contents_layout = new views::GridLayout(contents_view_);
2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  contents_view_->SetLayoutManager(contents_layout);
2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set = contents_layout->AddColumnSet(STANDARD_ROW);
260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  column_set->AddPaddingColumn(1, kPaddingColumnWidth);
2613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 0,
2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        GridLayout::FIXED, widest_label, widest_label);
2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddPaddingColumn(0, kMediumPaddingColumnWidth);
2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        GridLayout::FIXED, dropdown_width, dropdown_width);
2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddPaddingColumn(1, kPaddingColumnWidth);
2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const int h_padding = 30;
2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set = contents_layout->AddColumnSet(THROBBER_ROW);
270731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  column_set->AddPaddingColumn(1, h_padding);
2713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
2723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        GridLayout::USE_PREF, 0, 0);
27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
2743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1,
2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        GridLayout::USE_PREF, 0, 0);
276731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  column_set->AddPaddingColumn(1, h_padding);
2773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
278731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AddControlsToLayout(contents_layout);
2793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NetworkSelectionView::Init() {
2823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  contents_view_ = new views::View();
2833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
284731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  entire_screen_view_ = new views::View();
285731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AddChildView(entire_screen_view_);
286731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Use rounded rect background.
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Painter* painter = CreateWizardPainter(
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      &BorderDefinition::kScreenBorder);
2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  contents_view_->set_background(
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      views::Background::CreateBackgroundPainter(true, painter));
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  welcome_label_ = new views::Label();
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  welcome_label_->SetColor(kWelcomeColor);
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  welcome_label_->SetMultiLine(true);
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_language_label_ = new views::Label();
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  languages_menubutton_ = new NotifyingMenuButton(
3003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NULL, std::wstring(), delegate_->language_switch_menu(), true, delegate_);
301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  InitMenuButtonProperties(languages_menubutton_);
302731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
303731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  select_keyboard_label_ = new views::Label();
304731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
3054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  keyboards_menubutton_ = new DropDownButton(
306731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NULL /* listener */, L"", delegate_->keyboard_switch_menu(),
307731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      true /* show_menu_marker */);
308513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  InitMenuButtonProperties(keyboards_menubutton_);
3093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_network_label_ = new views::Label();
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
312731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  network_dropdown_ = new NetworkControlReportOnActivate(false,
3133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                         GetNativeWindow(),
3143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                         delegate_);
315513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  InitMenuButtonProperties(network_dropdown_);
3163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  connecting_network_label_ = new views::Label();
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  connecting_network_label_->SetVisible(false);
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_link_ = new views::Link();
3213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_link_->SetController(this);
3223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_link_->SetVisible(true);
3233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_link_->SetFocusable(true);
324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  proxy_settings_link_->SetNormalColor(login::kLinkColor);
325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  proxy_settings_link_->SetHighlightedColor(login::kLinkColor);
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  UpdateLocalizedStringsAndFonts();
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid NetworkSelectionView::UpdateLocalizedStringsAndFonts() {
331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  gfx::Font welcome_label_font = rb.GetFont(ResourceBundle::LargeFont).
333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      DeriveFont(kWelcomeTitleFontDelta, gfx::Font::BOLD);
334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  gfx::Font select_label_font = rb.GetFont(ResourceBundle::MediumFont).
335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      DeriveFont(kNetworkSelectionLabelFontDelta);
336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont);
337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetMenuButtonFont(languages_menubutton_, base_font);
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  languages_menubutton_->SetText(
3403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(delegate_->language_switch_menu()->GetCurrentLocaleName()));
341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetMenuButtonFont(keyboards_menubutton_, base_font);
342731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  keyboards_menubutton_->SetText(
3433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(delegate_->keyboard_switch_menu()->GetCurrentKeyboardName()));
344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  welcome_label_->SetFont(welcome_label_font);
3453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  welcome_label_->SetText(
3463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_TITLE)));
347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  select_language_label_->SetFont(select_label_font);
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_language_label_->SetText(
3493f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_LANGUAGE_SELECTION_SELECT)));
350dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  languages_menubutton_->SetAccessibleName(
351dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      l10n_util::GetStringUTF16(IDS_LANGUAGE_SELECTION_SELECT));
352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  select_keyboard_label_->SetFont(select_label_font);
353731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  select_keyboard_label_->SetText(
3543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_KEYBOARD_SELECTION_SELECT)));
355dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  keyboards_menubutton_->SetAccessibleName(
356dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      l10n_util::GetStringUTF16(IDS_KEYBOARD_SELECTION_SELECT));
357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  select_network_label_->SetFont(select_label_font);
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_network_label_->SetText(
3593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_SELECT)));
360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetMenuButtonFont(network_dropdown_, base_font);
361dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  network_dropdown_->SetAccessibleName(
362dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_SELECT));
363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  proxy_settings_link_->SetFont(base_font);
3643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  proxy_settings_link_->SetText(UTF16ToWide(
3653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringUTF16(IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON)));
366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  connecting_network_label_->SetFont(rb.GetFont(ResourceBundle::MediumFont));
3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  RecreateNativeControls();
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  UpdateConnectingNetworkLabel();
3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  network_dropdown_->Refresh();
3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  InitLayout();
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch////////////////////////////////////////////////////////////////////////////////
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// views::View: implementation:
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
376731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool NetworkSelectionView::OnKeyPressed(const views::KeyEvent&) {
377731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (delegate_->is_error_shown()) {
378731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    delegate_->ClearErrors();
379731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    return true;
380731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
381731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return false;
382731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
383731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid NetworkSelectionView::OnLocaleChanged() {
385731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  show_keyboard_button_ = true;
386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  UpdateLocalizedStringsAndFonts();
3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Proxy settings dialog contains localized title.  Zap it.
3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_dialog_.reset(NULL);
3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Layout();
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SchedulePaint();
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch////////////////////////////////////////////////////////////////////////////////
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NetworkSelectionView, public:
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickgfx::NativeWindow NetworkSelectionView::GetNativeWindow() const {
39872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return
39972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GTK_WINDOW(static_cast<const WidgetGtk*>(GetWidget())->GetNativeView());
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickviews::View* NetworkSelectionView::GetNetworkControlView() const {
4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return network_dropdown_;
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NetworkSelectionView::ShowConnectingStatus(bool connecting,
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                const string16& network_id) {
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  network_id_ = network_id;
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  UpdateConnectingNetworkLabel();
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_language_label_->SetVisible(!connecting);
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  languages_menubutton_->SetVisible(!connecting);
412731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  select_keyboard_label_->SetVisible(!connecting);
413731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  keyboards_menubutton_->SetVisible(!connecting);
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  select_network_label_->SetVisible(!connecting);
4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  network_dropdown_->SetVisible(!connecting);
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  continue_button_->SetVisible(!connecting);
4173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  proxy_settings_link_->SetVisible(!connecting);
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  connecting_network_label_->SetVisible(connecting);
4193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  InitLayout();
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Layout();
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (connecting) {
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    throbber_->Start();
4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    network_dropdown_->CancelMenu();
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    throbber_->Stop();
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool NetworkSelectionView::IsConnecting() const {
4303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return connecting_network_label_->IsVisible();
4313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NetworkSelectionView::EnableContinue(bool enabled) {
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (continue_button_)
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    continue_button_->SetEnabled(enabled);
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool NetworkSelectionView::IsContinueEnabled() const {
4393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return continue_button_ && continue_button_->IsEnabled();
4403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
4423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick////////////////////////////////////////////////////////////////////////////////
4433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// views::LinkController implementation:
4443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
4453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid NetworkSelectionView::LinkActivated(views::Link* source, int) {
446201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  delegate_->ClearErrors();
4473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (source == proxy_settings_link_) {
4483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (!proxy_settings_dialog_.get()) {
449513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      proxy_settings_dialog_.reset(
450513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          new ProxySettingsDialog(this, GetNativeWindow()));
4513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
4523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    proxy_settings_dialog_->Show();
4533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
4543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch////////////////////////////////////////////////////////////////////////////////
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NetworkSelectionView, private:
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NetworkSelectionView::RecreateNativeControls() {
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // There is no way to get native button preferred size after the button was
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // sized so delete and recreate the button on text update.
4623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool is_continue_enabled = IsContinueEnabled();
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  delete continue_button_;
464201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  continue_button_ = new login::WideButton(
4653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      delegate_,
4663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(
4673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen          l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_CONTINUE_BUTTON)));
4683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  continue_button_->SetEnabled(is_continue_enabled);
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NetworkSelectionView::UpdateConnectingNetworkLabel() {
4723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  connecting_network_label_->SetText(UTF16ToWide(l10n_util::GetStringFUTF16(
4733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      IDS_NETWORK_SELECTION_CONNECTING, network_id_)));
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
477