172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector> 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/options/network_config_view.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "third_party/skia/include/core/SkBitmap.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/models/menu_model.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/controls/menu/view_menu_delegate.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace gfx { 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Canvas; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace views { 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass Menu2; 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkMenu; 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkMenuModel : public ui::MenuModel { 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick struct NetworkInfo { 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch NetworkInfo() : 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch need_passphrase(false), remembered(true), auto_connect(true) {} 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // "ethernet" | "wifi" | "cellular" | "other". 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string network_type; 37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // "connected" | "connecting" | "disconnected" | "error". 38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string status; 39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // status message or error message, empty if unknown status. 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string message; 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // IP address (if network is active, empty otherwise) 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string ip_address; 43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Remembered passphrase. 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string passphrase; 45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // true if the network requires a passphrase. 46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool need_passphrase; 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // true if the network is currently remembered. 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool remembered; 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // true if the network is auto connect (meaningful for Wifi only). 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool auto_connect; 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick }; 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit NetworkMenuModel(NetworkMenu* owner) : owner_(owner) {} 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NetworkMenuModel() {} 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Connect or reconnect to the network at |index|. 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // If remember >= 0, set the favorite state of the network. 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Returns true if a connect occurred (e.g. menu should be closed). 59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool ConnectToNetworkAt(int index, 60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& passphrase, 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& ssid, 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int remember) const; 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called by NetworkMenu::RunMenu to initialize list of menu items. 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void InitMenuItems(bool is_browser_mode, 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool should_open_button_options) = 0; 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // ui::MenuModel implementation. 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool HasIcons() const { return true; } 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual int GetItemCount() const; 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ui::MenuModel::ItemType GetTypeAt(int index) const; 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual int GetCommandIdAt(int index) const { return index; } 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual string16 GetLabelAt(int index) const; 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual bool IsItemDynamicAt(int index) const { return true; } 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual const gfx::Font* GetLabelFontAt(int index) const; 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool GetAcceleratorAt(int index, 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::Accelerator* accelerator) const { return false; } 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool IsItemCheckedAt(int index) const; 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual int GetGroupIdAt(int index) const { return 0; } 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool GetIconAt(int index, SkBitmap* icon); 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ui::ButtonMenuItemModel* GetButtonMenuItemAt(int index) const { 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return NULL; 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool IsEnabledAt(int index) const; 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ui::MenuModel* GetSubmenuModelAt(int index) const; 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void HighlightChangedTo(int index) {} 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void ActivatedAt(int index); 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void MenuWillShow() {} 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetMenuModelDelegate(ui::MenuModelDelegate* delegate) {} 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enum MenuItemFlags { 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_NONE = 0, 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_DISABLED = 1 << 0, 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_TOGGLE_ETHERNET = 1 << 1, 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_TOGGLE_WIFI = 1 << 2, 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_TOGGLE_CELLULAR = 1 << 3, 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_TOGGLE_OFFLINE = 1 << 4, 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_ASSOCIATED = 1 << 5, 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_ETHERNET = 1 << 6, 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_WIFI = 1 << 7, 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_CELLULAR = 1 << 8, 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_OPTIONS = 1 << 9, 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_ADD_WIFI = 1 << 10, 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_ADD_CELLULAR = 1 << 11, 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_VPN = 1 << 12, 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_ADD_VPN = 1 << 13, 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_DISCONNECT_VPN = 1 << 14, 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FLAG_VIEW_ACCOUNT = 1 << 15, 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen struct MenuItem { 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MenuItem() 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : type(ui::MenuModel::TYPE_SEPARATOR), 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sub_menu_model(NULL), 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen flags(0) {} 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MenuItem(ui::MenuModel::ItemType type, string16 label, SkBitmap icon, 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& service_path, int flags) 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : type(type), 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen label(label), 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon(icon), 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_path(service_path), 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sub_menu_model(NULL), 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen flags(flags) {} 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MenuItem(ui::MenuModel::ItemType type, string16 label, SkBitmap icon, 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkMenuModel* sub_menu_model, int flags) 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : type(type), 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen label(label), 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon(icon), 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sub_menu_model(sub_menu_model), 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen flags(flags) {} 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui::MenuModel::ItemType type; 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 label; 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SkBitmap icon; 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string service_path; 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkMenuModel* sub_menu_model; // Weak. 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int flags; 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::vector<MenuItem> MenuItemVector; 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Our menu items. 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MenuItemVector menu_items_; 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkMenu* owner_; // Weak pointer to NetworkMenu that owns this MenuModel. 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Top up URL of the current carrier on empty string if there's none. 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string top_up_url_; 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Carrier ID which top up URL is initialized for. 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Used to update top up URL only when cellular carrier has changed. 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string carrier_id_; 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Show a NetworkConfigView modal dialog instance. 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShowNetworkConfigView(NetworkConfigView* view) const; 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ActivateCellular(const CellularNetwork* cellular) const; 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShowOther(ConnectionType type) const; 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShowOtherCellular() const; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkMenuModel); 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Menu for network menu button in the status area/welcome screen. 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// This class will populating the menu with the list of networks. 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// It will also handle connecting to another wifi/cellular network. 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The network menu looks like this: 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Ethernet 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Wifi Network A 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Wifi Network B 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Wifi Network C 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Cellular Network A 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Cellular Network B 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Cellular Network C 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Other... 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Private networks -> 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Virtual Network A 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> Virtual Network B 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// ---------------------------------- 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Add private network... 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Disconnect private network 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// -------------------------------- 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Disable Wifi 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Disable Celluar 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// -------------------------------- 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <IP Address> 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Network settings... 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// <icon> will show the strength of the wifi/cellular networks. 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The label will be BOLD if the network is currently connected. 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkMenu : public views::ViewMenuDelegate { 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkMenu(); 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NetworkMenu(); 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetFirstLevelMenuWidth(int width); 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Cancels the active menu. 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void CancelMenu(); 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsBrowserMode() const = 0; 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 206dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The following methods returns pointer to a shared instance of the SkBitmap. 207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This shared bitmap is owned by the resource bundle and should not be freed. 208dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 20921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Returns the Icon for a network strength for a WifiNetwork |wifi|. 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |black| is used to specify whether to return a black icon for display 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // on a light background or a white icon for display on a dark background. 212dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Expected to never return NULL. 213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static const SkBitmap* IconForNetworkStrength(const WifiNetwork* wifi, 214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool black); 215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Returns the Icon for a network strength for CellularNetwork |cellular|. 21621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // |black| is used to specify whether to return a black icon for display 21721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // on a light background or a white icon for display on a dark background. 218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Expected to never return NULL. 219dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static const SkBitmap* IconForNetworkStrength(const CellularNetwork* cellular, 220dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool black); 2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the Icon for animating network connecting. 2224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // |animation_value| is the value from Animation.GetCurrentValue() 2234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // |black| is used to specify whether to return a black icon for display 2244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // on a light background or a white icon for display on a dark background. 225dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Expected to never return NULL. 226dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static const SkBitmap* IconForNetworkConnecting(double animation_value, 227dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool black); 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 229513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns the Badge for a given network technology. 230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // This returns different colored symbols depending on cellular data left. 231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns NULL if not badge is needed. 232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static const SkBitmap* BadgeForNetworkTechnology( 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const CellularNetwork* cellular); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the Badge for a given network roaming status. 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This returns "R" badge if network is in roaming state, otherwise 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // returns NULL. Badge is supposed to be shown on top right of the icon. 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const SkBitmap* BadgeForRoamingStatus(const CellularNetwork* cellular); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the badge for the given network if it's active with vpn. 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If |network| is not null, will check if it's the active network. 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If |network| is null or if |network| is the active one, the yellow lock 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // badge will be returned, otherwise returns null. 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Badge is supposed to be shown on in bottom left corner of the icon. 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const SkBitmap* BadgeForPrivateNetworkStatus(const Network* network); 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This method will convert the |icon| bitmap to the correct size for display. 246dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // |icon| must be non-NULL. 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If |badge| icon is not NULL, it will be drawn on top of the icon in 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the bottom-right corner. 249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static SkBitmap IconForDisplay(const SkBitmap* icon, const SkBitmap* badge); 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This method will convert the |icon| bitmap to the correct size for display. 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |icon| must be non-NULL. 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If one of the |bottom_right_badge| or |top_left_badge| or 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |bottom_left_badge| icons are not NULL, they will be drawn on top of the 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // icon. 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static SkBitmap IconForDisplay(const SkBitmap* icon, 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SkBitmap* bottom_right_badge, 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SkBitmap* top_left_badge, 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SkBitmap* bottom_left_badge); 259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual gfx::NativeWindow GetNativeWindow() const = 0; 262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OpenButtonOptions() = 0; 263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool ShouldOpenButtonOptions() const = 0; 264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Notify subclasses that connection to |network| was initiated. 266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnConnectNetwork(const Network* network, 267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SkBitmap selected_icon_) {} 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Shows network details in Web UI options window. 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShowTabbedNetworkSettings(const Network* network) const; 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Update the menu (e.g. when the network list or status has changed). 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void UpdateMenu(); 274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkMenuModel; 277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // views::ViewMenuDelegate implementation. 279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void RunMenu(views::View* source, const gfx::Point& pt); 280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set to true if we are currently refreshing the menu. 282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool refreshing_menu_; 283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The number of bars images for representing network strength. 28521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static const int kNumBarsImages; 286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 287731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Bars image resources. 288731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick static const int kBarsImages[]; 289731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick static const int kBarsImagesBlack[]; 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const int kBarsImagesOrange[]; 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(chocobo): Add this back when we decide to do colored bars again. 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // static const int kBarsImagesVLowData[]; 293731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 294dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Animation images. These are created lazily. 295dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static SkBitmap kAnimatingImages[]; 296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static SkBitmap kAnimatingImagesBlack[]; 297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The network menu. 299731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_ptr<views::Menu2> network_menu_; 300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<NetworkMenuModel> main_menu_model_; 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 303731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Holds minimum width or -1 if it wasn't set up. 304731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int min_width_; 305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 306513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // If true, call into the settings UI for network configuration dialogs. 307513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool use_settings_ui_; 308513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkMenu); 310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 315