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. 4 5#ifndef ASH_SYSTEM_CHROMEOS_NETWORK_NETWORK_STATE_LIST_DETAILED_VIEW_H 6#define ASH_SYSTEM_CHROMEOS_NETWORK_NETWORK_STATE_LIST_DETAILED_VIEW_H 7 8#include <string> 9 10#include "ash/system/chromeos/network/network_detailed_view.h" 11#include "ash/system/tray/view_click_listener.h" 12#include "ash/system/user/login_status.h" 13#include "base/memory/scoped_vector.h" 14#include "base/memory/weak_ptr.h" 15#include "ui/chromeos/network/network_list.h" 16#include "ui/chromeos/network/network_list_delegate.h" 17#include "ui/views/controls/button/button.h" 18 19namespace chromeos { 20class NetworkTypePattern; 21} 22 23namespace views { 24class BubbleDelegateView; 25} 26 27namespace ash { 28class HoverHighlightView; 29class SystemTrayItem; 30class TrayPopupLabelButton; 31 32namespace tray { 33 34class NetworkStateListDetailedView 35 : public NetworkDetailedView, 36 public views::ButtonListener, 37 public ViewClickListener, 38 public ui::NetworkListDelegate, 39 public base::SupportsWeakPtr<NetworkStateListDetailedView> { 40 public: 41 enum ListType { 42 LIST_TYPE_NETWORK, 43 LIST_TYPE_VPN 44 }; 45 46 NetworkStateListDetailedView(SystemTrayItem* owner, 47 ListType list_type, 48 user::LoginStatus login); 49 virtual ~NetworkStateListDetailedView(); 50 51 // Overridden from NetworkDetailedView: 52 virtual void Init() OVERRIDE; 53 virtual DetailedViewType GetViewType() const OVERRIDE; 54 virtual void ManagerChanged() OVERRIDE; 55 virtual void NetworkListChanged() OVERRIDE; 56 virtual void NetworkServiceChanged( 57 const chromeos::NetworkState* network) OVERRIDE; 58 59 protected: 60 // Overridden from ButtonListener. 61 virtual void ButtonPressed(views::Button* sender, 62 const ui::Event& event) OVERRIDE; 63 64 // Overridden from ViewClickListener. 65 virtual void OnViewClicked(views::View* sender) OVERRIDE; 66 67 private: 68 class InfoBubble; 69 70 // Create UI components. 71 void CreateHeaderEntry(); 72 void CreateHeaderButtons(); 73 void CreateNetworkExtra(); 74 75 // Update UI components. 76 void UpdateHeaderButtons(); 77 void UpdateTechnologyButton(TrayPopupHeaderButton* button, 78 const chromeos::NetworkTypePattern& technology); 79 80 void UpdateNetworkList(); 81 82 bool OrderChild(views::View* view, int index); 83 84 void UpdateNetworkExtra(); 85 86 // Adds a settings entry when logged in, and an entry for changing proxy 87 // settings otherwise. 88 void CreateSettingsEntry(); 89 90 // Create and manage the network info bubble. 91 void ToggleInfoBubble(); 92 bool ResetInfoBubble(); 93 void OnInfoBubbleDestroyed(); 94 views::View* CreateNetworkInfoView(); 95 96 // Periodically request a network scan. 97 void CallRequestScan(); 98 99 // Handle toggile mobile action 100 void ToggleMobile(); 101 102 // ui::NetworkListDelegate: 103 virtual views::View* CreateViewForNetwork( 104 const ui::NetworkInfo& info) OVERRIDE; 105 virtual bool IsViewHovered(views::View* view) OVERRIDE; 106 virtual chromeos::NetworkTypePattern GetNetworkTypePattern() const OVERRIDE; 107 virtual void UpdateViewForNetwork(views::View* view, 108 const ui::NetworkInfo& info) OVERRIDE; 109 virtual views::Label* CreateInfoLabel() OVERRIDE; 110 virtual void RelayoutScrollList() OVERRIDE; 111 112 // Type of list (all networks or vpn) 113 ListType list_type_; 114 115 // Track login state. 116 user::LoginStatus login_; 117 118 // Child views. 119 TrayPopupHeaderButton* info_icon_; 120 TrayPopupHeaderButton* button_wifi_; 121 TrayPopupHeaderButton* button_mobile_; 122 TrayPopupLabelButton* other_wifi_; 123 TrayPopupLabelButton* turn_on_wifi_; 124 TrayPopupLabelButton* other_mobile_; 125 TrayPopupLabelButton* other_vpn_; 126 TrayPopupLabelButton* settings_; 127 TrayPopupLabelButton* proxy_settings_; 128 129 // A small bubble for displaying network info. 130 views::BubbleDelegateView* info_bubble_; 131 132 ui::NetworkListView network_list_view_; 133 134 DISALLOW_COPY_AND_ASSIGN(NetworkStateListDetailedView); 135}; 136 137} // namespace tray 138} // namespace ash 139 140#endif // ASH_SYSTEM_CHROMEOS_NETWORK_NETWORK_STATE_LIST_DETAILED_VIEW 141