diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-19 23:48:12 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-19 23:48:12 +0000 |
commit | 3c30891915a40bac4cee93a6dc9246cf1e8d9c95 (patch) | |
tree | 32044d3196735a4abf1b5533776868de072c9899 /chrome/browser | |
parent | ba388887c335ee6e1c7ef1ff065aa550ad1bd9bf (diff) | |
download | chromium_src-3c30891915a40bac4cee93a6dc9246cf1e8d9c95.zip chromium_src-3c30891915a40bac4cee93a6dc9246cf1e8d9c95.tar.gz chromium_src-3c30891915a40bac4cee93a6dc9246cf1e8d9c95.tar.bz2 |
New network menu button UI for ChromeOS.
Added ability to change label font in gtk menu item.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/650074
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39516 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.cc | 11 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.h | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu_button.cc | 220 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu_button.h | 7 |
4 files changed, 101 insertions, 140 deletions
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index d863dbb..25e53eb 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -387,4 +387,15 @@ bool NetworkLibrary::Connected() const { return ethernet_connected() || wifi_connected() || cellular_connected(); } +const std::string& NetworkLibrary::IPAddress() const { + // Returns highest priority IP address. + if (ethernet_connected()) + return ethernet_.ip_address; + if (wifi_connected()) + return wifi_.ip_address; + if (cellular_connected()) + return cellular_.ip_address; + return ethernet_.ip_address; +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h index 57cef8c..94d5ba0 100644 --- a/chrome/browser/chromeos/cros/network_library.h +++ b/chrome/browser/chromeos/cros/network_library.h @@ -174,6 +174,9 @@ class NetworkLibrary : public URLRequestJobTracker::JobObserver { // Return true if any network is currently connected. bool Connected() const; + // Returns the current IP address if connected. If not, returns empty string. + const std::string& IPAddress() const; + // Returns the current list of wifi networks. const WifiNetworkVector& wifi_networks() const { return wifi_networks_; } diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc index dbeb0f6..26a3653 100644 --- a/chrome/browser/chromeos/status/network_menu_button.cc +++ b/chrome/browser/chromeos/status/network_menu_button.cc @@ -55,6 +55,12 @@ string16 NetworkMenuButton::GetLabelAt(int index) const { return menu_items_[index].label; } +const gfx::Font* NetworkMenuButton::GetLabelFontAt(int index) const { + return (menu_items_[index].flags & FLAG_BOLD) ? + &ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BoldFont) : + NULL; +} + bool NetworkMenuButton::IsItemCheckedAt(int index) const { // All menus::MenuModel::TYPE_CHECK menu items are checked. return true; @@ -62,7 +68,10 @@ bool NetworkMenuButton::IsItemCheckedAt(int index) const { bool NetworkMenuButton::GetIconAt(int index, SkBitmap* icon) const { if (!menu_items_[index].icon.empty()) { - *icon = menu_items_[index].icon; + // Make icon smaller (if necessary) to look better in the menu. + static const int kMinSize = 8; + *icon = SkBitmapOperations::DownsampleByTwoUntilSize( + menu_items_[index].icon, kMinSize, kMinSize); return true; } return false; @@ -87,7 +96,7 @@ void NetworkMenuButton::ActivatedAt(int index) { cros->EnableCellularNetworkDevice(!cros->cellular_enabled()); } else if (menu_items_[index].flags & FLAG_TOGGLE_OFFLINE) { cros->EnableOfflineMode(!cros->offline_mode()); - } else if (menu_items_[index].flags & FLAG_ACTIVATE_WIFI) { + } else if (menu_items_[index].flags & FLAG_WIFI) { activated_wifi_network_ = menu_items_[index].wifi_network; // If clicked on a network that we are already connected to or we are @@ -112,7 +121,12 @@ void NetworkMenuButton::ActivatedAt(int index) { window->SetBounds(gfx::Rect(point, size), parent_window_); window->Show(); } - } else if (menu_items_[index].flags & FLAG_ACTIVATE_CELLULAR) { + } else if (menu_items_[index].flags & FLAG_CELLULAR) { + // If clicked on a network that we are already connected to or we are + // currently trying to connect to, then do nothing. + if (menu_items_[index].cellular_network.name == cros->cellular_name()) + return; + cros->ConnectToCellularNetwork(menu_items_[index].cellular_network); } } @@ -348,156 +362,86 @@ void NetworkMenuButton::InitMenuItems() { NetworkLibrary* cros = NetworkLibrary::Get(); ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - bool offline_mode = cros->offline_mode(); - - // Wifi: Status. - int status = IDS_STATUSBAR_NETWORK_DEVICE_DISABLED; - if (cros->wifi_connecting()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING; - else if (cros->wifi_connected()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED; - else if (cros->wifi_enabled()) - status = IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED; - string16 label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_STATUS, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI), - l10n_util::GetStringUTF16(status)); - SkBitmap icon = cros->wifi_connected() ? - IconForNetworkStrength(cros->wifi_strength(), true) : + // Ethernet + string16 label = l10n_util::GetStringUTF16( + IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); + SkBitmap icon = cros->ethernet_connecting() || cros->ethernet_connected() ? + *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK) : *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); + int flag = (cros->ethernet_connecting() || cros->ethernet_connected()) ? + FLAG_ETHERNET & FLAG_BOLD : FLAG_ETHERNET; menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - icon, WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); + icon, WifiNetwork(), CellularNetwork(), flag)); + + // Wifi + const WifiNetworkVector& wifi_networks = cros->wifi_networks(); + // Wifi networks ssids. + for (size_t i = 0; i < wifi_networks.size(); ++i) { + label = ASCIIToUTF16(wifi_networks[i].ssid); + flag = (wifi_networks[i].ssid == cros->wifi_ssid()) ? + FLAG_WIFI & FLAG_BOLD : FLAG_WIFI; + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + IconForNetworkStrength(wifi_networks[i].strength, true), + wifi_networks[i], CellularNetwork(), flag)); + } - // Turn Wifi Off. - if (!offline_mode) { - label = cros->wifi_enabled() ? - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)) : - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)); + // Cellular + const CellularNetworkVector& cell_networks = cros->cellular_networks(); + // Cellular networks ssids. + for (size_t i = 0; i < cell_networks.size(); ++i) { + label = ASCIIToUTF16(cell_networks[i].name); + flag = (cell_networks[i].name == cros->cellular_name()) ? + FLAG_CELLULAR & FLAG_BOLD : FLAG_CELLULAR; menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_WIFI)); - - const WifiNetworkVector& networks = cros->wifi_networks(); - // Wifi networks ssids. - if (networks.empty()) { - // No networks available message. - label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); - } else { - for (size_t i = 0; i < networks.size(); ++i) { - label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - ASCIIToUTF16(networks[i].ssid)); - if (networks[i].ssid == cros->wifi_ssid()) { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_CHECK, label, - SkBitmap(), networks[i], CellularNetwork(), FLAG_ACTIVATE_WIFI)); - } else { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), networks[i], CellularNetwork(), FLAG_ACTIVATE_WIFI)); - } - } - } + IconForNetworkStrength(cell_networks[i].strength, true), + WifiNetwork(), cell_networks[i], flag)); + } - // Separator. - menu_items_.push_back(MenuItem()); + // No networks available message. + if (wifi_networks.empty() && cell_networks.empty()) { + label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); } - // Cellular: Status. - status = IDS_STATUSBAR_NETWORK_DEVICE_DISABLED; - if (cros->cellular_connecting()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING; - else if (cros->cellular_connected()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED; - else if (cros->cellular_enabled()) - status = IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED; - label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_STATUS, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR), - l10n_util::GetStringUTF16(status)); - icon = cros->cellular_connected() ? - IconForNetworkStrength(cros->cellular_strength(), true) : - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - icon, WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); + // Separator. + menu_items_.push_back(MenuItem()); - // Turn Cellular Off. - if (!offline_mode) { - label = cros->cellular_enabled() ? - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR)) : - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_CELLULAR)); - - const CellularNetworkVector& networks = cros->cellular_networks(); - // Cellular networks ssids. - if (networks.empty()) { - // No networks available message. - label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); - } else { - for (size_t i = 0; i < networks.size(); ++i) { - label = - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - ASCIIToUTF16(networks[i].name)); - if (networks[i].name == cros->cellular_name()) { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_CHECK, label, - SkBitmap(), WifiNetwork(), networks[i], FLAG_ACTIVATE_CELLULAR)); - } else { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), networks[i], FLAG_ACTIVATE_CELLULAR)); - } - } - } + // TODO(chocobo): Uncomment once we figure out how to do offline mode. + // Offline mode. +// menu_items_.push_back(MenuItem(cros->offline_mode() ? +// menus::MenuModel::TYPE_CHECK : menus::MenuModel::TYPE_COMMAND, +// l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE), +// SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_OFFLINE)); - // Separator. - menu_items_.push_back(MenuItem()); - } + // Turn Wifi Off. + label = cros->wifi_enabled() ? + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)) : + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)); + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_WIFI)); - // Ethernet: Status. - status = IDS_STATUSBAR_NETWORK_DEVICE_DISABLED; - if (cros->ethernet_connecting()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING; - else if (cros->ethernet_connected()) - status = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED; - else if (cros->ethernet_enabled()) - status = IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED; - label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_STATUS, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET), - l10n_util::GetStringUTF16(status)); - icon = cros->ethernet_connected() ? - *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK) : - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); + // Turn Cellular Off. + label = cros->cellular_enabled() ? + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR)) : + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR)); menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - icon, WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); - - // Turn Ethernet Off. - if (!offline_mode) { - label = cros->ethernet_enabled() ? - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)) : - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_ETHERNET)); + SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_CELLULAR)); + // IP address + if (cros->Connected()) { // Separator. menu_items_.push_back(MenuItem()); - } - // Offline mode. - menu_items_.push_back(MenuItem(offline_mode ? - menus::MenuModel::TYPE_CHECK : menus::MenuModel::TYPE_COMMAND, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE), - SkBitmap(), WifiNetwork(), CellularNetwork(), FLAG_TOGGLE_OFFLINE)); + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, + ASCIIToUTF16(cros->IPAddress()), SkBitmap(), + WifiNetwork(), CellularNetwork(), FLAG_DISABLED)); + } } } // namespace chromeos diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h index 1ebd3db4..97b9841 100644 --- a/chrome/browser/chromeos/status/network_menu_button.h +++ b/chrome/browser/chromeos/status/network_menu_button.h @@ -67,6 +67,7 @@ class NetworkMenuButton : public StatusAreaButton, virtual int GetCommandIdAt(int index) const { return index; } virtual string16 GetLabelAt(int index) const; virtual bool IsLabelDynamicAt(int index) const { return true; } + virtual const gfx::Font* GetLabelFontAt(int index) const; virtual bool GetAcceleratorAt(int index, menus::Accelerator* accelerator) const { return false; } virtual bool IsItemCheckedAt(int index) const; @@ -101,8 +102,10 @@ class NetworkMenuButton : public StatusAreaButton, FLAG_TOGGLE_WIFI = 1 << 2, FLAG_TOGGLE_CELLULAR = 1 << 3, FLAG_TOGGLE_OFFLINE = 1 << 4, - FLAG_ACTIVATE_WIFI = 1 << 5, - FLAG_ACTIVATE_CELLULAR = 1 << 6 + FLAG_BOLD = 1 << 5, + FLAG_ETHERNET = 1 << 6, + FLAG_WIFI = 1 << 7, + FLAG_CELLULAR = 1 << 8, }; struct MenuItem { |