| 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/menu_item_view.h" | 5 #include "views/controls/menu/menu_item_view.h" |
| 6 | 6 |
| 7 #include "base/i18n/case_conversion.h" | 7 #include "base/i18n/case_conversion.h" |
| 8 #include "base/stl_util-inl.h" | 8 #include "base/stl_util-inl.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "grit/app_strings.h" | 10 #include "grit/app_strings.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 // is itself a MenuItemView, but it uses a different ID so that it isn't | 33 // is itself a MenuItemView, but it uses a different ID so that it isn't |
| 34 // identified as a MenuItemView. | 34 // identified as a MenuItemView. |
| 35 | 35 |
| 36 class EmptyMenuMenuItem : public MenuItemView { | 36 class EmptyMenuMenuItem : public MenuItemView { |
| 37 public: | 37 public: |
| 38 explicit EmptyMenuMenuItem(MenuItemView* parent) | 38 explicit EmptyMenuMenuItem(MenuItemView* parent) |
| 39 : MenuItemView(parent, 0, NORMAL) { | 39 : MenuItemView(parent, 0, NORMAL) { |
| 40 SetTitle(UTF16ToWide( | 40 SetTitle(UTF16ToWide( |
| 41 l10n_util::GetStringUTF16(IDS_APP_MENU_EMPTY_SUBMENU))); | 41 l10n_util::GetStringUTF16(IDS_APP_MENU_EMPTY_SUBMENU))); |
| 42 // Set this so that we're not identified as a normal menu item. | 42 // Set this so that we're not identified as a normal menu item. |
| 43 SetID(kEmptyMenuItemViewID); | 43 set_id(kEmptyMenuItemViewID); |
| 44 SetEnabled(false); | 44 SetEnabled(false); |
| 45 } | 45 } |
| 46 | 46 |
| 47 virtual bool GetTooltipText(const gfx::Point& p, std::wstring* tooltip) { | 47 virtual bool GetTooltipText(const gfx::Point& p, std::wstring* tooltip) { |
| 48 // Empty menu items shouldn't have a tooltip. | 48 // Empty menu items shouldn't have a tooltip. |
| 49 return false; | 49 return false; |
| 50 } | 50 } |
| 51 | 51 |
| 52 private: | 52 private: |
| 53 DISALLOW_COPY_AND_ASSIGN(EmptyMenuMenuItem); | 53 DISALLOW_COPY_AND_ASSIGN(EmptyMenuMenuItem); |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 return 0; | 434 return 0; |
| 435 } | 435 } |
| 436 | 436 |
| 437 MenuItemView* MenuItemView::GetMenuItemByID(int id) { | 437 MenuItemView* MenuItemView::GetMenuItemByID(int id) { |
| 438 if (GetCommand() == id) | 438 if (GetCommand() == id) |
| 439 return this; | 439 return this; |
| 440 if (!HasSubmenu()) | 440 if (!HasSubmenu()) |
| 441 return NULL; | 441 return NULL; |
| 442 for (int i = 0; i < GetSubmenu()->child_count(); ++i) { | 442 for (int i = 0; i < GetSubmenu()->child_count(); ++i) { |
| 443 View* child = GetSubmenu()->GetChildViewAt(i); | 443 View* child = GetSubmenu()->GetChildViewAt(i); |
| 444 if (child->GetID() == MenuItemView::kMenuItemViewID) { | 444 if (child->id() == MenuItemView::kMenuItemViewID) { |
| 445 MenuItemView* result = static_cast<MenuItemView*>(child)-> | 445 MenuItemView* result = static_cast<MenuItemView*>(child)-> |
| 446 GetMenuItemByID(id); | 446 GetMenuItemByID(id); |
| 447 if (result) | 447 if (result) |
| 448 return result; | 448 return result; |
| 449 } | 449 } |
| 450 } | 450 } |
| 451 return NULL; | 451 return NULL; |
| 452 } | 452 } |
| 453 | 453 |
| 454 void MenuItemView::ChildrenChanged() { | 454 void MenuItemView::ChildrenChanged() { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 delegate_ = delegate; | 548 delegate_ = delegate; |
| 549 controller_ = NULL; | 549 controller_ = NULL; |
| 550 canceled_ = false; | 550 canceled_ = false; |
| 551 parent_menu_item_ = parent; | 551 parent_menu_item_ = parent; |
| 552 type_ = type; | 552 type_ = type; |
| 553 selected_ = false; | 553 selected_ = false; |
| 554 command_ = command; | 554 command_ = command; |
| 555 submenu_ = NULL; | 555 submenu_ = NULL; |
| 556 show_mnemonics_ = false; | 556 show_mnemonics_ = false; |
| 557 // Assign our ID, this allows SubmenuItemView to find MenuItemViews. | 557 // Assign our ID, this allows SubmenuItemView to find MenuItemViews. |
| 558 SetID(kMenuItemViewID); | 558 set_id(kMenuItemViewID); |
| 559 has_icons_ = false; | 559 has_icons_ = false; |
| 560 | 560 |
| 561 MenuDelegate* root_delegate = GetDelegate(); | 561 MenuDelegate* root_delegate = GetDelegate(); |
| 562 if (root_delegate) | 562 if (root_delegate) |
| 563 SetEnabled(root_delegate->IsCommandEnabled(command)); | 563 SetEnabled(root_delegate->IsCommandEnabled(command)); |
| 564 } | 564 } |
| 565 | 565 |
| 566 void MenuItemView::DropMenuClosed(bool notify_delegate) { | 566 void MenuItemView::DropMenuClosed(bool notify_delegate) { |
| 567 DCHECK(controller_); | 567 DCHECK(controller_); |
| 568 DCHECK(!controller_->IsBlockingRun()); | 568 DCHECK(!controller_->IsBlockingRun()); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 } | 641 } |
| 642 } | 642 } |
| 643 } | 643 } |
| 644 | 644 |
| 645 void MenuItemView::RemoveEmptyMenus() { | 645 void MenuItemView::RemoveEmptyMenus() { |
| 646 DCHECK(HasSubmenu()); | 646 DCHECK(HasSubmenu()); |
| 647 // Iterate backwards as we may end up removing views, which alters the child | 647 // Iterate backwards as we may end up removing views, which alters the child |
| 648 // view count. | 648 // view count. |
| 649 for (int i = submenu_->child_count() - 1; i >= 0; --i) { | 649 for (int i = submenu_->child_count() - 1; i >= 0; --i) { |
| 650 View* child = submenu_->GetChildViewAt(i); | 650 View* child = submenu_->GetChildViewAt(i); |
| 651 if (child->GetID() == MenuItemView::kMenuItemViewID) { | 651 if (child->id() == MenuItemView::kMenuItemViewID) { |
| 652 MenuItemView* menu_item = static_cast<MenuItemView*>(child); | 652 MenuItemView* menu_item = static_cast<MenuItemView*>(child); |
| 653 if (menu_item->HasSubmenu()) | 653 if (menu_item->HasSubmenu()) |
| 654 menu_item->RemoveEmptyMenus(); | 654 menu_item->RemoveEmptyMenus(); |
| 655 } else if (child->GetID() == EmptyMenuMenuItem::kEmptyMenuItemViewID) { | 655 } else if (child->id() == EmptyMenuMenuItem::kEmptyMenuItemViewID) { |
| 656 submenu_->RemoveChildView(child); | 656 submenu_->RemoveChildView(child); |
| 657 delete child; | 657 delete child; |
| 658 child = NULL; | 658 child = NULL; |
| 659 } | 659 } |
| 660 } | 660 } |
| 661 } | 661 } |
| 662 | 662 |
| 663 void MenuItemView::AdjustBoundsForRTLUI(gfx::Rect* rect) const { | 663 void MenuItemView::AdjustBoundsForRTLUI(gfx::Rect* rect) const { |
| 664 rect->set_x(GetMirroredXForRect(*rect)); | 664 rect->set_x(GetMirroredXForRect(*rect)); |
| 665 } | 665 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 } | 728 } |
| 729 | 729 |
| 730 string16 MenuItemView::GetAcceleratorText() { | 730 string16 MenuItemView::GetAcceleratorText() { |
| 731 Accelerator accelerator; | 731 Accelerator accelerator; |
| 732 return (GetDelegate() && | 732 return (GetDelegate() && |
| 733 GetDelegate()->GetAccelerator(GetCommand(), &accelerator)) ? | 733 GetDelegate()->GetAccelerator(GetCommand(), &accelerator)) ? |
| 734 accelerator.GetShortcutText() : string16(); | 734 accelerator.GetShortcutText() : string16(); |
| 735 } | 735 } |
| 736 | 736 |
| 737 } // namespace views | 737 } // namespace views |
| OLD | NEW |