1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 7 #pragma once 8 9 #include "base/memory/scoped_ptr.h" 10 #include "base/string16.h" 11 #include "chrome/browser/chromeos/login/login_html_dialog.h" 12 #include "chrome/browser/chromeos/views/dropdown_button.h" 13 #include "views/controls/link.h" 14 #include "views/view.h" 15 #include "views/widget/widget_gtk.h" 16 #include "views/window/window_delegate.h" 17 18 namespace gfx { 19 class Size; 20 } // namespace gfx 21 22 namespace views { 23 class Combobox; 24 class GridLayout; 25 class Label; 26 class NativeButton; 27 class Throbber; 28 } // namespace views 29 30 namespace chromeos { 31 32 class NetworkDropdownButton; 33 class NetworkScreenDelegate; 34 class ScreenObserver; 35 36 // View for the network selection/initial welcome screen. 37 class NetworkSelectionView : public views::View, 38 public views::LinkController, 39 public LoginHtmlDialog::Delegate { 40 public: 41 explicit NetworkSelectionView(NetworkScreenDelegate* delegate); 42 virtual ~NetworkSelectionView(); 43 44 // Initialize view layout. 45 void Init(); 46 47 // Update strings from the resources. Executed on language change. 48 void UpdateLocalizedStringsAndFonts(); 49 50 // Returns top level native window for the view. 51 gfx::NativeWindow GetNativeWindow() const; 52 53 // Returns network control view. 54 views::View* GetNetworkControlView() const; 55 56 // Shows network connecting status or network selection otherwise. 57 void ShowConnectingStatus(bool connecting, const string16& network_id); 58 59 // Returns true if only throbber is visible, the view is in waiting status. 60 bool IsConnecting() const; 61 62 // Sets whether continue control is enabled. 63 void EnableContinue(bool enabled); 64 65 // Returns whether continue button is enabled. 66 bool IsContinueEnabled() const; 67 68 // views::LinkController implementation. 69 virtual void LinkActivated(views::Link* source, int); 70 71 // Returns true if any dialog box is currently open? is_dialog_open()72 bool is_dialog_open() const { 73 return proxy_settings_dialog_.get() && proxy_settings_dialog_->is_open(); 74 } 75 76 protected: 77 // Overridden from views::View. 78 virtual bool OnKeyPressed(const views::KeyEvent& e); 79 virtual void OnLocaleChanged(); SkipDefaultKeyEventProcessing(const views::KeyEvent & e)80 virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) { 81 return true; 82 } 83 84 // LoginHtmlDialog::Delegate implementation: OnDialogClosed()85 virtual void OnDialogClosed() {} 86 87 private: 88 // Add screen controls to the contents layout specified. 89 // Based on state (connecting to the network or not) 90 // different controls are added. 91 void AddControlsToLayout(views::GridLayout* contents_layout); 92 93 // Initializes grid layout of the screen. Called on language change too. 94 void InitLayout(); 95 96 // Delete and recreate native controls that 97 // fail to update preferred size after string update. 98 void RecreateNativeControls(); 99 100 // Updates text on label with currently connecting network. 101 void UpdateConnectingNetworkLabel(); 102 103 // View that defines FillLayout for the whole screen (contents & title). 104 views::View* entire_screen_view_; 105 106 // View that contains screen contents (except title). 107 views::View* contents_view_; 108 109 // Screen controls. 110 DropDownButton* languages_menubutton_; 111 DropDownButton* keyboards_menubutton_; 112 views::Label* welcome_label_; 113 views::Label* select_language_label_; 114 views::Label* select_keyboard_label_; 115 views::Label* select_network_label_; 116 views::Label* connecting_network_label_; 117 NetworkDropdownButton* network_dropdown_; 118 views::NativeButton* continue_button_; 119 views::Throbber* throbber_; 120 views::Link* proxy_settings_link_; 121 bool show_keyboard_button_; 122 123 // NetworkScreen delegate. 124 NetworkScreenDelegate* delegate_; 125 126 // Id of the network that is in process of connecting. 127 string16 network_id_; 128 129 // Dialog used for to launch proxy settings. 130 scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_; 131 132 DISALLOW_COPY_AND_ASSIGN(NetworkSelectionView); 133 }; 134 135 } // namespace chromeos 136 137 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_ 138