network_config_view.cc revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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#include "chrome/browser/chromeos/options/network_config_view.h"
6
7#include <algorithm>
8
9#include "base/string_util.h"
10#include "base/utf_string_conversions.h"
11#include "chrome/browser/chromeos/options/vpn_config_view.h"
12#include "chrome/browser/chromeos/options/wifi_config_view.h"
13#include "grit/chromium_strings.h"
14#include "grit/generated_resources.h"
15#include "grit/locale_settings.h"
16#include "ui/base/accessibility/accessible_view_state.h"
17#include "ui/base/l10n/l10n_util.h"
18#include "views/layout/grid_layout.h"
19#include "views/layout/layout_constants.h"
20#include "views/widget/widget_gtk.h"
21#include "views/window/window.h"
22
23using views::WidgetGtk;
24
25namespace chromeos {
26
27// static
28const int ChildNetworkConfigView::kPassphraseWidth = 150;
29
30NetworkConfigView::NetworkConfigView(Network* network)
31    : browser_mode_(true),
32      delegate_(NULL) {
33  if (network->type() == TYPE_WIFI) {
34    child_config_view_ =
35        new WifiConfigView(this, static_cast<WifiNetwork*>(network));
36  } else if (network->type() == TYPE_VPN) {
37    child_config_view_ =
38        new VPNConfigView(this, static_cast<VirtualNetwork*>(network));
39  } else {
40    NOTREACHED();
41    child_config_view_ = NULL;
42  }
43}
44
45NetworkConfigView::NetworkConfigView(ConnectionType type)
46    : browser_mode_(true),
47      delegate_(NULL) {
48  if (type == TYPE_WIFI) {
49    child_config_view_ = new WifiConfigView(this);
50  } else if (type == TYPE_VPN) {
51    child_config_view_ = new VPNConfigView(this);
52  } else {
53    NOTREACHED();
54    child_config_view_ = NULL;
55  }
56}
57
58gfx::NativeWindow NetworkConfigView::GetNativeWindow() const {
59  return
60      GTK_WINDOW(static_cast<const WidgetGtk*>(GetWidget())->GetNativeView());
61}
62
63std::wstring NetworkConfigView::GetDialogButtonLabel(
64    MessageBoxFlags::DialogButton button) const {
65  if (button == MessageBoxFlags::DIALOGBUTTON_OK)
66    return UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_CONNECT));
67  return std::wstring();
68}
69
70bool NetworkConfigView::IsDialogButtonEnabled(
71    MessageBoxFlags::DialogButton button) const {
72  // Disable connect button if cannot login.
73  if (button == MessageBoxFlags::DIALOGBUTTON_OK)
74    return child_config_view_->CanLogin();
75  return true;
76}
77
78bool NetworkConfigView::Cancel() {
79  if (delegate_)
80    delegate_->OnDialogCancelled();
81  child_config_view_->Cancel();
82  return true;
83}
84
85bool NetworkConfigView::Accept() {
86  bool result = child_config_view_->Login();
87  if (result && delegate_)
88    delegate_->OnDialogAccepted();
89  return result;
90}
91
92std::wstring NetworkConfigView::GetWindowTitle() const {
93  return UTF16ToWide(child_config_view_->GetTitle());
94}
95
96void NetworkConfigView::GetAccessibleState(ui::AccessibleViewState* state) {
97  state->name =
98      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_OTHER_WIFI_NETWORKS);
99  state->role = ui::AccessibilityTypes::ROLE_DIALOG;
100}
101
102void NetworkConfigView::Layout() {
103  child_config_view_->SetBounds(0, 0, width(), height());
104}
105
106gfx::Size NetworkConfigView::GetPreferredSize() {
107  gfx::Size result(views::Window::GetLocalizedContentsSize(
108      IDS_JOIN_WIFI_NETWORK_DIALOG_WIDTH_CHARS,
109      IDS_JOIN_WIFI_NETWORK_DIALOG_MINIMUM_HEIGHT_LINES));
110  gfx::Size size = child_config_view_->GetPreferredSize();
111  result.set_height(size.height());
112  if (size.width() > result.width())
113    result.set_width(size.width());
114  return result;
115}
116
117void NetworkConfigView::ViewHierarchyChanged(
118    bool is_add, views::View* parent, views::View* child) {
119  // Can't init before we're inserted into a Container, because we require
120  // a HWND to parent native child controls to.
121  if (is_add && child == this) {
122    AddChildView(child_config_view_);
123    child_config_view_->InitFocus();
124  }
125}
126
127}  // namespace chromeos
128