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 "views/controls/menu/native_menu_x.h" | 5 #include "views/controls/menu/native_menu_x.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "ui/gfx/canvas_skia.h" | 9 #include "ui/gfx/canvas_skia.h" |
10 #include "ui/gfx/skia_util.h" | 10 #include "ui/gfx/skia_util.h" |
11 #include "views/controls/menu/menu_2.h" | 11 #include "views/controls/menu/menu_2.h" |
| 12 #include "views/controls/menu/menu_runner.h" |
12 #include "views/controls/menu/submenu_view.h" | 13 #include "views/controls/menu/submenu_view.h" |
13 | 14 |
14 namespace views { | 15 namespace views { |
15 | 16 |
16 NativeMenuX::NativeMenuX(Menu2* menu) | 17 NativeMenuX::NativeMenuX(Menu2* menu) |
17 : model_(menu->model()), | 18 : model_(menu->model()), |
18 ALLOW_THIS_IN_INITIALIZER_LIST(root_(new MenuItemView(this))) { | 19 ALLOW_THIS_IN_INITIALIZER_LIST(root_(new MenuItemView(this))), |
| 20 menu_runner_(new MenuRunner(root_)) { |
19 } | 21 } |
20 | 22 |
21 NativeMenuX::~NativeMenuX() { | 23 NativeMenuX::~NativeMenuX() { |
22 } | 24 } |
23 | 25 |
24 // MenuWrapper implementation: | 26 // MenuWrapper implementation: |
25 void NativeMenuX::RunMenuAt(const gfx::Point& point, int alignment) { | 27 void NativeMenuX::RunMenuAt(const gfx::Point& point, int alignment) { |
| 28 // TODO: this should really return the value from MenuRunner. |
26 UpdateStates(); | 29 UpdateStates(); |
27 root_->RunMenuAt(NULL, NULL, gfx::Rect(point, gfx::Size()), | 30 if (menu_runner_->RunMenuAt(NULL, NULL, gfx::Rect(point, gfx::Size()), |
28 alignment == Menu2::ALIGN_TOPLEFT ? MenuItemView::TOPLEFT : | 31 alignment == Menu2::ALIGN_TOPLEFT ? MenuItemView::TOPLEFT : |
29 MenuItemView::TOPRIGHT, true); | 32 MenuItemView::TOPRIGHT, MenuRunner::HAS_MNEMONICS) == |
| 33 MenuRunner::MENU_DELETED) |
| 34 return; |
30 } | 35 } |
31 | 36 |
32 void NativeMenuX::CancelMenu() { | 37 void NativeMenuX::CancelMenu() { |
33 NOTIMPLEMENTED(); | 38 NOTIMPLEMENTED(); |
34 } | 39 } |
35 | 40 |
36 void NativeMenuX::Rebuild() { | 41 void NativeMenuX::Rebuild() { |
37 if (SubmenuView* submenu = root_->GetSubmenu()) { | 42 if (SubmenuView* submenu = root_->GetSubmenu()) |
38 submenu->RemoveAllChildViews(true); | 43 submenu->RemoveAllChildViews(true); |
39 } | 44 AddMenuItemsFromModel(root_, model_); |
40 AddMenuItemsFromModel(root_.get(), model_); | |
41 } | 45 } |
42 | 46 |
43 void NativeMenuX::UpdateStates() { | 47 void NativeMenuX::UpdateStates() { |
44 SubmenuView* submenu = root_->CreateSubmenu(); | 48 SubmenuView* submenu = root_->CreateSubmenu(); |
45 UpdateMenuFromModel(submenu, model_); | 49 UpdateMenuFromModel(submenu, model_); |
46 } | 50 } |
47 | 51 |
48 gfx::NativeMenu NativeMenuX::GetNativeMenu() const { | 52 gfx::NativeMenu NativeMenuX::GetNativeMenu() const { |
49 NOTIMPLEMENTED(); | 53 NOTIMPLEMENTED(); |
50 return NULL; | 54 return NULL; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 } | 159 } |
156 | 160 |
157 // MenuWrapper, public: | 161 // MenuWrapper, public: |
158 | 162 |
159 // static | 163 // static |
160 MenuWrapper* MenuWrapper::CreateWrapper(Menu2* menu) { | 164 MenuWrapper* MenuWrapper::CreateWrapper(Menu2* menu) { |
161 return new NativeMenuX(menu); | 165 return new NativeMenuX(menu); |
162 } | 166 } |
163 | 167 |
164 } // namespace views | 168 } // namespace views |
OLD | NEW |