15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_config.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_delegate.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MenuDelegate::~MenuDelegate() {} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::IsItemChecked(int id) const { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 MenuDelegate::GetLabel(int id) const { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return string16(); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const gfx::Font* MenuDelegate::GetLabelFont(int id) const { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MenuDelegate::GetBackgroundColor(int command_id, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_hovered, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor* override_color) const { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MenuDelegate::GetForegroundColor(int command_id, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_hovered, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor* override_color) const { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 MenuDelegate::GetTooltipText(int id, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_loc) const { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return string16(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::GetAccelerator(int id, ui::Accelerator* accelerator) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::ShowContextMenu(MenuItemView* source, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& p, 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui::MenuSourceType source_type) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::SupportsCommand(int id) const { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::IsCommandEnabled(int id) const { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::GetContextualLabel(int id, string16* out) const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::ShouldCloseAllMenusOnExecute(int id) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuDelegate::ExecuteCommand(int id, int mouse_event_flags) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteCommand(id); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MenuDelegate::ShouldExecuteCommandWithoutClosingMenu(int id, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Event& e) { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::IsTriggerableEvent(MenuItemView* source, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& e) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return e.type() == ui::ET_GESTURE_TAP || 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.type() == ui::ET_GESTURE_TAP_DOWN || 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (e.IsMouseEvent() && (e.flags() & 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON))); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::CanDrop(MenuItemView* menu, const OSExchangeData& data) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::GetDropFormats( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView* menu, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* formats, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<OSExchangeData::CustomFormat>* custom_formats) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::AreDropTypesRequired(MenuItemView* menu) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MenuDelegate::GetDropOperation(MenuItemView* item, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::DropTargetEvent& event, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DropPosition* position) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "If you override CanDrop, you need to override this too"; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::DragDropTypes::DRAG_NONE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MenuDelegate::OnPerformDrop(MenuItemView* menu, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DropPosition position, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::DropTargetEvent& event) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "If you override CanDrop, you need to override this too"; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::DragDropTypes::DRAG_NONE; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuDelegate::CanDrag(MenuItemView* menu) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuDelegate::WriteDragData(MenuItemView* sender, OSExchangeData* data) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "If you override CanDrag, you must override this too."; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MenuDelegate::GetDragOperations(MenuItemView* sender) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "If you override CanDrag, you must override this too."; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MenuItemView* MenuDelegate::GetSiblingMenu(MenuItemView* menu, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_point, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItemView::AnchorPosition* anchor, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* has_mnemonics, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuButton** button) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MenuDelegate::GetMaxWidthForMenu(MenuItemView* menu) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: this needs to be large enough to accommodate the wrench menu with 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // big fonts. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 800; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuDelegate::WillShowMenu(MenuItemView* menu) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuDelegate::WillHideMenu(MenuItemView* menu) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MenuDelegate::GetHorizontalIconMargins(int command_id, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int icon_size, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* left_margin, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* right_margin) const { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *left_margin = 0; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *right_margin = 0; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MenuDelegate::ShouldReserveSpaceForSubmenuIndicator() const { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 160