Blame examples_labltk/demo.ml

Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*                 MLTk, Tcl/Tk interface of OCaml                     *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*    Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis    *)
Packit bd2e5d
(*               projet Cristal, INRIA Rocquencourt                    *)
Packit bd2e5d
(*            Jacques Garrigue, Kyoto University RIMS                  *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*  Copyright 2002 Institut National de Recherche en Informatique et   *)
Packit bd2e5d
(*  en Automatique and Kyoto University.  All rights reserved.         *)
Packit bd2e5d
(*  This file is distributed under the terms of the GNU Library        *)
Packit bd2e5d
(*  General Public License, with the special exception on linking      *)
Packit bd2e5d
(*  described in file LICENSE found in the OCaml source tree.          *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
Packit bd2e5d
(* $Id$ *)
Packit bd2e5d
Packit bd2e5d
(* Some CamlTk4 Demonstration by JPF *)
Packit bd2e5d
Packit bd2e5d
(* First, open these modules for convenience *)
Packit bd2e5d
open StdLabels
Packit bd2e5d
open Tk
Packit bd2e5d
Packit bd2e5d
(* Dummy let *)
Packit bd2e5d
let _ =
Packit bd2e5d
Packit bd2e5d
(* Initialize Tk *)
Packit bd2e5d
let top = openTk () in
Packit bd2e5d
(* Title setting *)
Packit bd2e5d
Wm.title_set top "LablTk demo";
Packit bd2e5d
Packit bd2e5d
(* Base frame *)
Packit bd2e5d
let base = Frame.create top in
Packit bd2e5d
pack [base];
Packit bd2e5d
Packit bd2e5d
(* Menu bar *)
Packit bd2e5d
let bar = Frame.create ~borderwidth:2 ~relief:`Raised  base in
Packit bd2e5d
pack ~fill:`X [bar];
Packit bd2e5d
Packit bd2e5d
  (* Menu and Menubutton *)
Packit bd2e5d
  let meb = Menubutton.create ~text:"Menu" bar in
Packit bd2e5d
  let men = Menu.create meb in
Packit bd2e5d
  Menu.add_command ~label:"Quit" ~command:(fun () -> closeTk (); exit 0) men;
Packit bd2e5d
  Menubutton.configure ~menu:men meb;
Packit bd2e5d
Packit bd2e5d
  (* Frames *)
Packit bd2e5d
  let base2 = Frame.create base in
Packit bd2e5d
  let left = Frame.create base2 in
Packit bd2e5d
  let right = Frame.create base2 in
Packit bd2e5d
  pack [base2];
Packit bd2e5d
  pack ~side:`Left [left; right];
Packit bd2e5d
Packit bd2e5d
    (* Widgets on left and right *)
Packit bd2e5d
Packit bd2e5d
    (* Button *)
Packit bd2e5d
    let but = Button.create ~text:"Welcome to LablTk" left in
Packit bd2e5d
Packit bd2e5d
    (* Canvas *)
Packit bd2e5d
    let can =
Packit bd2e5d
      Canvas.create ~width:100 ~height:100 ~borderwidth:1 ~relief:`Sunken left
Packit bd2e5d
    in
Packit bd2e5d
    let oval = Canvas.create_oval ~x1: 10 ~y1: 10
Packit bd2e5d
                                  ~x2: 90 ~y2: 90
Packit bd2e5d
                                  ~fill: `Red
Packit bd2e5d
                                  can
Packit bd2e5d
    in ignore oval;
Packit bd2e5d
Packit bd2e5d
    (* Check button *)
Packit bd2e5d
    let che = Checkbutton.create ~text:"Check" left in
Packit bd2e5d
Packit bd2e5d
    (* Entry *)
Packit bd2e5d
    let ent = Entry.create ~width:10 left in
Packit bd2e5d
Packit bd2e5d
    (* Label *)
Packit bd2e5d
    let lab = Label.create ~text:"Welcome to LablTk" left in
Packit bd2e5d
Packit bd2e5d
    (* Listbox *)
Packit bd2e5d
    let lis = Listbox.create left in
Packit bd2e5d
    Listbox.insert lis ~index:`End ~texts:["This"; "is"; "Listbox"];
Packit bd2e5d
Packit bd2e5d
    (* Message *)
Packit bd2e5d
    let mes = Message.create
Packit bd2e5d
        ~text: "Hello this is a message widget with very long text, but ..."
Packit bd2e5d
        left in
Packit bd2e5d
Packit bd2e5d
    (* Radio buttons *)
Packit bd2e5d
    let tv = Textvariable.create () in
Packit bd2e5d
    Textvariable.set tv "One";
Packit bd2e5d
    let radf = Frame.create right in
Packit bd2e5d
    let rads = List.map
Packit bd2e5d
        ~f:(fun t -> Radiobutton.create ~text:t ~value:t ~variable:tv radf)
Packit bd2e5d
        ["One"; "Two"; "Three"] in
Packit bd2e5d
Packit bd2e5d
    (* Scale *)
Packit bd2e5d
    let sca = Scale.create ~label:"Scale" ~length:100 ~showvalue:true right in
Packit bd2e5d
Packit bd2e5d
    (* Text and scrollbar *)
Packit bd2e5d
    let texf = Frame.create right in
Packit bd2e5d
Packit bd2e5d
      (* Text *)
Packit bd2e5d
      let tex = Text.create ~width:20 ~height:8 texf in
Packit bd2e5d
      Text.insert ~index:(`End,[]) ~text:"This is a text widget." tex;
Packit bd2e5d
Packit bd2e5d
      (* Scrollbar *)
Packit bd2e5d
      let scr = Scrollbar.create texf in
Packit bd2e5d
Packit bd2e5d
      (* Text and Scrollbar widget link *)
Packit bd2e5d
      let scroll_link sb tx =
Packit bd2e5d
        Text.configure ~yscrollcommand:(Scrollbar.set sb) tx;
Packit bd2e5d
        Scrollbar.configure ~command:(Text.yview tx) sb in
Packit bd2e5d
      scroll_link scr tex;
Packit bd2e5d
Packit bd2e5d
      pack ~side:`Right ~fill:`Y [scr];
Packit bd2e5d
      pack ~side:`Left ~fill:`Both ~expand:true [tex];
Packit bd2e5d
Packit bd2e5d
    (* Pack them *)
Packit bd2e5d
    pack ~side:`Left [meb];
Packit bd2e5d
    pack [coe but; coe can; coe che; coe ent; coe lab; coe lis; coe mes];
Packit bd2e5d
    pack [coe radf; coe sca; coe texf];
Packit bd2e5d
    pack rads;
Packit bd2e5d
Packit bd2e5d
  (* Toplevel *)
Packit bd2e5d
  let top2 = Toplevel.create top in
Packit bd2e5d
  Wm.title_set top2 "LablTk demo control";
Packit bd2e5d
  let defcol = `Color "#dfdfdf" in
Packit bd2e5d
  let selcol = `Color "#ffdfdf" in
Packit bd2e5d
  let buttons =
Packit bd2e5d
    List.map ~f:(fun (w, t, c, a) ->
Packit bd2e5d
        let b = Button.create ~text:t ~command:c top2 in
Packit bd2e5d
        bind ~events:[`Enter] ~action:(fun _ -> a selcol) b;
Packit bd2e5d
        bind ~events:[`Leave] ~action:(fun _ -> a defcol) b;
Packit bd2e5d
        b)
Packit bd2e5d
      [coe bar, "Frame", (fun () -> ()),
Packit bd2e5d
       (fun background -> Frame.configure ~background bar);
Packit bd2e5d
       coe meb, "Menubutton", (fun () -> ()),
Packit bd2e5d
       (fun background -> Menubutton.configure ~background meb);
Packit bd2e5d
       coe but, "Button", (fun () -> ()),
Packit bd2e5d
       (fun background -> Button.configure ~background but);
Packit bd2e5d
       coe can, "Canvas", (fun () -> ()),
Packit bd2e5d
       (fun background -> Canvas.configure ~background can);
Packit bd2e5d
       coe che, "CheckButton", (fun () -> ()),
Packit bd2e5d
       (fun background -> Checkbutton.configure ~background che);
Packit bd2e5d
       coe ent, "Entry", (fun () -> ()),
Packit bd2e5d
       (fun background -> Entry.configure ~background ent);
Packit bd2e5d
       coe lab, "Label", (fun () -> ()),
Packit bd2e5d
       (fun background -> Label.configure ~background lab);
Packit bd2e5d
       coe lis, "Listbox", (fun () -> ()),
Packit bd2e5d
       (fun background -> Listbox.configure ~background lis);
Packit bd2e5d
       coe mes, "Message", (fun () -> ()),
Packit bd2e5d
       (fun background -> Message.configure ~background mes);
Packit bd2e5d
       coe radf, "Radiobox", (fun () -> ()),
Packit bd2e5d
       (fun background ->
Packit bd2e5d
         List.iter ~f:(fun b -> Radiobutton.configure ~background b) rads);
Packit bd2e5d
       coe sca, "Scale", (fun () -> ()),
Packit bd2e5d
       (fun background -> Scale.configure ~background sca);
Packit bd2e5d
       coe tex, "Text", (fun () -> ()),
Packit bd2e5d
       (fun background -> Text.configure ~background tex);
Packit bd2e5d
       coe scr, "Scrollbar", (fun () -> ()),
Packit bd2e5d
       (fun background -> Scrollbar.configure ~background scr)
Packit bd2e5d
      ]
Packit bd2e5d
  in
Packit bd2e5d
    pack ~fill:`X buttons;
Packit bd2e5d
Packit bd2e5d
(* Main Loop *)
Packit bd2e5d
Printexc.print mainLoop ()