Module Bogue.Menu

module Menu: sig .. end

Various types of menus.

The generic Menu.create function produces menus whose entries can be arbitrary layouts located at arbitrary places. But for usual entries, it is enough to provide a string for the entry label, and the layout will be constructed automatically.

The specialized Menu.bar function will produce a familiar menu bar with drop-down submenus.

Dependency graph

type t 
type action = unit -> unit 
type label = 
| Text of string
| Layout of Layout.t
type entry = {
   label : label;
   content : content;
}
type content = 
| Action of action
| Flat of entry list (*

A Flat content will produce a horizontal menu

*)
| Tower of entry list (*

A Tower content will produce a vertical menu

*)
| Custom of entry list (*

In a Custom content, only Layout labels should be used, and their position should be defined before creating the menu.

*)
| Separator (*

Currently only used for inserting separator lines in Tower menus.

*)
val create : ?dst:Layout.t -> content -> t

Generic menu creation, inserted in the dst layout.

val add_bar : dst:Layout.t -> entry list -> unit

Creation of a menu bar in the dst layout, with drop-down submenus. bar dst entries inserts a layout which contains the menu bar into the top of the dst layout (so, some room should be provided). The dst layout should be big enough to contain the submenus. Any item flowing out of dst will not get focus.

val bar : entry list -> Layout.t

Return a menu layout that will be installed with Menu.add_bar into the top house at startup.

val separator : entry