| Index: ash/system/chromeos/network/network_list_detailed_view_base.cc
|
| diff --git a/ash/system/chromeos/network/network_list_detailed_view_base.cc b/ash/system/chromeos/network/network_list_detailed_view_base.cc
|
| deleted file mode 100644
|
| index 874dd840e03817e7f8df7af277a23ec003a77c44..0000000000000000000000000000000000000000
|
| --- a/ash/system/chromeos/network/network_list_detailed_view_base.cc
|
| +++ /dev/null
|
| @@ -1,425 +0,0 @@
|
| -// Copyright (c) 2012 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 "ash/system/chromeos/network/network_list_detailed_view_base.h"
|
| -
|
| -#include "ash/shell.h"
|
| -#include "ash/shell_window_ids.h"
|
| -#include "ash/system/tray/fixed_sized_scroll_view.h"
|
| -#include "ash/system/tray/hover_highlight_view.h"
|
| -#include "ash/system/tray/system_tray.h"
|
| -#include "ash/system/tray/system_tray_delegate.h"
|
| -#include "ash/system/tray/system_tray_item.h"
|
| -#include "ash/system/tray/tray_constants.h"
|
| -#include "ash/system/tray/tray_popup_header_button.h"
|
| -#include "ash/system/tray/tray_popup_label_button.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "grit/ash_resources.h"
|
| -#include "grit/ash_strings.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/views/bubble/bubble_delegate.h"
|
| -#include "ui/views/controls/label.h"
|
| -#include "ui/views/layout/box_layout.h"
|
| -#include "ui/views/layout/fill_layout.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace {
|
| -
|
| -// Create a label with the font size and color used in the network info bubble.
|
| -views::Label* CreateInfoBubbleLabel(const base::string16& text) {
|
| - views::Label* label = new views::Label(text);
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - label->SetFont(rb.GetFont(ui::ResourceBundle::SmallFont));
|
| - label->SetEnabledColor(SkColorSetARGB(127, 0, 0, 0));
|
| - return label;
|
| -}
|
| -
|
| -// Create a label formatted for info items in the menu
|
| -views::Label* CreateMenuInfoLabel(const base::string16& text) {
|
| - views::Label* label = new views::Label(text);
|
| - label->set_border(views::Border::CreateEmptyBorder(
|
| - ash::kTrayPopupPaddingBetweenItems,
|
| - ash::kTrayPopupPaddingHorizontal,
|
| - ash::kTrayPopupPaddingBetweenItems, 0));
|
| - label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - label->SetEnabledColor(SkColorSetARGB(192, 0, 0, 0));
|
| - return label;
|
| -}
|
| -
|
| -// Create a row of labels for the network info bubble.
|
| -views::View* CreateInfoBubbleLine(const base::string16& text_label,
|
| - const std::string& text_string) {
|
| - views::View* view = new views::View;
|
| - view->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 1));
|
| - view->AddChildView(CreateInfoBubbleLabel(text_label));
|
| - view->AddChildView(CreateInfoBubbleLabel(UTF8ToUTF16(": ")));
|
| - view->AddChildView(CreateInfoBubbleLabel(UTF8ToUTF16(text_string)));
|
| - return view;
|
| -}
|
| -
|
| -// A bubble that cannot be activated.
|
| -class NonActivatableSettingsBubble : public views::BubbleDelegateView {
|
| - public:
|
| - NonActivatableSettingsBubble(views::View* anchor, views::View* content)
|
| - : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT) {
|
| - set_use_focusless(true);
|
| - set_parent_window(ash::Shell::GetContainer(
|
| - anchor->GetWidget()->GetNativeWindow()->GetRootWindow(),
|
| - ash::internal::kShellWindowId_SettingBubbleContainer));
|
| - SetLayoutManager(new views::FillLayout());
|
| - AddChildView(content);
|
| - }
|
| -
|
| - virtual ~NonActivatableSettingsBubble() {}
|
| -
|
| - virtual bool CanActivate() const OVERRIDE {
|
| - return false;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(NonActivatableSettingsBubble);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -namespace ash {
|
| -namespace internal {
|
| -
|
| -namespace tray {
|
| -
|
| -enum ColorTheme {
|
| - LIGHT,
|
| - DARK,
|
| -};
|
| -
|
| -NetworkListDetailedViewBase::NetworkListDetailedViewBase(
|
| - SystemTrayItem* owner,
|
| - user::LoginStatus login,
|
| - int header_string_id)
|
| - : NetworkDetailedView(owner),
|
| - login_(login),
|
| - header_string_id_(header_string_id),
|
| - info_icon_(NULL),
|
| - settings_(NULL),
|
| - proxy_settings_(NULL),
|
| - info_bubble_(NULL) {
|
| -}
|
| -
|
| -NetworkListDetailedViewBase::~NetworkListDetailedViewBase() {
|
| - if (info_bubble_)
|
| - info_bubble_->GetWidget()->CloseNow();
|
| -}
|
| -
|
| -// Overridden from NetworkDetailedView:
|
| -void NetworkListDetailedViewBase::Init() {
|
| - CreateItems();
|
| - SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate();
|
| - if (delegate->GetWifiEnabled())
|
| - delegate->RequestNetworkScan();
|
| - Update();
|
| -}
|
| -
|
| -NetworkDetailedView::DetailedViewType
|
| - NetworkListDetailedViewBase::GetViewType() const {
|
| - return NetworkDetailedView::LIST_VIEW;
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::ManagerChanged() {
|
| - Update();
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::NetworkListChanged() {
|
| - Update();
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::NetworkServiceChanged(
|
| - const chromeos::NetworkState* network) {
|
| - Update();
|
| -}
|
| -
|
| -// Private methods
|
| -
|
| -void NetworkListDetailedViewBase::Update() {
|
| - UpdateAvailableNetworkList();
|
| - UpdateHeaderButtons();
|
| - UpdateNetworkEntries();
|
| - UpdateNetworkExtra();
|
| -
|
| - Layout();
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::CreateItems() {
|
| - RemoveAllChildViews(true);
|
| -
|
| - AppendNetworkEntries();
|
| - AppendNetworkExtra();
|
| - AppendHeaderEntry(header_string_id_);
|
| - AppendHeaderButtons();
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::AppendHeaderEntry(int header_string_id) {
|
| - CreateSpecialRow(header_string_id, this);
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::AppendNetworkExtra() {
|
| - if (login_ == user::LOGGED_IN_LOCKED)
|
| - return;
|
| -
|
| - views::BoxLayout* layout = new
|
| - views::BoxLayout(views::BoxLayout::kHorizontal,
|
| - kTrayMenuBottomRowPadding,
|
| - kTrayMenuBottomRowPadding,
|
| - kTrayMenuBottomRowPaddingBetweenItems);
|
| - layout->set_spread_blank_space(true);
|
| - views::View* bottom_row = new View();
|
| - bottom_row->SetLayoutManager(layout);
|
| -
|
| - AppendCustomButtonsToBottomRow(bottom_row);
|
| -
|
| - CreateSettingsEntry();
|
| - DCHECK(settings_ || proxy_settings_);
|
| - bottom_row->AddChildView(settings_ ? settings_ : proxy_settings_);
|
| -
|
| - AddChildView(bottom_row);
|
| -
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::AppendInfoButtonToHeader() {
|
| - info_icon_ = new TrayPopupHeaderButton(
|
| - this,
|
| - IDR_AURA_UBER_TRAY_NETWORK_INFO,
|
| - IDR_AURA_UBER_TRAY_NETWORK_INFO,
|
| - IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER,
|
| - IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER,
|
| - IDS_ASH_STATUS_TRAY_NETWORK_INFO);
|
| - info_icon_->SetTooltipText(
|
| - l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_INFO));
|
| - footer()->AddButton(info_icon_);
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::UpdateSettingButton() {
|
| - if (proxy_settings_) {
|
| - proxy_settings_->SetEnabled(
|
| - Shell::GetInstance()->system_tray_delegate()->IsNetworkConnected());
|
| - }
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::UpdateAvailableNetworkList() {
|
| - network_list_.clear();
|
| - GetAvailableNetworkList(&network_list_);
|
| -}
|
| -
|
| -bool NetworkListDetailedViewBase::CreateOrUpdateInfoLabel(
|
| - int index, const base::string16& text, views::Label** label) {
|
| - if (*label == NULL) {
|
| - *label = CreateMenuInfoLabel(text);
|
| - scroll_content()->AddChildViewAt(*label, index);
|
| - return true;
|
| - } else {
|
| - (*label)->SetText(text);
|
| - return OrderChild(*label, index);
|
| - }
|
| -}
|
| -
|
| -bool NetworkListDetailedViewBase::UpdateNetworkChild(
|
| - int index, const NetworkIconInfo* info) {
|
| - bool needs_relayout = false;
|
| - HoverHighlightView* container = NULL;
|
| - ServicePathMap::const_iterator found =
|
| - service_path_map_.find(info->service_path);
|
| - gfx::Font::FontStyle font =
|
| - info->highlight() ? gfx::Font::BOLD : gfx::Font::NORMAL;
|
| - base::string16 desc = info->description.empty() ? info->name
|
| - : info->description;
|
| - if (found == service_path_map_.end()) {
|
| - container = new HoverHighlightView(this);
|
| - container->AddIconAndLabel(info->image, desc, font);
|
| - scroll_content()->AddChildViewAt(container, index);
|
| - container->set_border(views::Border::CreateEmptyBorder(
|
| - 0, kTrayPopupPaddingHorizontal, 0, 0));
|
| - needs_relayout = true;
|
| - } else {
|
| - container = found->second;
|
| - container->RemoveAllChildViews(true);
|
| - container->AddIconAndLabel(info->image, desc, font);
|
| - container->Layout();
|
| - container->SchedulePaint();
|
| - needs_relayout = OrderChild(container, index);
|
| - }
|
| -
|
| - network_map_[container] = info->service_path;
|
| - service_path_map_[info->service_path] = container;
|
| - return needs_relayout;
|
| -}
|
| -
|
| -bool NetworkListDetailedViewBase::OrderChild(views::View* view, int index) {
|
| - if (scroll_content()->child_at(index) != view) {
|
| - scroll_content()->ReorderChildView(view, index);
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::RefreshNetworkList() {
|
| - network_map_.clear();
|
| - std::set<std::string> new_service_paths;
|
| - bool needs_relayout = UpdateNetworkListEntries(&new_service_paths);
|
| -
|
| - // Remove old children
|
| - std::set<std::string> remove_service_paths;
|
| - for (ServicePathMap::const_iterator it = service_path_map_.begin();
|
| - it != service_path_map_.end(); ++it) {
|
| - if (new_service_paths.find(it->first) == new_service_paths.end()) {
|
| - remove_service_paths.insert(it->first);
|
| - scroll_content()->RemoveChildView(it->second);
|
| - needs_relayout = true;
|
| - }
|
| - }
|
| -
|
| - for (std::set<std::string>::const_iterator remove_it =
|
| - remove_service_paths.begin();
|
| - remove_it != remove_service_paths.end(); ++remove_it) {
|
| - service_path_map_.erase(*remove_it);
|
| - }
|
| -
|
| - if (needs_relayout) {
|
| - views::View* selected_view = NULL;
|
| - for (ServicePathMap::const_iterator iter = service_path_map_.begin();
|
| - iter != service_path_map_.end(); ++iter) {
|
| - if (iter->second->hover()) {
|
| - selected_view = iter->second;
|
| - break;
|
| - }
|
| - }
|
| - scroll_content()->SizeToPreferredSize();
|
| - static_cast<views::View*>(scroller())->Layout();
|
| - if (selected_view)
|
| - scroll_content()->ScrollRectToVisible(selected_view->bounds());
|
| - }
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkData() {
|
| - RefreshNetworkList();
|
| -}
|
| -
|
| -bool NetworkListDetailedViewBase::IsNetworkListEmpty() const {
|
| - return network_list_.empty();
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::ButtonPressed(views::Button* sender,
|
| - const ui::Event& event) {
|
| - if (sender == info_icon_) {
|
| - ToggleInfoBubble();
|
| - return;
|
| - }
|
| -
|
| - // If the info bubble was visible, close it when some other item is clicked
|
| - // on.
|
| - ResetInfoBubble();
|
| - SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate();
|
| - if (sender == settings_)
|
| - delegate->ShowNetworkSettings("");
|
| - else if (sender == proxy_settings_)
|
| - delegate->ChangeProxySettings();
|
| - else
|
| - CustomButtonPressed(sender, event);
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::OnViewClicked(views::View* sender) {
|
| - SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate();
|
| - // If the info bubble was visible, close it when some other item is clicked
|
| - // on.
|
| - ResetInfoBubble();
|
| -
|
| - if (sender == footer()->content()) {
|
| - owner()->system_tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
|
| - return;
|
| - }
|
| -
|
| - if (login_ == user::LOGGED_IN_LOCKED)
|
| - return;
|
| -
|
| - if (!CustomLinkClickedOn(sender)) {
|
| - NetworkMap::iterator find = network_map_.find(sender);
|
| - if (find != network_map_.end()) {
|
| - std::string network_id = find->second;
|
| - delegate->ConnectToNetwork(network_id);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Adds a settings entry when logged in, and an entry for changing proxy
|
| -// settings otherwise.
|
| -void NetworkListDetailedViewBase::CreateSettingsEntry() {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - if (login_ != user::LOGGED_IN_NONE) {
|
| - // Settings, only if logged in.
|
| - settings_ = new TrayPopupLabelButton(this,
|
| - rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_SETTINGS));
|
| - } else {
|
| - proxy_settings_ = new TrayPopupLabelButton(this,
|
| - rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_PROXY_SETTINGS));
|
| - }
|
| -}
|
| -
|
| -views::View* NetworkListDetailedViewBase::CreateNetworkInfoView() {
|
| - ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
|
| - std::string ip_address, ethernet_address, wifi_address;
|
| - Shell::GetInstance()->system_tray_delegate()->GetNetworkAddresses(
|
| - &ip_address, ðernet_address, &wifi_address);
|
| -
|
| - views::View* container = new views::View;
|
| - container->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
|
| - container->set_border(views::Border::CreateEmptyBorder(0, 5, 0, 5));
|
| -
|
| - // GetNetworkAddresses returns empty strings if no information is available.
|
| - if (!ip_address.empty()) {
|
| - container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString(
|
| - IDS_ASH_STATUS_TRAY_IP), ip_address));
|
| - }
|
| - if (!ethernet_address.empty()) {
|
| - container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString(
|
| - IDS_ASH_STATUS_TRAY_ETHERNET), ethernet_address));
|
| - }
|
| - if (!wifi_address.empty()) {
|
| - container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString(
|
| - IDS_ASH_STATUS_TRAY_WIFI), wifi_address));
|
| - }
|
| -
|
| - // Avoid an empty bubble in the unlikely event that there is no network
|
| - // information at all.
|
| - if (!container->has_children()) {
|
| - container->AddChildView(CreateInfoBubbleLabel(bundle.GetLocalizedString(
|
| - IDS_ASH_STATUS_TRAY_NO_NETWORKS)));
|
| - }
|
| -
|
| - return container;
|
| -}
|
| -
|
| -void NetworkListDetailedViewBase::ToggleInfoBubble() {
|
| - if (ResetInfoBubble())
|
| - return;
|
| -
|
| - info_bubble_ = new NonActivatableSettingsBubble(
|
| - info_icon_, CreateNetworkInfoView());
|
| - views::BubbleDelegateView::CreateBubble(info_bubble_)->Show();
|
| -}
|
| -
|
| - // Returns whether an existing info-bubble was closed.
|
| -bool NetworkListDetailedViewBase::ResetInfoBubble() {
|
| - if (!info_bubble_)
|
| - return false;
|
| - info_bubble_->GetWidget()->Close();
|
| - info_bubble_ = NULL;
|
| - return true;
|
| -}
|
| -
|
| -} // namespace tray
|
| -
|
| -} // namespace internal
|
| -} // namespace ash
|
|
|