1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
6 #define CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_
10 #include "base/compiler_specific.h"
11 #include "base/strings/string16.h"
12 #include "ui/gfx/native_widget_types.h" // gfx::NativeWindow
13 #include "ui/views/controls/button/button.h" // views::ButtonListener
14 #include "ui/views/window/dialog_delegate.h"
27 class ChildNetworkConfigView
;
28 class NetworkPropertyUIData
;
31 // A dialog box for showing a password textfield.
32 class NetworkConfigView
: public views::DialogDelegateView
,
33 public views::ButtonListener
{
37 // Called when dialog "OK" button is pressed.
38 virtual void OnDialogAccepted() = 0;
40 // Called when dialog "Cancel" button is pressed.
41 virtual void OnDialogCancelled() = 0;
44 virtual ~Delegate() {}
47 // Shows a network connection dialog if none is currently visible.
48 static void Show(const std::string
& service_path
, gfx::NativeWindow parent
);
49 // Shows a dialog to configure a new network. |type| must be a valid Shill
50 // 'Type' property value.
51 static void ShowForType(const std::string
& type
, gfx::NativeWindow parent
);
53 // Returns corresponding native window.
54 gfx::NativeWindow
GetNativeWindow() const;
56 // views::DialogDelegate methods.
57 virtual base::string16
GetDialogButtonLabel(
58 ui::DialogButton button
) const OVERRIDE
;
59 virtual bool IsDialogButtonEnabled(ui::DialogButton button
) const OVERRIDE
;
60 virtual bool Cancel() OVERRIDE
;
61 virtual bool Accept() OVERRIDE
;
62 virtual views::View
* CreateExtraView() OVERRIDE
;
63 virtual views::View
* GetInitiallyFocusedView() OVERRIDE
;
65 // views::WidgetDelegate methods.
66 virtual base::string16
GetWindowTitle() const OVERRIDE
;
67 virtual ui::ModalType
GetModalType() const OVERRIDE
;
69 // views::View overrides.
70 virtual void GetAccessibleState(ui::AXViewState
* state
) OVERRIDE
;
72 // views::ButtonListener overrides.
73 virtual void ButtonPressed(
74 views::Button
* sender
, const ui::Event
& event
) OVERRIDE
;
76 void set_delegate(Delegate
* delegate
) {
81 // views::View overrides:
82 virtual void Layout() OVERRIDE
;
83 virtual gfx::Size
GetPreferredSize() OVERRIDE
;
84 virtual void ViewHierarchyChanged(
85 const ViewHierarchyChangedDetails
& details
) OVERRIDE
;
89 virtual ~NetworkConfigView();
91 // Login dialog for known networks. Returns true if successfully created.
92 bool InitWithNetworkState(const NetworkState
* network
);
93 // Login dialog for new/hidden networks. Returns true if successfully created.
94 bool InitWithType(const std::string
& type
);
96 // Creates and shows a dialog containing this view.
97 void ShowDialog(gfx::NativeWindow parent
);
99 // Resets the underlying view to show advanced options.
100 void ShowAdvancedView();
102 // There's always only one child view, which will get deleted when
103 // NetworkConfigView gets cleaned up.
104 ChildNetworkConfigView
* child_config_view_
;
108 // Button in lower-left corner, may be null or hidden.
109 views::LabelButton
* advanced_button_
;
111 DISALLOW_COPY_AND_ASSIGN(NetworkConfigView
);
114 // Children of NetworkConfigView must subclass this and implement the virtual
115 // methods, which are called by NetworkConfigView.
116 class ChildNetworkConfigView
: public views::View
{
118 // If |service_path| is NULL, a dialog for configuring a new network will
120 ChildNetworkConfigView(NetworkConfigView
* parent
,
121 const std::string
& service_path
);
122 virtual ~ChildNetworkConfigView();
124 // Get the title to show for the dialog.
125 virtual base::string16
GetTitle() const = 0;
127 // Returns view that should be focused on dialog activation.
128 virtual views::View
* GetInitiallyFocusedView() = 0;
130 // Called to determine if "Connect" button should be enabled.
131 virtual bool CanLogin() = 0;
133 // Called when "Connect" button is clicked.
134 // Should return false if dialog should remain open.
135 virtual bool Login() = 0;
137 // Called when "Cancel" button is clicked.
138 virtual void Cancel() = 0;
140 // Called to set focus when view is recreated with the same dialog
141 // being active. For example, clicking on "Advanced" button.
142 virtual void InitFocus() = 0;
144 // Returns 'true' if the dialog is for configuration only (default is false).
145 virtual bool IsConfigureDialog();
147 // Minimum with of input fields / combo boxes.
148 static const int kInputFieldMinWidth
;
151 // Gets the default network share state for the current login state.
152 static void GetShareStateForLoginState(bool* default_value
, bool* modifiable
);
154 NetworkConfigView
* parent_
;
155 std::string service_path_
;
158 DISALLOW_COPY_AND_ASSIGN(ChildNetworkConfigView
);
161 // Shows an icon with tooltip indicating whether a setting is under policy
163 class ControlledSettingIndicatorView
: public views::View
{
165 ControlledSettingIndicatorView();
166 explicit ControlledSettingIndicatorView(const NetworkPropertyUIData
& ui_data
);
167 virtual ~ControlledSettingIndicatorView();
169 // Updates the view based on |ui_data|.
170 void Update(const NetworkPropertyUIData
& ui_data
);
174 virtual gfx::Size
GetPreferredSize() OVERRIDE
;
175 virtual void Layout() OVERRIDE
;
178 // Initializes the view.
182 views::ImageView
* image_view_
;
183 const gfx::ImageSkia
* image_
;
185 DISALLOW_COPY_AND_ASSIGN(ControlledSettingIndicatorView
);
188 } // namespace chromeos
190 #endif // CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_CONFIG_VIEW_H_