// 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_OPTIONS_NETWORK_CONFIG_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
#pragma once
#include "chrome/browser/chromeos/cros/network_library.h"
#include "views/window/dialog_delegate.h"
namespace views {
class View;
class Window;
}
namespace chromeos {
class ChildNetworkConfigView;
// A dialog box for showing a password textfield.
class NetworkConfigView : public views::View,
public views::DialogDelegate {
public:
class Delegate {
public:
// Called when dialog "OK" button is pressed.
virtual void OnDialogAccepted() = 0;
// Called when dialog "Cancel" button is pressed.
virtual void OnDialogCancelled() = 0;
protected:
virtual ~Delegate() {}
};
// Login dialog for known networks.
explicit NetworkConfigView(Network* network);
// Login dialog for new/hidden networks.
explicit NetworkConfigView(ConnectionType type);
virtual ~NetworkConfigView() {}
// Returns corresponding native window.
gfx::NativeWindow GetNativeWindow() const;
// views::DialogDelegate methods.
virtual std::wstring GetDialogButtonLabel(
MessageBoxFlags::DialogButton button) const;
virtual bool IsDialogButtonEnabled(
MessageBoxFlags::DialogButton button) const;
virtual bool Cancel();
virtual bool Accept();
// views::WindowDelegate method.
virtual bool IsModal() const { return true; }
virtual views::View* GetContentsView() { return this; }
// views::View overrides.
virtual std::wstring GetWindowTitle() const OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
// Getter/setter for browser mode.
void set_browser_mode(bool value) {
browser_mode_ = value;
}
bool is_browser_mode() const {
return browser_mode_;
}
void set_delegate(Delegate* delegate) {
delegate_ = delegate;
}
protected:
// views::View overrides:
virtual void Layout();
virtual gfx::Size GetPreferredSize();
virtual void ViewHierarchyChanged(bool is_add,
views::View* parent,
views::View* child);
private:
// True when opening in browser, otherwise in OOBE/login mode.
bool browser_mode_;
// There's always only one child view, which will get deleted when
// NetworkConfigView gets cleaned up.
ChildNetworkConfigView* child_config_view_;
Delegate* delegate_;
DISALLOW_COPY_AND_ASSIGN(NetworkConfigView);
};
// Children of NetworkConfigView must subclass this and implement the virtual
// methods, which are called by NetworkConfigView.
class ChildNetworkConfigView : public views::View {
public:
// Called to get title for parent NetworkConfigView dialog box.
virtual string16 GetTitle() = 0;
// Called to determine if "Connect" button should be enabled.
virtual bool CanLogin() = 0;
// Called when "Connect" button is clicked.
// Should return false if dialog should remain open.
virtual bool Login() = 0;
// Called when "Cancel" button is clicked.
virtual void Cancel() = 0;
// Called to set initial focus in a reasonable widget. Must be done
// post-construction after the view has a parent window.
virtual void InitFocus() = 0;
// Width of passphrase fields.
static const int kPassphraseWidth;
protected:
explicit ChildNetworkConfigView(NetworkConfigView* parent, Network* network)
: service_path_(network->service_path()),
parent_(parent) {}
explicit ChildNetworkConfigView(NetworkConfigView* parent)
: parent_(parent) {}
virtual ~ChildNetworkConfigView() {}
std::string service_path_;
NetworkConfigView* parent_;
private:
DISALLOW_COPY_AND_ASSIGN(ChildNetworkConfigView);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_