/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" interface nsIDOMHTMLMenuItemElement; /** * An interface used to construct native toolbar or context menus from */ [scriptable, uuid(93F4A48F-D043-4F45-97FD-9771EA1AF976)] interface nsIMenuBuilder : nsISupports { /** * Create the top level menu or a submenu. The implementation should create * a new context for this menu, so all subsequent methods will add new items * to this newly created menu. */ void openContainer(in DOMString aLabel); /** * Add a new menu item. All menu item details can be obtained from * the element. This method is not called for hidden elements or elements * with no or empty label. The icon should be loaded only if aCanLoadIcon * is true. */ void addItemFor(in nsIDOMHTMLMenuItemElement aElement, in boolean aCanLoadIcon); /** * Create a new separator. */ void addSeparator(); /** * Remove last added separator. * Sometimes it's needed to remove last added separator, otherwise it's not * possible to implement the postprocessing in one pass. * See http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#building-menus-and-toolbars */ void undoAddSeparator(); /** * Set the context to the parent menu. */ void closeContainer(); /** * Returns a JSON string representing the menu hierarchy. For a context menu, * it will be of the form: * { * type: "menu", * children: [ * { * type: "menuitem", * label: "label", * icon: "image.png" * }, * { * type: "separator", * }, * ]; */ AString toJSONString(); /** * Invoke the action of the menuitem with assigned id aGeneratedItemId. * * @param aGeneratedItemId the menuitem id */ void click(in DOMString aGeneratedItemId); };