| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ | 6 #define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "chrome/browser/chromeos/options/network_config_view.h" | 12 #include "chrome/browser/chromeos/options/network_config_view.h" |
| 13 #include "third_party/skia/include/core/SkBitmap.h" | 13 #include "third_party/skia/include/core/SkBitmap.h" |
| 14 #include "ui/base/models/menu_model.h" | 14 #include "ui/base/models/menu_model.h" |
| 15 #include "ui/gfx/native_widget_types.h" | 15 #include "ui/gfx/native_widget_types.h" |
| 16 #include "views/controls/menu/view_menu_delegate.h" | 16 #include "views/controls/menu/view_menu_delegate.h" |
| 17 | 17 |
| 18 namespace { |
| 19 |
| 20 const int kMainCommandIndexOffset = 1000; |
| 21 const int kVPNCommandIndexOffset = 2000; |
| 22 const int kMoreCommandIndexOffset = 3000; |
| 23 |
| 24 } // namespace |
| 25 |
| 18 namespace gfx { | 26 namespace gfx { |
| 19 class Canvas; | 27 class Canvas; |
| 20 } | 28 } |
| 21 | 29 |
| 22 namespace views { | 30 namespace views { |
| 23 class Menu2; | 31 class MenuItemView; |
| 32 class MenuButton; |
| 24 } | 33 } |
| 25 | 34 |
| 26 namespace chromeos { | 35 namespace chromeos { |
| 27 | 36 |
| 28 class NetworkMenu; | 37 class NetworkMenuModel; |
| 29 | |
| 30 class NetworkMenuModel : public ui::MenuModel { | |
| 31 public: | |
| 32 struct NetworkInfo { | |
| 33 NetworkInfo(); | |
| 34 ~NetworkInfo(); | |
| 35 | |
| 36 // "ethernet" | "wifi" | "cellular" | "other". | |
| 37 std::string network_type; | |
| 38 // "connected" | "connecting" | "disconnected" | "error". | |
| 39 std::string status; | |
| 40 // status message or error message, empty if unknown status. | |
| 41 std::string message; | |
| 42 // IP address (if network is active, empty otherwise) | |
| 43 std::string ip_address; | |
| 44 // Remembered passphrase. | |
| 45 std::string passphrase; | |
| 46 // true if the network requires a passphrase. | |
| 47 bool need_passphrase; | |
| 48 // true if the network is currently remembered. | |
| 49 bool remembered; | |
| 50 // true if the network is auto connect (meaningful for Wifi only). | |
| 51 bool auto_connect; | |
| 52 }; | |
| 53 | |
| 54 explicit NetworkMenuModel(NetworkMenu* owner); | |
| 55 virtual ~NetworkMenuModel(); | |
| 56 | |
| 57 // Connect or reconnect to the network at |index|. | |
| 58 // If remember >= 0, set the favorite state of the network. | |
| 59 // Returns true if a connect occurred (e.g. menu should be closed). | |
| 60 bool ConnectToNetworkAt(int index, | |
| 61 const std::string& passphrase, | |
| 62 const std::string& ssid, | |
| 63 int remember) const; | |
| 64 | |
| 65 // Called by NetworkMenu::RunMenu to initialize list of menu items. | |
| 66 virtual void InitMenuItems(bool is_browser_mode, | |
| 67 bool should_open_button_options) = 0; | |
| 68 | |
| 69 // ui::MenuModel implementation. | |
| 70 virtual bool HasIcons() const; | |
| 71 virtual int GetItemCount() const; | |
| 72 virtual ui::MenuModel::ItemType GetTypeAt(int index) const; | |
| 73 virtual int GetCommandIdAt(int index) const; | |
| 74 virtual string16 GetLabelAt(int index) const; | |
| 75 virtual bool IsItemDynamicAt(int index) const; | |
| 76 virtual const gfx::Font* GetLabelFontAt(int index) const; | |
| 77 virtual bool GetAcceleratorAt(int index, ui::Accelerator* accelerator) const; | |
| 78 virtual bool IsItemCheckedAt(int index) const; | |
| 79 virtual int GetGroupIdAt(int index) const; | |
| 80 virtual bool GetIconAt(int index, SkBitmap* icon); | |
| 81 virtual ui::ButtonMenuItemModel* GetButtonMenuItemAt(int index) const; | |
| 82 virtual bool IsEnabledAt(int index) const; | |
| 83 virtual ui::MenuModel* GetSubmenuModelAt(int index) const; | |
| 84 virtual void HighlightChangedTo(int index); | |
| 85 virtual void ActivatedAt(int index); | |
| 86 virtual void MenuWillShow(); | |
| 87 virtual void SetMenuModelDelegate(ui::MenuModelDelegate* delegate); | |
| 88 | |
| 89 protected: | |
| 90 enum MenuItemFlags { | |
| 91 FLAG_NONE = 0, | |
| 92 FLAG_DISABLED = 1 << 0, | |
| 93 FLAG_TOGGLE_ETHERNET = 1 << 1, | |
| 94 FLAG_TOGGLE_WIFI = 1 << 2, | |
| 95 FLAG_TOGGLE_CELLULAR = 1 << 3, | |
| 96 FLAG_TOGGLE_OFFLINE = 1 << 4, | |
| 97 FLAG_ASSOCIATED = 1 << 5, | |
| 98 FLAG_ETHERNET = 1 << 6, | |
| 99 FLAG_WIFI = 1 << 7, | |
| 100 FLAG_CELLULAR = 1 << 8, | |
| 101 FLAG_OPTIONS = 1 << 9, | |
| 102 FLAG_ADD_WIFI = 1 << 10, | |
| 103 FLAG_ADD_CELLULAR = 1 << 11, | |
| 104 FLAG_VPN = 1 << 12, | |
| 105 FLAG_ADD_VPN = 1 << 13, | |
| 106 FLAG_DISCONNECT_VPN = 1 << 14, | |
| 107 FLAG_VIEW_ACCOUNT = 1 << 15, | |
| 108 }; | |
| 109 | |
| 110 struct MenuItem { | |
| 111 MenuItem() | |
| 112 : type(ui::MenuModel::TYPE_SEPARATOR), | |
| 113 sub_menu_model(NULL), | |
| 114 flags(0) {} | |
| 115 MenuItem(ui::MenuModel::ItemType type, string16 label, SkBitmap icon, | |
| 116 const std::string& service_path, int flags) | |
| 117 : type(type), | |
| 118 label(label), | |
| 119 icon(icon), | |
| 120 service_path(service_path), | |
| 121 sub_menu_model(NULL), | |
| 122 flags(flags) {} | |
| 123 MenuItem(ui::MenuModel::ItemType type, string16 label, SkBitmap icon, | |
| 124 NetworkMenuModel* sub_menu_model, int flags) | |
| 125 : type(type), | |
| 126 label(label), | |
| 127 icon(icon), | |
| 128 sub_menu_model(sub_menu_model), | |
| 129 flags(flags) {} | |
| 130 | |
| 131 ui::MenuModel::ItemType type; | |
| 132 string16 label; | |
| 133 SkBitmap icon; | |
| 134 std::string service_path; | |
| 135 NetworkMenuModel* sub_menu_model; // Weak. | |
| 136 int flags; | |
| 137 }; | |
| 138 typedef std::vector<MenuItem> MenuItemVector; | |
| 139 | |
| 140 // Our menu items. | |
| 141 MenuItemVector menu_items_; | |
| 142 | |
| 143 NetworkMenu* owner_; // Weak pointer to NetworkMenu that owns this MenuModel. | |
| 144 | |
| 145 // Top up URL of the current carrier on empty string if there's none. | |
| 146 std::string top_up_url_; | |
| 147 | |
| 148 // Carrier ID which top up URL is initialized for. | |
| 149 // Used to update top up URL only when cellular carrier has changed. | |
| 150 std::string carrier_id_; | |
| 151 | |
| 152 private: | |
| 153 // Show a NetworkConfigView modal dialog instance. | |
| 154 void ShowNetworkConfigView(NetworkConfigView* view) const; | |
| 155 | |
| 156 void ActivateCellular(const CellularNetwork* cellular) const; | |
| 157 void ShowOther(ConnectionType type) const; | |
| 158 void ShowOtherCellular() const; | |
| 159 | |
| 160 DISALLOW_COPY_AND_ASSIGN(NetworkMenuModel); | |
| 161 }; | |
| 162 | 38 |
| 163 // Menu for network menu button in the status area/welcome screen. | 39 // Menu for network menu button in the status area/welcome screen. |
| 164 // This class will populating the menu with the list of networks. | 40 // This class will populating the menu with the list of networks. |
| 165 // It will also handle connecting to another wifi/cellular network. | 41 // It will also handle connecting to another wifi/cellular network. |
| 166 // | 42 // |
| 167 // The network menu looks like this: | 43 // The network menu looks like this: |
| 168 // | 44 // |
| 169 // <icon> Ethernet | 45 // <icon> Ethernet |
| 170 // <icon> Wifi Network A | 46 // <icon> Wifi Network A |
| 171 // <icon> Wifi Network B | 47 // <icon> Wifi Network B |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 // |icon| must be non-NULL. | 125 // |icon| must be non-NULL. |
| 250 // If one of the |bottom_right_badge| or |top_left_badge| or | 126 // If one of the |bottom_right_badge| or |top_left_badge| or |
| 251 // |bottom_left_badge| icons are not NULL, they will be drawn on top of the | 127 // |bottom_left_badge| icons are not NULL, they will be drawn on top of the |
| 252 // icon. | 128 // icon. |
| 253 static SkBitmap IconForDisplay(const SkBitmap* icon, | 129 static SkBitmap IconForDisplay(const SkBitmap* icon, |
| 254 const SkBitmap* bottom_right_badge, | 130 const SkBitmap* bottom_right_badge, |
| 255 const SkBitmap* top_left_badge, | 131 const SkBitmap* top_left_badge, |
| 256 const SkBitmap* bottom_left_badge); | 132 const SkBitmap* bottom_left_badge); |
| 257 | 133 |
| 258 protected: | 134 protected: |
| 135 virtual views::MenuButton* GetMenuButton() = 0; |
| 259 virtual gfx::NativeWindow GetNativeWindow() const = 0; | 136 virtual gfx::NativeWindow GetNativeWindow() const = 0; |
| 260 virtual void OpenButtonOptions() = 0; | 137 virtual void OpenButtonOptions() = 0; |
| 261 virtual bool ShouldOpenButtonOptions() const = 0; | 138 virtual bool ShouldOpenButtonOptions() const = 0; |
| 262 | 139 |
| 263 // Notify subclasses that connection to |network| was initiated. | 140 // Notify subclasses that connection to |network| was initiated. |
| 264 virtual void OnConnectNetwork(const Network* network, | 141 virtual void OnConnectNetwork(const Network* network, |
| 265 SkBitmap selected_icon_) {} | 142 SkBitmap selected_icon_) {} |
| 266 | 143 |
| 267 // Shows network details in Web UI options window. | 144 // Shows network details in Web UI options window. |
| 268 void ShowTabbedNetworkSettings(const Network* network) const; | 145 void ShowTabbedNetworkSettings(const Network* network) const; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 289 // TODO(chocobo): Add this back when we decide to do colored bars again. | 166 // TODO(chocobo): Add this back when we decide to do colored bars again. |
| 290 // static const int kBarsImagesVLowData[]; | 167 // static const int kBarsImagesVLowData[]; |
| 291 | 168 |
| 292 // The number of animating images for network connecting. | 169 // The number of animating images for network connecting. |
| 293 static const int kNumAnimatingImages; | 170 static const int kNumAnimatingImages; |
| 294 // Animation images. These are created lazily. | 171 // Animation images. These are created lazily. |
| 295 static SkBitmap kAnimatingImages[]; | 172 static SkBitmap kAnimatingImages[]; |
| 296 static SkBitmap kAnimatingImagesBlack[]; | 173 static SkBitmap kAnimatingImagesBlack[]; |
| 297 | 174 |
| 298 // The network menu. | 175 // The network menu. |
| 299 scoped_ptr<views::Menu2> network_menu_; | 176 scoped_ptr<views::MenuItemView> network_menu_; |
| 300 | 177 |
| 301 scoped_ptr<NetworkMenuModel> main_menu_model_; | 178 scoped_ptr<NetworkMenuModel> main_menu_model_; |
| 302 | 179 |
| 303 // Holds minimum width or -1 if it wasn't set up. | 180 // Holds minimum width of the menu. |
| 304 int min_width_; | 181 int min_width_; |
| 305 | 182 |
| 306 // If true, call into the settings UI for network configuration dialogs. | 183 // If true, call into the settings UI for network configuration dialogs. |
| 307 bool use_settings_ui_; | 184 bool use_settings_ui_; |
| 308 | 185 |
| 309 DISALLOW_COPY_AND_ASSIGN(NetworkMenu); | 186 DISALLOW_COPY_AND_ASSIGN(NetworkMenu); |
| 310 }; | 187 }; |
| 311 | 188 |
| 312 } // namespace chromeos | 189 } // namespace chromeos |
| 313 | 190 |
| 314 #endif // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ | 191 #endif // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ |
| OLD | NEW |