network_menu_button.h revision 513209b27ff55e2841eac0e4120199c23acce758
1// Copyright (c) 2006-2008 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 CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_BUTTON_H_ 6#define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_BUTTON_H_ 7#pragma once 8 9#include <string> 10 11#include "app/throb_animation.h" 12#include "base/timer.h" 13#include "chrome/browser/chromeos/cros/network_library.h" 14#include "chrome/browser/chromeos/status/network_menu.h" 15#include "chrome/browser/chromeos/status/status_area_button.h" 16 17namespace gfx { 18class Canvas; 19} 20 21namespace chromeos { 22 23class StatusAreaHost; 24 25// The network menu button in the status area. 26// This class will handle getting the wifi networks and populating the menu. 27// It will also handle the status icon changing and connecting to another 28// wifi/cellular network. 29// 30// The network menu looks like this: 31// 32// <icon> Ethernet 33// <icon> Wifi Network A 34// <icon> Wifi Network B 35// <icon> Wifi Network C 36// <icon> Cellular Network A 37// <icon> Cellular Network B 38// <icon> Cellular Network C 39// <icon> Other... 40// -------------------------------- 41// Disable Wifi 42// Disable Celluar 43// -------------------------------- 44// <IP Address> 45// Network settings... 46// 47// <icon> will show the strength of the wifi/cellular networks. 48// The label will be BOLD if the network is currently connected. 49class NetworkMenuButton : public StatusAreaButton, 50 public NetworkMenu, 51 public NetworkLibrary::NetworkManagerObserver, 52 public NetworkLibrary::NetworkObserver, 53 public NetworkLibrary::CellularDataPlanObserver { 54 public: 55 explicit NetworkMenuButton(StatusAreaHost* host); 56 virtual ~NetworkMenuButton(); 57 58 // AnimationDelegate implementation. 59 virtual void AnimationProgressed(const Animation* animation); 60 61 // NetworkLibrary::NetworkManagerObserver implementation. 62 virtual void OnNetworkManagerChanged(NetworkLibrary* cros); 63 // NetworkLibrary::NetworkObserver implementation. 64 virtual void OnNetworkChanged(NetworkLibrary* cros, const Network* network); 65 // NetworkLibrary::CellularDataPlanObserver implementation. 66 virtual void OnCellularDataPlanChanged(NetworkLibrary* cros); 67 68 // Sets the badge icon. 69 void SetBadge(const SkBitmap& badge) { badge_ = badge; } 70 SkBitmap badge() const { return badge_; } 71 72 protected: 73 // StatusAreaButton implementation. 74 virtual void DrawIcon(gfx::Canvas* canvas); 75 76 // NetworkMenu implementation: 77 virtual bool IsBrowserMode() const; 78 virtual gfx::NativeWindow GetNativeWindow() const; 79 virtual void OpenButtonOptions(); 80 virtual bool ShouldOpenButtonOptions() const; 81 82 private: 83 void SetNetworkIcon(const Network* network); 84 void SetNetworkBadge(NetworkLibrary* cros, const Network* network); 85 86 // The status area host, 87 StatusAreaHost* host_; 88 89 // A badge icon displayed on top of the icon. 90 SkBitmap badge_; 91 92 // The throb animation that does the wifi connecting animation. 93 ThrobAnimation animation_connecting_; 94 95 // The duration of the icon throbbing in milliseconds. 96 static const int kThrobDuration; 97 98 // If any network is currently active, this is the service path of the one 99 // whose status is displayed in the network menu button. 100 std::string active_network_; 101 102 DISALLOW_COPY_AND_ASSIGN(NetworkMenuButton); 103}; 104 105} // namespace chromeos 106 107#endif // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_BUTTON_H_ 108