File: modal.ml

package info (click to toggle)
lambda-term 3.3.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,108 kB
  • sloc: ml: 14,981; ansic: 522; makefile: 32
file content (63 lines) | stat: -rw-r--r-- 1,469 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
open Lwt
open LTerm_widget

let main () =
  let do_run, push_layer, pop_layer, exit = prepare_simple_run () in

  let vbox = new vbox in

  let button = new button "exit" in
  button#on_click exit;
  vbox#add button;

  let change = new button "change counter" in
  vbox#add change;

  let counter = ref 42 in
  let label = new label "" in
  let update_label () = label#set_text ("Counter: " ^ (string_of_int !counter)) in
  vbox#add label;
  update_label ();

  let change_counter d = fun () ->
    counter := !counter + d;
    update_label ()
  in

  let frame = new frame in
  frame#set vbox;

  (* Layer 2 *)
  let layer2 = new modal_frame in

  let vbox' = new vbox in
  layer2#set vbox';

  let message = new label "This is a new modal layer.\nPress 'close' to close it." in
  vbox'#add message;

  vbox'#add (new hline);

  let increment = new button "increment counter" in
  let decrement = new button "decrement counter" in
  increment#on_click (change_counter 1);
  decrement#on_click (change_counter (-1));
  vbox'#add increment;
  vbox'#add decrement;

  vbox'#add (new hline);

  let close = new button "close" in
  close#on_click pop_layer;
  vbox'#add close;

  (* set 'change' button to open modal layer *)
  change#on_click (push_layer layer2);

  Lazy.force LTerm.stdout >>= fun term ->
  LTerm.enable_mouse term >>= fun () ->
    Lwt.finalize
      (fun () -> do_run frame)
      (fun () -> LTerm.disable_mouse term)

let () = Lwt_main.run (main ())