wifi_config_view.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 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_OPTIONS_WIFI_CONFIG_VIEW_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/gtest_prod_util.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/cros/network_library.h"
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/shell_dialogs.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/combobox_model.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/button.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/checkbox.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/image_button.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/native_button.h"
20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "views/controls/combobox/combobox.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/textfield/textfield.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass FilePath;
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkConfigView;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A dialog box for showing a password textfield.
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WifiConfigView : public views::View,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       public views::Textfield::Controller,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       public views::ButtonListener,
34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       public views::Combobox::Listener,
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       public SelectFileDialog::Listener {
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  WifiConfigView(NetworkConfigView* parent, const WifiNetwork* wifi);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit WifiConfigView(NetworkConfigView* parent);
39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~WifiConfigView();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // views::Textfield::Controller methods.
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ContentsChanged(views::Textfield* sender,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               const string16& new_contents);
443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual bool HandleKeyEvent(views::Textfield* sender,
453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                              const views::KeyEvent& key_event);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // views::ButtonListener
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ButtonPressed(views::Button* sender, const views::Event& event);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // views::Combobox::Listener
51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ItemChanged(views::Combobox* combo_box,
52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                           int prev_index, int new_index);
53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // SelectFileDialog::Listener implementation.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void FileSelected(const FilePath& path, int index, void* params);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Login to network. Returns false if the dialog should remain open.
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool Login();
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Save network information.
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool Save();
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Cancel the dialog.
64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Cancel();
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get the typed in ssid.
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string GetSSID() const;
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get the typed in passphrase.
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string GetPassphrase() const;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if the textfields are non-empty and we can login.
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool can_login() const { return can_login_; }
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen   class SecurityComboboxModel : public ui::ComboboxModel {
76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   public:
77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    SecurityComboboxModel() {}
78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    virtual ~SecurityComboboxModel() {}
79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    virtual int GetItemCount();
80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    virtual string16 GetItemAt(int index);
81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   private:
82513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DISALLOW_COPY_AND_ASSIGN(SecurityComboboxModel);
83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Initializes UI.
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Init();
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Updates state of the Login button.
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateCanLogin();
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Updates the error text label.
92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void UpdateErrorLabel(bool failed);
93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NetworkConfigView* parent_;
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether or not we can log in. This gets recalculated when textfield
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // contents change.
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool can_login_;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_ptr<WifiNetwork> wifi_;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Textfield* ssid_textfield_;
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Textfield* identity_textfield_;
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::NativeButton* certificate_browse_button_;
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<SelectFileDialog> select_file_dialog_;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string certificate_path_;
107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  views::Combobox* security_combobox_;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Textfield* passphrase_textfield_;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::ImageButton* passphrase_visible_button_;
110201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  views::Label* error_label_;
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(WifiConfigView);
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_
118