• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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