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_OPTIONS_NETWORK_CONFIG_VIEW_H_
6#define CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
7#pragma once
8
9#include "chrome/browser/chromeos/cros/network_library.h"
10#include "views/window/dialog_delegate.h"
11
12namespace views {
13class View;
14class Window;
15}
16
17namespace chromeos {
18
19class ChildNetworkConfigView;
20
21// A dialog box for showing a password textfield.
22class NetworkConfigView : public views::View,
23                          public views::DialogDelegate {
24 public:
25  class Delegate {
26   public:
27    // Called when dialog "OK" button is pressed.
28    virtual void OnDialogAccepted() = 0;
29
30    // Called when dialog "Cancel" button is pressed.
31    virtual void OnDialogCancelled() = 0;
32
33   protected:
34     virtual ~Delegate() {}
35  };
36
37  // Login dialog for known networks.
38  explicit NetworkConfigView(Network* network);
39  // Login dialog for new/hidden networks.
40  explicit NetworkConfigView(ConnectionType type);
41  virtual ~NetworkConfigView() {}
42
43  // Returns corresponding native window.
44  gfx::NativeWindow GetNativeWindow() const;
45
46  // views::DialogDelegate methods.
47  virtual std::wstring GetDialogButtonLabel(
48      MessageBoxFlags::DialogButton button) const;
49  virtual bool IsDialogButtonEnabled(
50      MessageBoxFlags::DialogButton button) const;
51  virtual bool Cancel();
52  virtual bool Accept();
53
54  // views::WindowDelegate method.
55  virtual bool IsModal() const { return true; }
56  virtual views::View* GetContentsView() { return this; }
57
58  // views::View overrides.
59  virtual std::wstring GetWindowTitle() const OVERRIDE;
60  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
61
62  // Getter/setter for browser mode.
63  void set_browser_mode(bool value) {
64    browser_mode_ = value;
65  }
66  bool is_browser_mode() const {
67    return browser_mode_;
68  }
69
70  void set_delegate(Delegate* delegate) {
71    delegate_ = delegate;
72  }
73
74 protected:
75  // views::View overrides:
76  virtual void Layout();
77  virtual gfx::Size GetPreferredSize();
78  virtual void ViewHierarchyChanged(bool is_add,
79                                    views::View* parent,
80                                    views::View* child);
81
82 private:
83  // True when opening in browser, otherwise in OOBE/login mode.
84  bool browser_mode_;
85
86  // There's always only one child view, which will get deleted when
87  // NetworkConfigView gets cleaned up.
88  ChildNetworkConfigView* child_config_view_;
89
90  Delegate* delegate_;
91
92  DISALLOW_COPY_AND_ASSIGN(NetworkConfigView);
93};
94
95// Children of NetworkConfigView must subclass this and implement the virtual
96// methods, which are called by NetworkConfigView.
97class ChildNetworkConfigView : public views::View {
98 public:
99  // Called to get title for parent NetworkConfigView dialog box.
100  virtual string16 GetTitle() = 0;
101
102  // Called to determine if "Connect" button should be enabled.
103  virtual bool CanLogin() = 0;
104
105  // Called when "Connect" button is clicked.
106  // Should return false if dialog should remain open.
107  virtual bool Login() = 0;
108
109  // Called when "Cancel" button is clicked.
110  virtual void Cancel() = 0;
111
112  // Called to set initial focus in a reasonable widget.  Must be done
113  // post-construction after the view has a parent window.
114  virtual void InitFocus() = 0;
115
116  // Width of passphrase fields.
117  static const int kPassphraseWidth;
118
119 protected:
120  explicit ChildNetworkConfigView(NetworkConfigView* parent, Network* network)
121      : service_path_(network->service_path()),
122        parent_(parent) {}
123  explicit ChildNetworkConfigView(NetworkConfigView* parent)
124      : parent_(parent) {}
125  virtual ~ChildNetworkConfigView() {}
126
127  std::string service_path_;
128  NetworkConfigView* parent_;
129
130 private:
131  DISALLOW_COPY_AND_ASSIGN(ChildNetworkConfigView);
132};
133
134}  // namespace chromeos
135
136#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
137