summaryrefslogtreecommitdiffstats
path: root/otherlibs/labltk/browser/jg_message.ml
diff options
context:
space:
mode:
Diffstat (limited to 'otherlibs/labltk/browser/jg_message.ml')
-rw-r--r--otherlibs/labltk/browser/jg_message.ml82
1 files changed, 82 insertions, 0 deletions
diff --git a/otherlibs/labltk/browser/jg_message.ml b/otherlibs/labltk/browser/jg_message.ml
new file mode 100644
index 000000000..54548a72f
--- /dev/null
+++ b/otherlibs/labltk/browser/jg_message.ml
@@ -0,0 +1,82 @@
+(* $Id$ *)
+
+open Tk
+open Jg_tk
+
+(*
+class formatted :parent :width :maxheight :minheight =
+ val parent = (parent : Widget.any Widget.widget)
+ val width = width
+ val maxheight = maxheight
+ val minheight = minheight
+ val tw = Text.create :parent :width wrap:`Word
+ val fof = Format.get_formatter_output_functions ()
+ method parent = parent
+ method init =
+ pack [tw] side:`Left fill:`Both expand:true;
+ Format.print_flush ();
+ Format.set_margin (width - 2);
+ Format.set_formatter_output_functions out:(Jg_text.output tw)
+ flush:(fun () -> ())
+ method finish =
+ Format.print_flush ();
+ Format.set_formatter_output_functions out:(fst fof) flush:(snd fof);
+ let `Linechar (l, _) = Text.index tw index:(tposend 1) in
+ Text.configure tw height:(max minheight (min l maxheight));
+ if l > 5 then
+ pack [Jg_text.add_scrollbar tw] before:tw side:`Right fill:`Y
+end
+*)
+
+let formatted :title ?:on ?:width{=60} ?:maxheight{=10} ?:minheight{=0} () =
+ let tl, frame =
+ match on with
+ Some frame -> coe frame, frame
+ | None ->
+ let tl = Jg_toplevel.titled title in
+ Jg_bind.escape_destroy tl;
+ let frame = Frame.create tl in
+ pack [frame] side:`Top fill:`Both expand:true;
+ coe tl, frame
+ in
+ let tw = Text.create frame :width wrap:`Word in
+ pack [tw] side:`Left fill:`Both expand:true;
+ Format.print_flush ();
+ Format.set_margin (width - 2);
+ let fof,fff = Format.get_formatter_output_functions () in
+ Format.set_formatter_output_functions
+ out:(Jg_text.output tw) flush:(fun () -> ());
+ tl, tw,
+ begin fun () ->
+ Format.print_flush ();
+ Format.set_formatter_output_functions out:fof flush:fff;
+ let `Linechar (l, _) = Text.index tw index:(tposend 1) in
+ Text.configure tw height:(max minheight (min l maxheight));
+ if l > 5 then
+ pack [Jg_text.add_scrollbar tw] before:tw side:`Right fill:`Y
+ end
+
+let ask :title ?:master text =
+ let tl = Jg_toplevel.titled title in
+ begin match master with None -> ()
+ | Some master -> Wm.transient_set tl :master
+ end;
+ let mw = Message.create tl :text padx:(`Pix 20) pady:(`Pix 10)
+ width:(`Pix 250) justify:`Left aspect:400 anchor:`W
+ and fw = Frame.create tl
+ and sync = Textvariable.create on:tl ()
+ and r = ref (`cancel : [`yes|`no|`cancel]) in
+ let accept = Button.create fw text:"Yes"
+ command:(fun () -> r := `yes; destroy tl)
+ and refuse = Button.create fw text:"No"
+ command:(fun () -> r := `no; destroy tl)
+ and cancel = Jg_button.create_destroyer tl parent:fw text:"Cancel"
+ in
+ bind tl events:[[],`Destroy]
+ action:(`Extend([],fun _ -> Textvariable.set sync to:"1"));
+ pack [accept; refuse; cancel] side:`Left fill:`X expand:true;
+ pack [mw] side:`Top fill:`Both;
+ pack [fw] side:`Bottom fill:`X expand:true;
+ Grab.set tl;
+ Tkwait.variable sync;
+ !r