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