webmenurunner_mac.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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 3// found in the LICENSE file. 4 5#ifndef WEBKIT_GLUE_WEBMENURUNNER_MAC_H_ 6#define WEBKIT_GLUE_WEBMENURUNNER_MAC_H_ 7 8#import <Cocoa/Cocoa.h> 9 10#include <vector> 11 12#include "base/scoped_nsobject.h" 13#include "webkit/glue/webmenuitem.h" 14 15 16// WebMenuRunner --------------------------------------------------------------- 17// A class for determining whether an item was selected from an HTML select 18// control, or if the menu was dismissed without making a selection. If a menu 19// item is selected, MenuDelegate is informed and sets a flag which can be 20// queried after the menu has finished running. 21 22@interface WebMenuRunner : NSObject { 23 @private 24 // The native menu control. 25 scoped_nsobject<NSMenu> menu_; 26 27 // A flag set to YES if a menu item was chosen, or NO if the menu was 28 // dismissed without selecting an item. 29 BOOL menuItemWasChosen_; 30 31 // The index of the selected menu item. 32 int index_; 33 34 // The font size being used for the menu. 35 CGFloat fontSize_; 36 37 // Whether the menu should be displayed right-aligned. 38 BOOL rightAligned_; 39} 40 41// Initializes the MenuDelegate with a list of items sent from WebKit. 42- (id)initWithItems:(const std::vector<WebMenuItem>&)items 43 fontSize:(CGFloat)fontSize 44 rightAligned:(BOOL)rightAligned; 45 46// Returns YES if an item was selected from the menu, NO if the menu was 47// dismissed. 48- (BOOL)menuItemWasChosen; 49 50// Displays and runs a native popup menu. 51- (void)runMenuInView:(NSView*)view 52 withBounds:(NSRect)bounds 53 initialIndex:(int)index; 54 55// Returns the index of selected menu item, or its initial value (-1) if no item 56// was selected. 57- (int)indexOfSelectedItem; 58 59@end // @interface WebMenuRunner 60 61namespace webkit_glue { 62// Helper function for users of WebMenuRunner, for manufacturing input events to 63// send to WebKit. If |item_chosen| is YES, we manufacture a mouse click event 64// that corresponds to the menu item that was selected, |selected_index|, based 65// on the position of the mouse click. Of |item_chosen| is NO, we create a 66// keyboard event that simulates an ESC (menu dismissal) action. The event is 67// designed to be sent to WebKit for processing by the PopupMenu class. 68NSEvent* EventWithMenuAction(BOOL item_chosen, int window_num, 69 int item_height, int selected_index, 70 NSRect menu_bounds, NSRect view_bounds); 71} // namespace webkit_glue 72 73#endif // WEBKIT_GLUE_WEBMENURUNNER_MAC_H_ 74