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