|
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 ()
|