Chromium Code Reviews| 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 #include "chrome/browser/chromeos/status/network_menu.h" | 5 #include "chrome/browser/chromeos/status/network_menu.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 #include "grit/theme_resources.h" | 30 #include "grit/theme_resources.h" |
| 31 #include "net/base/escape.h" | 31 #include "net/base/escape.h" |
| 32 #include "third_party/skia/include/core/SkBitmap.h" | 32 #include "third_party/skia/include/core/SkBitmap.h" |
| 33 #include "ui/base/l10n/l10n_util.h" | 33 #include "ui/base/l10n/l10n_util.h" |
| 34 #include "ui/base/models/menu_model.h" | 34 #include "ui/base/models/menu_model.h" |
| 35 #include "ui/base/resource/resource_bundle.h" | 35 #include "ui/base/resource/resource_bundle.h" |
| 36 #include "ui/gfx/canvas_skia.h" | 36 #include "ui/gfx/canvas_skia.h" |
| 37 #include "ui/gfx/skbitmap_operations.h" | 37 #include "ui/gfx/skbitmap_operations.h" |
| 38 #include "views/controls/menu/menu_item_view.h" | 38 #include "views/controls/menu/menu_item_view.h" |
| 39 #include "views/controls/menu/menu_model_adapter.h" | 39 #include "views/controls/menu/menu_model_adapter.h" |
| 40 #include "views/controls/menu/menu_runner.h" | |
| 40 #include "views/controls/menu/submenu_view.h" | 41 #include "views/controls/menu/submenu_view.h" |
| 41 #include "views/widget/widget.h" | 42 #include "views/widget/widget.h" |
| 42 | 43 |
| 43 namespace { | 44 namespace { |
| 44 | 45 |
| 45 // Offsets for views menu ids (main menu and submenu ids use the same | 46 // Offsets for views menu ids (main menu and submenu ids use the same |
| 46 // namespace). | 47 // namespace). |
| 47 const int kMainIndexMask = 0x1000; | 48 const int kMainIndexMask = 0x1000; |
| 48 const int kVPNIndexMask = 0x2000; | 49 const int kVPNIndexMask = 0x2000; |
| 49 const int kMoreIndexMask = 0x4000; | 50 const int kMoreIndexMask = 0x4000; |
| (...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1022 return index + kMoreIndexMask; | 1023 return index + kMoreIndexMask; |
| 1023 } | 1024 } |
| 1024 | 1025 |
| 1025 //////////////////////////////////////////////////////////////////////////////// | 1026 //////////////////////////////////////////////////////////////////////////////// |
| 1026 // NetworkMenu | 1027 // NetworkMenu |
| 1027 | 1028 |
| 1028 NetworkMenu::NetworkMenu(Delegate* delegate, bool is_browser_mode) | 1029 NetworkMenu::NetworkMenu(Delegate* delegate, bool is_browser_mode) |
| 1029 : delegate_(delegate), | 1030 : delegate_(delegate), |
| 1030 is_browser_mode_(is_browser_mode), | 1031 is_browser_mode_(is_browser_mode), |
| 1031 refreshing_menu_(false), | 1032 refreshing_menu_(false), |
| 1033 menu_item_view_(NULL), | |
| 1032 min_width_(kDefaultMinimumWidth) { | 1034 min_width_(kDefaultMinimumWidth) { |
| 1033 main_menu_model_.reset(new MainMenuModel(this)); | 1035 main_menu_model_.reset(new MainMenuModel(this)); |
| 1034 menu_model_adapter_.reset( | 1036 menu_model_adapter_.reset( |
| 1035 new views::MenuModelAdapter(main_menu_model_.get())); | 1037 new views::MenuModelAdapter(main_menu_model_.get())); |
| 1036 menu_item_view_.reset(new views::MenuItemView(menu_model_adapter_.get())); | 1038 menu_item_view_ = new views::MenuItemView(menu_model_adapter_.get()); |
| 1037 menu_item_view_->set_has_icons(true); | 1039 menu_item_view_->set_has_icons(true); |
| 1038 menu_item_view_->set_menu_position( | 1040 menu_item_view_->set_menu_position( |
| 1039 views::MenuItemView::POSITION_BELOW_BOUNDS); | 1041 views::MenuItemView::POSITION_BELOW_BOUNDS); |
| 1040 } | 1042 } |
| 1041 | 1043 |
| 1042 NetworkMenu::~NetworkMenu() { | 1044 NetworkMenu::~NetworkMenu() { |
| 1043 } | 1045 } |
| 1044 | 1046 |
| 1045 ui::MenuModel* NetworkMenu::GetMenuModel() { | 1047 ui::MenuModel* NetworkMenu::GetMenuModel() { |
| 1046 return main_menu_model_.get(); | 1048 return main_menu_model_.get(); |
| 1047 } | 1049 } |
| 1048 | 1050 |
| 1049 void NetworkMenu::CancelMenu() { | 1051 void NetworkMenu::CancelMenu() { |
| 1050 menu_item_view_->Cancel(); | 1052 menu_runner_->Cancel(); |
| 1051 } | 1053 } |
| 1052 | 1054 |
| 1053 void NetworkMenu::UpdateMenu() { | 1055 void NetworkMenu::UpdateMenu() { |
| 1054 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1056 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 1055 | 1057 |
| 1056 refreshing_menu_ = true; | 1058 refreshing_menu_ = true; |
| 1057 main_menu_model_->InitMenuItems( | 1059 main_menu_model_->InitMenuItems( |
| 1058 is_browser_mode(), delegate_->ShouldOpenButtonOptions()); | 1060 is_browser_mode(), delegate_->ShouldOpenButtonOptions()); |
| 1059 | 1061 |
| 1060 menu_model_adapter_->BuildMenu(menu_item_view_.get()); | 1062 menu_model_adapter_->BuildMenu(menu_item_view_); |
| 1061 SetMenuMargins(menu_item_view_.get(), kTopMargin, kBottomMargin); | 1063 SetMenuMargins(menu_item_view_, kTopMargin, kBottomMargin); |
| 1062 menu_item_view_->ChildrenChanged(); | 1064 menu_item_view_->ChildrenChanged(); |
| 1063 | 1065 |
| 1064 refreshing_menu_ = false; | 1066 refreshing_menu_ = false; |
| 1065 } | 1067 } |
| 1066 | 1068 |
| 1067 void NetworkMenu::RunMenu(views::View* source) { | 1069 void NetworkMenu::RunMenu(views::View* source) { |
| 1068 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); | 1070 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
| 1069 cros->RequestNetworkScan(); | 1071 cros->RequestNetworkScan(); |
| 1070 | 1072 |
| 1071 UpdateMenu(); | 1073 UpdateMenu(); |
| 1072 | 1074 |
| 1073 gfx::Point screen_location; | 1075 gfx::Point screen_location; |
| 1074 views::View::ConvertPointToScreen(source, &screen_location); | 1076 views::View::ConvertPointToScreen(source, &screen_location); |
| 1075 gfx::Rect bounds(screen_location, source->size()); | 1077 gfx::Rect bounds(screen_location, source->size()); |
| 1076 menu_item_view_->GetSubmenu()->set_minimum_preferred_width(min_width_); | 1078 menu_item_view_->GetSubmenu()->set_minimum_preferred_width(min_width_); |
| 1077 menu_item_view_->RunMenuAt(source->GetWidget()->GetTopLevelWidget(), | 1079 if (menu_runner_->RunMenuAt(source->GetWidget()->GetTopLevelWidget(), |
|
Dmitry Polukhin
2011/08/25 09:01:45
It looks like menu_runner_ is not set to initializ
| |
| 1078 delegate_->GetMenuButton(), bounds, | 1080 delegate_->GetMenuButton(), bounds, views::MenuItemView::TOPRIGHT, |
| 1079 views::MenuItemView::TOPRIGHT, true); | 1081 views::MenuRunner::HAS_MNEMONICS) == views::MenuRunner::MENU_DELETED) |
| 1082 return; | |
| 1080 } | 1083 } |
| 1081 | 1084 |
| 1082 void NetworkMenu::ShowTabbedNetworkSettings(const Network* network) const { | 1085 void NetworkMenu::ShowTabbedNetworkSettings(const Network* network) const { |
| 1083 DCHECK(network); | 1086 DCHECK(network); |
| 1084 Browser* browser = BrowserList::GetLastActive(); | 1087 Browser* browser = BrowserList::GetLastActive(); |
| 1085 if (!browser) | 1088 if (!browser) |
| 1086 return; | 1089 return; |
| 1087 std::string network_name(network->name()); | 1090 std::string network_name(network->name()); |
| 1088 if (network_name.empty() && network->type() == chromeos::TYPE_ETHERNET) { | 1091 if (network_name.empty() && network->type() == chromeos::TYPE_ETHERNET) { |
| 1089 network_name = l10n_util::GetStringUTF8( | 1092 network_name = l10n_util::GetStringUTF8( |
| 1090 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); | 1093 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); |
| 1091 } | 1094 } |
| 1092 std::string page = StringPrintf( | 1095 std::string page = StringPrintf( |
| 1093 "%s?servicePath=%s&networkType=%d&networkName=%s", | 1096 "%s?servicePath=%s&networkType=%d&networkName=%s", |
| 1094 chrome::kInternetOptionsSubPage, | 1097 chrome::kInternetOptionsSubPage, |
| 1095 EscapeUrlEncodedData(network->service_path(), true).c_str(), | 1098 EscapeUrlEncodedData(network->service_path(), true).c_str(), |
| 1096 network->type(), | 1099 network->type(), |
| 1097 EscapeUrlEncodedData(network_name, false).c_str()); | 1100 EscapeUrlEncodedData(network_name, false).c_str()); |
| 1098 browser->ShowOptionsTab(page); | 1101 browser->ShowOptionsTab(page); |
| 1099 } | 1102 } |
| 1100 | 1103 |
| 1101 } // namespace chromeos | 1104 } // namespace chromeos |
| OLD | NEW |