Home | History | Annotate | Download | only in network
      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 
     17 namespace views {
     18 class Label;
     19 class View;
     20 }
     21 
     22 namespace ui {
     23 
     24 struct NetworkInfo;
     25 class NetworkListDelegate;
     26 
     27 // NetworkListView can be used to present the list of available networks to the
     28 // user.
     29 class 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