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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/login_html_dialog.h" 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/chromeos/views/dropdown_button.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/link.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_gtk.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window_delegate.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace gfx { 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass Size; 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace gfx 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Combobox; 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass GridLayout; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Label; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NativeButton; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass Throbber; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace views 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass NetworkDropdownButton; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkScreenDelegate; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ScreenObserver; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// View for the network selection/initial welcome screen. 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass NetworkSelectionView : public views::View, 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public views::LinkController, 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public LoginHtmlDialog::Delegate { 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit NetworkSelectionView(NetworkScreenDelegate* delegate); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~NetworkSelectionView(); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initialize view layout. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Init(); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Update strings from the resources. Executed on language change. 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void UpdateLocalizedStringsAndFonts(); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns top level native window for the view. 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gfx::NativeWindow GetNativeWindow() const; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns network control view. 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::View* GetNetworkControlView() const; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Shows network connecting status or network selection otherwise. 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ShowConnectingStatus(bool connecting, const string16& network_id); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns true if only throbber is visible, the view is in waiting status. 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsConnecting() const; 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets whether continue control is enabled. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void EnableContinue(bool enabled); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns whether continue button is enabled. 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsContinueEnabled() const; 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // views::LinkController implementation. 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void LinkActivated(views::Link* source, int); 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns true if any dialog box is currently open? 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool is_dialog_open() const { 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return proxy_settings_dialog_.get() && proxy_settings_dialog_->is_open(); 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from views::View. 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool OnKeyPressed(const views::KeyEvent& e); 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnLocaleChanged(); 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) { 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return true; 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // LoginHtmlDialog::Delegate implementation: 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnDialogClosed() {} 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Add screen controls to the contents layout specified. 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Based on state (connecting to the network or not) 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // different controls are added. 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void AddControlsToLayout(views::GridLayout* contents_layout); 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initializes grid layout of the screen. Called on language change too. 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void InitLayout(); 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete and recreate native controls that 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // fail to update preferred size after string update. 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RecreateNativeControls(); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Updates text on label with currently connecting network. 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateConnectingNetworkLabel(); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // View that defines FillLayout for the whole screen (contents & title). 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick views::View* entire_screen_view_; 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // View that contains screen contents (except title). 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::View* contents_view_; 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Screen controls. 1104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DropDownButton* languages_menubutton_; 1114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DropDownButton* keyboards_menubutton_; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* welcome_label_; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* select_language_label_; 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick views::Label* select_keyboard_label_; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* select_network_label_; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* connecting_network_label_; 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NetworkDropdownButton* network_dropdown_; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::NativeButton* continue_button_; 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Throbber* throbber_; 1203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Link* proxy_settings_link_; 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool show_keyboard_button_; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NetworkScreen delegate. 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NetworkScreenDelegate* delegate_; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Id of the network that is in process of connecting. 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 network_id_; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Dialog used for to launch proxy settings. 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_; 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(NetworkSelectionView); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 138