1// Copyright 2014 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 UI_CHROMEOS_NETWORK_NETWORK_LIST_H_ 6#define UI_CHROMEOS_NETWORK_NETWORK_LIST_H_ 7 8#include <map> 9#include <set> 10#include <string> 11 12#include "chromeos/network/network_state_handler.h" 13#include "ui/chromeos/network/network_icon_animation_observer.h" 14#include "ui/chromeos/ui_chromeos_export.h" 15#include "ui/gfx/image/image_skia.h" 16 17namespace views { 18class Label; 19class View; 20} 21 22namespace ui { 23 24struct NetworkInfo; 25class NetworkListDelegate; 26 27// NetworkListView can be used to present the list of available networks to the 28// user. 29class UI_CHROMEOS_EXPORT NetworkListView 30 : public network_icon::AnimationObserver { 31 public: 32 explicit NetworkListView(NetworkListDelegate* delegate); 33 virtual ~NetworkListView(); 34 35 void UpdateNetworkList(); 36 37 // Returns whether |view| is a View that represents a network in the list. 38 // |service_path| is set to the service-path of the network if this returns 39 // true, and remains unchanged if this returns false. 40 bool IsViewInList(views::View* view, std::string* service_path) const; 41 42 void set_content_view(views::View* content) { content_ = content; } 43 44 private: 45 void UpdateNetworks( 46 const chromeos::NetworkStateHandler::NetworkStateList& networks); 47 void UpdateNetworkListInternal(); 48 bool UpdateNetworkListEntries(std::set<std::string>* new_service_paths); 49 bool UpdateNetworkChild(int index, const NetworkInfo* info); 50 bool PlaceViewAtIndex(views::View* view, int index); 51 bool UpdateInfoLabel(int message_id, int index, views::Label** label); 52 53 // network_icon::AnimationObserver: 54 virtual void NetworkIconChanged() OVERRIDE; 55 56 NetworkListDelegate* delegate_; 57 views::View* content_; 58 59 views::Label* scanning_view_; 60 views::Label* no_wifi_networks_view_; 61 views::Label* no_cellular_networks_view_; 62 63 // An owned list of network info. 64 ScopedVector<NetworkInfo> network_list_; 65 66 typedef std::map<views::View*, std::string> NetworkMap; 67 NetworkMap network_map_; 68 69 // A map of network service paths to their view. 70 typedef std::map<std::string, views::View*> ServicePathMap; 71 ServicePathMap service_path_map_; 72 73 DISALLOW_COPY_AND_ASSIGN(NetworkListView); 74}; 75 76} // namespace ui 77 78#endif // UI_CHROMEOS_NETWORK_NETWORK_LIST_H_ 79