Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1419)

Unified Diff: chrome/browser/chromeos/settings_contents_view.cc

Issue 193115: Forgot to svn add files when landing patch. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/settings_contents_view.h ('k') | chrome/browser/chromeos/touchpad.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/settings_contents_view.cc
===================================================================
--- chrome/browser/chromeos/settings_contents_view.cc (revision 0)
+++ chrome/browser/chromeos/settings_contents_view.cc (revision 0)
@@ -0,0 +1,507 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/settings_contents_view.h"
+
+#include <map>
+#include <vector>
+
+#include "app/combobox_model.h"
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "base/basictypes.h"
+#include "base/string_util.h"
+#include "chrome/common/pref_member.h"
+#include "chrome/common/pref_names.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "grit/locale_settings.h"
+#include "views/background.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/combobox/combobox.h"
+#include "views/controls/textfield/textfield.h"
+#include "views/grid_layout.h"
+#include "views/standard_layout.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
+
+using views::GridLayout;
+using views::ColumnSet;
+
+namespace {
+
+////////////////////////////////////////////////////////////////////////////////
+// WifiSSIDComboModel
+
+// The Combobox model for the list of wifi networks
+class WifiSSIDComboModel : public ComboboxModel {
+ public:
+ struct NetworkData {
+ NetworkData() { }
+ NetworkData(const string16& encryption, const int& strength)
+ : encryption(encryption),
+ strength(strength) { }
+
+ string16 encryption;
+ int strength;
+ };
+ typedef std::map<string16, NetworkData> NetworkDataMap;
+
+ WifiSSIDComboModel();
+
+ virtual int GetItemCount();
+ virtual std::wstring GetItemAt(int index);
+
+ const string16& GetSSIDAt(int index);
+ bool RequiresPassword(const string16& ssid);
+
+ private:
+ std::vector<string16> ssids_;
+
+ // A map of some extra data (NetworkData) keyed off the ssids.
+ NetworkDataMap ssids_map_;
+
+ void AddWifiNetwork(const string16& ssid,
+ const string16& encryption,
+ int strength);
+
+ DISALLOW_COPY_AND_ASSIGN(WifiSSIDComboModel);
+};
+
+WifiSSIDComboModel::WifiSSIDComboModel() {
+ // TODO(chocobo): Load wifi info from conman.
+ // This is just temporary data until we hook this up to real data.
+ AddWifiNetwork(ASCIIToUTF16("Wifi Combobox Mock"), string16(), 80);
+ AddWifiNetwork(ASCIIToUTF16("Wifi WPA-PSK Password is chronos"),
+ ASCIIToUTF16("WPA-PSK"), 60);
+ AddWifiNetwork(ASCIIToUTF16("Wifi No Encryption"), string16(), 90);
+}
+
+int WifiSSIDComboModel::GetItemCount() {
+ return static_cast<int>(ssids_.size());
+}
+
+std::wstring WifiSSIDComboModel::GetItemAt(int index) {
+ DCHECK(static_cast<int>(ssids_.size()) > index);
+
+ NetworkDataMap::const_iterator it = ssids_map_.find(ssids_[index]);
+ DCHECK(it != ssids_map_.end());
+
+ // TODO(chocobo): Finalize UI, then put strings in resource file.
+ std::vector<string16> subst;
+ subst.push_back(it->first); // $1
+ // The "None" string is just temporary for now. Have not finalized the UI yet.
+ if (it->second.encryption.empty())
+ subst.push_back(ASCIIToUTF16("None")); // $2
+ else
+ subst.push_back(it->second.encryption); // $2
+ subst.push_back(IntToString16(it->second.strength)); // $3
+
+ return UTF16ToWide(
+ ReplaceStringPlaceholders(ASCIIToUTF16("$1 ($2, $3)"), subst, NULL));
+}
+
+const string16& WifiSSIDComboModel::GetSSIDAt(int index) {
+ DCHECK(static_cast<int>(ssids_.size()) > index);
+ return ssids_[index];
+}
+
+bool WifiSSIDComboModel::RequiresPassword(const string16& ssid) {
+ NetworkDataMap::const_iterator it = ssids_map_.find(ssid);
+ DCHECK(it != ssids_map_.end());
+ return !it->second.encryption.empty();
+}
+
+void WifiSSIDComboModel::AddWifiNetwork(const string16& ssid,
+ const string16& encryption,
+ int strength) {
+ ssids_.push_back(ssid);
+ ssids_map_[ssid] = NetworkData(encryption, strength);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkSection
+
+// Network section for wifi settings
+class NetworkSection : public OptionsPageView,
+ public views::Combobox::Listener {
+ public:
+ explicit NetworkSection(Profile* profile);
+ virtual ~NetworkSection() {}
+
+ // Overridden from views::Combobox::Listener:
+ virtual void ItemChanged(views::Combobox* sender,
+ int prev_index,
+ int new_index);
+
+ bool OnPasswordWindowCancel();
+ bool OnPasswordWindowAccept(const string16& password);
+ bool ConnectToWifi(const string16& ssid, const string16& password);
+
+ protected:
+ // OptionsPageView overrides:
+ virtual void InitControlLayout();
+ virtual void InitContents();
+
+ private:
+ // The View that contains the contents of the section.
+ views::View* contents_;
+
+ // Controls for this section:
+ views::Combobox* wifi_ssid_combobox_;
+
+ // Used to store the index (in combobox) of the currently connected wifi.
+ int last_selected_wifi_ssid_index_;
+
+ // Dummy for now. Used to populate wifi ssid models.
+ WifiSSIDComboModel wifi_ssid_model_;
+
+ DISALLOW_COPY_AND_ASSIGN(NetworkSection);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// PasswordWindowView
+
+static const int kDialogPadding = 7;
+
+// A view for showing a password textfield
+class PasswordWindowView : public views::View,
+ public views::DialogDelegate {
+ public:
+ PasswordWindowView(NetworkSection* network_delegate, Profile* profile);
+ views::Window* container() const { return container_; }
+ void set_container(views::Window* container) {
+ container_ = container;
+ }
+
+ // views::DialogDelegate methods.
+ virtual bool Cancel();
+ virtual bool Accept();
+ virtual std::wstring GetWindowTitle() const;
+
+ // views::WindowDelegate method.
+ virtual bool IsModal() const { return true; }
+ virtual views::View* GetContentsView() { return this; }
+
+ // views::View overrides.
+ virtual void Layout();
+ virtual gfx::Size GetPreferredSize();
+
+ protected:
+ virtual void ViewHierarchyChanged(bool is_add, views::View* parent,
+ views::View* child);
+
+ private:
+ void Init();
+
+ // The Options dialog window.
+ views::Window* container_;
+
+ // Used for Call back to NetworkSection that password has been entered.
+ NetworkSection* network_delegate_;
+
+ // Combobox and its corresponding model.
+ views::Textfield* password_textfield_;
+
+ DISALLOW_COPY_AND_ASSIGN(PasswordWindowView);
+};
+
+PasswordWindowView::PasswordWindowView(
+ NetworkSection* network_delegate,
+ Profile* profile)
+ : network_delegate_(network_delegate),
+ password_textfield_(NULL) {
+ Init();
+}
+
+std::wstring PasswordWindowView::GetWindowTitle() const {
+ return l10n_util::GetString(IDS_OPTIONS_SETTINGS_SECTION_TITLE_PASSWORD);
+}
+
+bool PasswordWindowView::Cancel() {
+ return network_delegate_->OnPasswordWindowCancel();
+}
+
+bool PasswordWindowView::Accept() {
+ // TODO(chocobo): we should not need to call SyncText ourself here.
+ password_textfield_->SyncText();
+ return network_delegate_->OnPasswordWindowAccept(password_textfield_->text());
+}
+
+void PasswordWindowView::Layout() {
+ gfx::Size sz = password_textfield_->GetPreferredSize();
+ password_textfield_->SetBounds(kDialogPadding, kDialogPadding,
+ width() - 2*kDialogPadding,
+ sz.height());
+}
+
+gfx::Size PasswordWindowView::GetPreferredSize() {
+ // TODO(chocobo): Create our own localized content size once the UI is done.
+ return gfx::Size(views::Window::GetLocalizedContentsSize(
+ IDS_ABOUT_DIALOG_WIDTH_CHARS,
+ IDS_ABOUT_DIALOG_MINIMUM_HEIGHT_LINES));
+}
+
+void PasswordWindowView::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ if (is_add && child == this)
+ Init();
+}
+
+void PasswordWindowView::Init() {
+ password_textfield_ = new views::Textfield(views::Textfield::STYLE_PASSWORD);
+ AddChildView(password_textfield_);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkSection
+
+NetworkSection::NetworkSection(Profile* profile)
+ : OptionsPageView(profile),
+ contents_(NULL),
+ wifi_ssid_combobox_(NULL),
+ last_selected_wifi_ssid_index_(0) {
+}
+
+void NetworkSection::ItemChanged(views::Combobox* sender,
+ int prev_index,
+ int new_index) {
+ if (new_index == prev_index)
+ return;
+ if (sender == wifi_ssid_combobox_) {
+ last_selected_wifi_ssid_index_ = prev_index;
+ string16 ssid = wifi_ssid_model_.GetSSIDAt(new_index);
+ // Connect to wifi here. Open password page if appropriate
+ if (wifi_ssid_model_.RequiresPassword(ssid)) {
+ views::Window* window = views::Window::CreateChromeWindow(
+ NULL,
+ gfx::Rect(),
+ new PasswordWindowView(this, profile()));
+ window->Show();
+ } else {
+ ConnectToWifi(ssid, string16());
+ }
+ }
+}
+
+bool NetworkSection::OnPasswordWindowCancel() {
+ // Change combobox to previous setting
+ wifi_ssid_combobox_->SetSelectedItem(last_selected_wifi_ssid_index_);
+ return true;
+}
+
+bool NetworkSection::OnPasswordWindowAccept(const string16& password) {
+ // Try connecting to wifi
+ return ConnectToWifi(wifi_ssid_model_.GetSSIDAt(
+ wifi_ssid_combobox_->selected_item()), password);
+}
+
+bool NetworkSection::ConnectToWifi(const string16& ssid,
+ const string16& password) {
+ // TODO(chocobo): Connect to wifi
+ return password == ASCIIToUTF16("chronos");
+}
+
+void NetworkSection::InitControlLayout() {
+ GridLayout* layout = new GridLayout(this);
+ SetLayoutManager(layout);
+
+ int single_column_layout_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
+ GridLayout::USE_PREF, 0, 0);
+ int inset_column_layout_id = 1;
+ column_set = layout->AddColumnSet(inset_column_layout_id);
+ column_set->AddPaddingColumn(0, kUnrelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, single_column_layout_id);
+ views::Label* title_label = new views::Label(
+ l10n_util::GetString(IDS_OPTIONS_SETTINGS_SECTION_TITLE_NETWORK));
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ gfx::Font title_font =
+ rb.GetFont(ResourceBundle::BaseFont).DeriveFont(0, gfx::Font::BOLD);
+ title_label->SetFont(title_font);
+ layout->AddView(title_label);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, inset_column_layout_id);
+ InitContents();
+ layout->AddView(contents_);
+}
+
+void NetworkSection::InitContents() {
+ contents_ = new views::View;
+ GridLayout* layout = new GridLayout(contents_);
+ contents_->SetLayoutManager(layout);
+
+ wifi_ssid_combobox_ = new views::Combobox(&wifi_ssid_model_);
+ wifi_ssid_combobox_->set_listener(this);
+
+ int single_column_view_set_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(wifi_ssid_combobox_);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// TouchpadSection
+
+class TouchpadSection : public OptionsPageView,
+ public views::ButtonListener {
+ public:
+ explicit TouchpadSection(Profile* profile);
+ virtual ~TouchpadSection() {}
+
+ // Overridden from views::ButtonListener:
+ virtual void ButtonPressed(views::Button* sender, const views::Event& event);
+
+ protected:
+ // OptionsPageView overrides:
+ virtual void InitControlLayout();
+ virtual void InitContents();
+ virtual void NotifyPrefChanged(const std::wstring* pref_name);
+
+ private:
+ // The View that contains the contents of the section.
+ views::View* contents_;
+
+ // Controls for this section:
+ views::Checkbox* enable_tap_to_click_checkbox_;
+ views::Checkbox* enable_vert_edge_scroll_checkbox_;
+
+ // Preferences for this section:
+ BooleanPrefMember tap_to_click_enabled_;
+ BooleanPrefMember vert_edge_scroll_enabled_;
+
+ DISALLOW_COPY_AND_ASSIGN(TouchpadSection);
+};
+
+TouchpadSection::TouchpadSection(Profile* profile)
+ : OptionsPageView(profile),
+ contents_(NULL),
+ enable_tap_to_click_checkbox_(NULL),
+ enable_vert_edge_scroll_checkbox_(NULL) {
+}
+
+void TouchpadSection::ButtonPressed(
+ views::Button* sender, const views::Event& event) {
+ if (sender == enable_tap_to_click_checkbox_) {
+ bool enabled = enable_tap_to_click_checkbox_->checked();
+ UserMetricsRecordAction(enabled ?
+ L"Options_TapToClickCheckbox_Enable" :
+ L"Options_TapToClickCheckbox_Disable",
+ profile()->GetPrefs());
+ tap_to_click_enabled_.SetValue(enabled);
+ } else if (sender == enable_vert_edge_scroll_checkbox_) {
+ bool enabled = enable_vert_edge_scroll_checkbox_->checked();
+ UserMetricsRecordAction(enabled ?
+ L"Options_VertEdgeScrollCheckbox_Enable" :
+ L"Options_VertEdgeScrollCheckbox_Disable",
+ profile()->GetPrefs());
+ vert_edge_scroll_enabled_.SetValue(enabled);
+ }
+}
+
+void TouchpadSection::InitControlLayout() {
+ GridLayout* layout = new GridLayout(this);
+ SetLayoutManager(layout);
+
+ int single_column_layout_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
+ GridLayout::USE_PREF, 0, 0);
+ int inset_column_layout_id = 1;
+ column_set = layout->AddColumnSet(inset_column_layout_id);
+ column_set->AddPaddingColumn(0, kUnrelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, single_column_layout_id);
+ views::Label* title_label = new views::Label(
+ l10n_util::GetString(IDS_OPTIONS_SETTINGS_SECTION_TITLE_TOUCHPAD));
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ gfx::Font title_font =
+ rb.GetFont(ResourceBundle::BaseFont).DeriveFont(0, gfx::Font::BOLD);
+ title_label->SetFont(title_font);
+ layout->AddView(title_label);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, inset_column_layout_id);
+ InitContents();
+ layout->AddView(contents_);
+}
+
+void TouchpadSection::InitContents() {
+ contents_ = new views::View;
+ GridLayout* layout = new GridLayout(contents_);
+ contents_->SetLayoutManager(layout);
+
+ enable_tap_to_click_checkbox_ = new views::Checkbox(l10n_util::GetString(
+ IDS_OPTIONS_SETTINGS_TAP_TO_CLICK_ENABLED_DESCRIPTION));
+ enable_tap_to_click_checkbox_->set_listener(this);
+ enable_tap_to_click_checkbox_->SetMultiLine(true);
+ enable_vert_edge_scroll_checkbox_ = new views::Checkbox(l10n_util::GetString(
+ IDS_OPTIONS_SETTINGS_VERT_EDGE_SCROLL_ENABLED_DESCRIPTION));
+ enable_vert_edge_scroll_checkbox_->set_listener(this);
+ enable_vert_edge_scroll_checkbox_->SetMultiLine(true);
+
+ int single_column_view_set_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(enable_tap_to_click_checkbox_);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(enable_vert_edge_scroll_checkbox_);
+ layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
+
+ // Init member prefs so we can update the controls if prefs change.
+ tap_to_click_enabled_.Init(prefs::kTapToClickEnabled,
+ profile()->GetPrefs(), this);
+ vert_edge_scroll_enabled_.Init(prefs::kVertEdgeScrollEnabled,
+ profile()->GetPrefs(), this);
+}
+
+void TouchpadSection::NotifyPrefChanged(const std::wstring* pref_name) {
+ if (!pref_name || *pref_name == prefs::kTapToClickEnabled) {
+ bool enabled = tap_to_click_enabled_.GetValue();
+ enable_tap_to_click_checkbox_->SetChecked(enabled);
+ }
+ if (!pref_name || *pref_name == prefs::kVertEdgeScrollEnabled) {
+ bool enabled = vert_edge_scroll_enabled_.GetValue();
+ enable_vert_edge_scroll_checkbox_->SetChecked(enabled);
+ }
+}
+
+} // namespace
+
+////////////////////////////////////////////////////////////////////////////////
+// SettingsContentsView
+
+////////////////////////////////////////////////////////////////////////////////
+// SettingsContentsView, OptionsPageView implementation:
+
+void SettingsContentsView::InitControlLayout() {
+ GridLayout* layout = CreatePanelGridLayout(this);
+ SetLayoutManager(layout);
+
+ int single_column_view_set_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(new NetworkSection(profile()));
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(new TouchpadSection(profile()));
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+}
Property changes on: chrome/browser/chromeos/settings_contents_view.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/chromeos/settings_contents_view.h ('k') | chrome/browser/chromeos/touchpad.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698