15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"  // gfx::NativeWindow
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h"  // views::ButtonListener
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/dialog_delegate.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageSkia;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageView;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LabelButton;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChildNetworkConfigView;
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NetworkPropertyUIData;
29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass NetworkState;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A dialog box for showing a password textfield.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkConfigView : public views::DialogDelegateView,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          public views::ButtonListener {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Delegate {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when dialog "OK" button is pressed.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnDialogAccepted() = 0;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when dialog "Cancel" button is pressed.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnDialogCancelled() = 0;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   protected:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     virtual ~Delegate() {}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a network connection dialog if none is currently visible.
48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  static void Show(const std::string& service_path, gfx::NativeWindow parent);
49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Shows a dialog to configure a new network. |type| must be a valid Shill
50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 'Type' property value.
51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  static void ShowForType(const std::string& type, gfx::NativeWindow parent);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns corresponding native window.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeWindow GetNativeWindow() const;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::DialogDelegate methods.
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetDialogButtonLabel(
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      ui::DialogButton button) const OVERRIDE;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual views::View* CreateExtraView() OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetInitiallyFocusedView() OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::WidgetDelegate methods.
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetWindowTitle() const OVERRIDE;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ui::ModalType GetModalType() const OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::View overrides.
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::ButtonListener overrides.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ButtonPressed(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      views::Button* sender, const ui::Event& event) OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_delegate(Delegate* delegate) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delegate_ = delegate;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::View overrides:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Layout() OVERRIDE;
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE;
84a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual void ViewHierarchyChanged(
85a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      const ViewHierarchyChangedDetails& details) OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NetworkConfigView();
89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ~NetworkConfigView();
90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Login dialog for known networks. Returns true if successfully created.
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool InitWithNetworkState(const NetworkState* network);
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Login dialog for new/hidden networks. Returns true if successfully created.
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool InitWithType(const std::string& type);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates and shows a dialog containing this view.
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ShowDialog(gfx::NativeWindow parent);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resets the underlying view to show advanced options.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowAdvancedView();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // There's always only one child view, which will get deleted when
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NetworkConfigView gets cleaned up.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChildNetworkConfigView* child_config_view_;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Delegate* delegate_;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Button in lower-left corner, may be null or hidden.
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  views::LabelButton* advanced_button_;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NetworkConfigView);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Children of NetworkConfigView must subclass this and implement the virtual
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// methods, which are called by NetworkConfigView.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChildNetworkConfigView : public views::View {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // If |service_path| is NULL, a dialog for configuring a new network will
119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // be created.
120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ChildNetworkConfigView(NetworkConfigView* parent,
121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                         const std::string& service_path);
122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ~ChildNetworkConfigView();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Get the title to show for the dialog.
125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetTitle() const = 0;
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns view that should be focused on dialog activation.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetInitiallyFocusedView() = 0;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to determine if "Connect" button should be enabled.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanLogin() = 0;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when "Connect" button is clicked.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should return false if dialog should remain open.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Login() = 0;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when "Cancel" button is clicked.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() = 0;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to set focus when view is recreated with the same dialog
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // being active. For example, clicking on "Advanced" button.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitFocus() = 0;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Returns 'true' if the dialog is for configuration only (default is false).
145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual bool IsConfigureDialog();
146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Minimum with of input fields / combo boxes.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kInputFieldMinWidth;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Gets the default network share state for the current login state.
152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  static void GetShareStateForLoginState(bool* default_value, bool* modifiable);
153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkConfigView* parent_;
155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string service_path_;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChildNetworkConfigView);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shows an icon with tooltip indicating whether a setting is under policy
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// control.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ControlledSettingIndicatorView : public views::View {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ControlledSettingIndicatorView();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ControlledSettingIndicatorView(const NetworkPropertyUIData& ui_data);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ControlledSettingIndicatorView();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the view based on |ui_data|.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Update(const NetworkPropertyUIData& ui_data);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::View:
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Layout() OVERRIDE;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the view.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool managed_;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::ImageView* image_view_;
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const gfx::ImageSkia* image_;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ControlledSettingIndicatorView);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
191