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