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