// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_
#pragma once
#include "base/memory/scoped_ptr.h"
#include "base/string16.h"
#include "chrome/browser/chromeos/login/login_html_dialog.h"
#include "chrome/browser/chromeos/views/dropdown_button.h"
#include "views/controls/link.h"
#include "views/view.h"
#include "views/widget/widget_gtk.h"
#include "views/window/window_delegate.h"
namespace gfx {
class Size;
} // namespace gfx
namespace views {
class Combobox;
class GridLayout;
class Label;
class NativeButton;
class Throbber;
} // namespace views
namespace chromeos {
class NetworkDropdownButton;
class NetworkScreenDelegate;
class ScreenObserver;
// View for the network selection/initial welcome screen.
class NetworkSelectionView : public views::View,
public views::LinkController,
public LoginHtmlDialog::Delegate {
public:
explicit NetworkSelectionView(NetworkScreenDelegate* delegate);
virtual ~NetworkSelectionView();
// Initialize view layout.
void Init();
// Update strings from the resources. Executed on language change.
void UpdateLocalizedStringsAndFonts();
// Returns top level native window for the view.
gfx::NativeWindow GetNativeWindow() const;
// Returns network control view.
views::View* GetNetworkControlView() const;
// Shows network connecting status or network selection otherwise.
void ShowConnectingStatus(bool connecting, const string16& network_id);
// Returns true if only throbber is visible, the view is in waiting status.
bool IsConnecting() const;
// Sets whether continue control is enabled.
void EnableContinue(bool enabled);
// Returns whether continue button is enabled.
bool IsContinueEnabled() const;
// views::LinkController implementation.
virtual void LinkActivated(views::Link* source, int);
// Returns true if any dialog box is currently open?
bool is_dialog_open() const {
return proxy_settings_dialog_.get() && proxy_settings_dialog_->is_open();
}
protected:
// Overridden from views::View.
virtual bool OnKeyPressed(const views::KeyEvent& e);
virtual void OnLocaleChanged();
virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) {
return true;
}
// LoginHtmlDialog::Delegate implementation:
virtual void OnDialogClosed() {}
private:
// Add screen controls to the contents layout specified.
// Based on state (connecting to the network or not)
// different controls are added.
void AddControlsToLayout(views::GridLayout* contents_layout);
// Initializes grid layout of the screen. Called on language change too.
void InitLayout();
// Delete and recreate native controls that
// fail to update preferred size after string update.
void RecreateNativeControls();
// Updates text on label with currently connecting network.
void UpdateConnectingNetworkLabel();
// View that defines FillLayout for the whole screen (contents & title).
views::View* entire_screen_view_;
// View that contains screen contents (except title).
views::View* contents_view_;
// Screen controls.
DropDownButton* languages_menubutton_;
DropDownButton* keyboards_menubutton_;
views::Label* welcome_label_;
views::Label* select_language_label_;
views::Label* select_keyboard_label_;
views::Label* select_network_label_;
views::Label* connecting_network_label_;
NetworkDropdownButton* network_dropdown_;
views::NativeButton* continue_button_;
views::Throbber* throbber_;
views::Link* proxy_settings_link_;
bool show_keyboard_button_;
// NetworkScreen delegate.
NetworkScreenDelegate* delegate_;
// Id of the network that is in process of connecting.
string16 network_id_;
// Dialog used for to launch proxy settings.
scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_;
DISALLOW_COPY_AND_ASSIGN(NetworkSelectionView);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SELECTION_VIEW_H_