BogueSourceGeneral 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.
For a quick start, see Bogue's general principles, and the minimal example.
The only thing that open Bogue does is to bring these modules into your namespace. The have quite common names, so beware of conflict. In case of doubt, don't open Bogue, and access to 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.LayoutWidgets 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).
Multi-line text display widget
One-line text-input widget
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.
Because a GUI continuously waits for user interaction, everything has to run inside a loop.
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.make [] [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
You may also evaluated 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.