Home | History | Annotate | Download | only in login
      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?
     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();
     80   virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) {
     81     return true;
     82   }
     83 
     84   // LoginHtmlDialog::Delegate implementation:
     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