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