module Bogue:sig
..end
General purpose GUI (Graphical user interface) library for Ocaml.
Bogue is a lightweight and fast GUI for developing desktop applications, games, or for easy debugging of non-GUI programs.
Bogue is entirely written in ocaml except for the hardware accelerated graphics library SDL2.
This documentation is best viewed on this page. (While on ocaml.org some links may be broken.)
For a quick start, see Bogue's general principles, the minimal example, and the tutorials. (Again, if the links don't work, make sure you are viewing this page from here.)
The main modules are
Main
(creating, running, and quitting your app),Layout
(arranging widgets to form sophisticated interfaces like table,
menus, etc.) andWidget
(the building blocks, like labels, buttons, etc.).The only thing that open Bogue
does is to bring these modules into your
namespace. They have quite common names, so beware of conflict. In case of
doubt, don't open Bogue
, and access the modules by using the Bogue
prefix, for instance Bogue.Widget.label
. The Widget
and Layout
modules are probably the ones that you will find yourself using the most, so
it's a good idea to alias them:
module W = Bogue.Widget
module L = Bogue.Layout
module Theme:sig
..end
Theme variables.
module Utils:sig
..end
Utilities.
module Time:sig
..end
Time in msec.
module Var:sig
..end
Global variables with mutex.
module Timeout:sig
..end
Delayed actions.
module Trigger:sig
..end
Dealing with events.
module Mixer:sig
..end
Basic audio mixer for sound effects.
module Sync:sig
..end
Synchronized execution queue.
module Draw:sig
..end
Low-level graphics and colors.
module Mouse:sig
..end
Mouse and touchscreen information.
module Tvar:sig
..end
Transform variables
module Avar:sig
..end
Animated variables.
module Selection:sig
..end
Unions of ranges of integers
Widgets are building blocks of the GUI. They also receive all events (mouse
focus, etc.) and contain the intelligence of your GUI, through connections (or callbacks, see Widget.connection
). However, in order to
be displayed, they need to be packed into layouts (Layout.t
).
The main module for dealing with widgets is Widget
.
module Image:sig
..end
Image widget.
module Style:sig
..end
Line and box styles.
module Label:sig
..end
One-line text widget.
module Button:sig
..end
Button widget with text or icon.
module Slider:sig
..end
Slider widget.
module Check:sig
..end
Checkbox widget.
module Text_display:sig
..end
Multi-line text display widget.
module Text_input:sig
..end
One-line text-input widget.
module Box:sig
..end
Box widget.
module Sdl_area:sig
..end
SDL Area widget.
module Widget:sig
..end
Creating widgets and giving life to them
module Update:sig
..end
Updating widgets
Layouts are rectangular graphical placeholders, in which you should pack all your widgets in order to display your GUI. Sophisticated gadgets are usually obtained by combining several layouts together.
module Layout:sig
..end
The main, all-purpose graphics container.
module Space:sig
..end
Adjust various spacing and sizes of layouts.
module Print:sig
..end
Convert Bogue objects to strings for debugging.
module Snapshot:sig
..end
Create an image from a Layout.
module Long_list:sig
..end
Handle large lists by not displaying all elements at once.
module Tabs:sig
..end
Switch between layouts using Tabs.
module Popup:sig
..end
Put layouts on top of others.
module Menu:sig
..end
Various types of menus.
module Select:sig
..end
Drop-down select list.
module Radiolist:sig
..end
Check list with a single choice.
module Table:sig
..end
Tables with sortable columns and selectable rows.
module Window:sig
..end
Windows
Because a GUI continuously waits for user interaction, everything has to run
inside a loop. You start the loop with run
, and this is usually the last
command of your Bogue code.
module Main:sig
..end
Control the workflow of the GUI mainloop.
module Bogue: Main
Alias for Main
Here is a minimal example with a label and a check box.
open Bogue
module W = Widget
module L = Layout
let main () =
let b = W.check_box () in
let l = W.label "Hello world" in
let layout = L.flat_of_w [b;l] in
let board = Bogue.of_layout layout in
Bogue.run board;;
let () = main ();
Bogue.quit ()
This can be compiled to bytecode with
ocamlfind ocamlc -package bogue -linkpkg -o minimal -thread minimal.ml
and to native code with
ocamlfind ocamlopt -package bogue -linkpkg -o minimal -thread minimal.ml
Then execute the compiled code:
./minimal
A window should open which should look like this:
You may also evaluate this code in a Toplevel! (for instance utop
, or in an emacs
session...). Just insert
#thread;; #require "bogue";;
at the top, then paste the example code above, and add ;;
at the end.