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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
(***********************************************************************)
(* *)
(* MLTk, Tcl/Tk interface of OCaml *)
(* *)
(* Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis *)
(* projet Cristal, INRIA Rocquencourt *)
(* Jacques Garrigue, Kyoto University RIMS *)
(* *)
(* Copyright 2002 Institut National de Recherche en Informatique et *)
(* en Automatique and Kyoto University. All rights reserved. *)
(* This file is distributed under the terms of the GNU Library *)
(* General Public License, with the special exception on linking *)
(* described in file LICENSE found in the OCaml source tree. *)
(* *)
(***********************************************************************)
module Widget : sig
type widget = Widget.any Widget.widget
(* widget is an abstract type *)
val default_toplevel : widget
(* [default_toplevel] is "." in Tk, the toplevel widget that is
always existing during a Tk session. Destroying [default_toplevel]
ends the main loop
*)
val atom : parent: widget -> name: string -> widget
(* [atom parent name] returns the widget [parent.name]. The widget is
not created. Only its name is returned. In a given parent, there may
only exist one children for a given name.
This function should only be used to check the existence of a widget
with a known name. It doesn't add the widget to the internal tables
of CamlTk.
*)
val name : widget -> string
(* [name w] returns the name (tk "path") of a widget *)
(*--*)
(* The following functions are used internally.
There is normally no need for them in users programs
*)
val known_class : widget -> string
(* [known_class w] returns the class of a widget (e.g. toplevel, frame),
as known by the CamlTk interface.
Not equivalent to "winfo w" in Tk.
*)
val dummy : widget
(* [dummy] is a widget used as context when we don't have any.
It is *not* a real widget.
*)
val new_atom : parent: widget -> ?name: string -> string -> widget
(* incompatible with the classic camltk *)
val get_atom : string -> widget
(* [get_atom path] returns the widget with Tk path [path] *)
val remove : widget -> unit
(* [remove w] removes widget from the internal tables *)
(* Subtypes tables *)
val widget_any_table : string list
val widget_button_table : string list
val widget_canvas_table : string list
val widget_checkbutton_table : string list
val widget_entry_table : string list
val widget_frame_table : string list
val widget_label_table : string list
val widget_listbox_table : string list
val widget_menu_table : string list
val widget_menubutton_table : string list
val widget_message_table : string list
val widget_radiobutton_table : string list
val widget_scale_table : string list
val widget_scrollbar_table : string list
val widget_text_table : string list
val widget_toplevel_table : string list
val chk_sub : string -> 'a list -> 'a -> unit
val check_class : widget -> string list -> unit
(* Widget subtyping *)
exception IllegalWidgetType of string
(* Raised when widget command applied illegally*)
(* this function is not used, but introduced for the compatibility
with labltk. useless for camltk users *)
val coe : 'a Widget.widget -> Widget.any Widget.widget
end
module Protocol : sig
open Widget
(* Lower level interface *)
exception TkError of string
(* Raised by the communication functions *)
val debug : bool ref
(* When set to true, displays approximation of intermediate Tcl code *)
type tkArgs =
TkToken of string
| TkTokenList of tkArgs list (* to be expanded *)
| TkQuote of tkArgs (* mapped to Tcl list *)
(* Misc *)
external splitlist : string -> string list
= "camltk_splitlist"
val add_destroy_hook : (widget -> unit) -> unit
(* Opening, closing, and mainloop *)
val default_display : unit -> string
val opentk : unit -> widget
(* The basic initialization function. [opentk ()] parses automatically
the command line options and use the tk related options in them
such as "-display localhost:0" to initialize Tk applications.
Consult wish manpage about the supported options. *)
val keywords : (string * Arg.spec * string) list
(* Command line parsing specification for Arg.parse, which contains
the standard Tcl/Tk command line options such as "-display" and "-name".
These Tk command line options are used by opentk *)
val opentk_with_args : string list -> widget
(* [opentk_with_args argv] invokes [opentk] with the tk related
command line options given by [argv] to the executable program. *)
val openTk : ?display:string -> ?clas:string -> unit -> widget
(* [openTk ~display:display ~clas:clas ()] is equivalent to
[opentk ["-display"; display; "-name"; clas]] *)
(* Legacy opentk functions *)
val openTkClass: string -> widget
(* [openTkClass class] is equivalent to [opentk ["-name"; class]] *)
val openTkDisplayClass: string -> string -> widget
(* [openTkDisplayClass disp class] is equivalent to
[opentk ["-display"; disp; "-name"; class]] *)
val closeTk : unit -> unit
val finalizeTk : unit -> unit
(* Finalize tcl/tk before exiting. This function will be automatically
called when you call [Pervasives.exit ()] *)
val mainLoop : unit -> unit
(* Direct evaluation of tcl code *)
val tkEval : tkArgs array -> string
val tkCommand : tkArgs array -> unit
(* Returning a value from a Tcl callback *)
val tkreturn: string -> unit
(* Callbacks: this is private *)
type cbid = Protocol.cbid
type callback_buffer = string list
(* Buffer for reading callback arguments *)
val callback_naming_table : (cbid, callback_buffer -> unit) Hashtbl.t
(* CAMLTK val callback_memo_table : (widget, cbid) Hashtbl.t *)
val callback_memo_table : (widget, cbid) Hashtbl.t
(* Exported for debug purposes only. Don't use them unless you
know what you are doing *)
val new_function_id : unit -> cbid
val string_of_cbid : cbid -> string
val register_callback : widget -> callback:(callback_buffer -> unit) -> string
(* Callback support *)
val clear_callback : cbid -> unit
(* Remove a given callback from the table *)
val remove_callbacks : widget -> unit
(* Clean up callbacks associated to widget. Must be used only when
the Destroy event is bind by the user and masks the default
Destroy event binding *)
val cTKtoCAMLwidget : string -> widget
val cCAMLtoTKwidget : string list -> widget -> tkArgs
val register : string -> callback:(callback_buffer -> unit) -> unit
(*-*)
val prerr_cbid : cbid -> unit
end
module Textvariable : sig
open Widget
open Protocol
type textVariable = Textvariable.textVariable
(* TextVariable is an abstract type *)
val create : ?on: widget -> unit -> textVariable
(* Allocation of a textVariable with lifetime associated to widget
if a widget is specified *)
val create_temporary : widget -> textVariable
(* for backward compatibility
[create_temporary w] is equivalent to [create ~on:w ()] *)
val set : textVariable -> string -> unit
(* Setting the val of a textVariable *)
val get : textVariable -> string
(* Reading the val of a textVariable *)
val name : textVariable -> string
(* Its tcl name *)
val cCAMLtoTKtextVariable : textVariable -> tkArgs
(* Internal conversion function *)
val handle : textVariable -> (unit -> unit) -> unit
(* Callbacks on variable modifications *)
val coerce : string -> textVariable
(*-*)
val free : textVariable -> unit
end
module Fileevent : sig
open Unix
val add_fileinput : file_descr -> (unit -> unit) -> unit
val remove_fileinput: file_descr -> unit
val add_fileoutput : file_descr -> (unit -> unit) -> unit
val remove_fileoutput: file_descr -> unit
(* see [tk] module *)
end
module Timer : sig
type t = Timer.t
val add : int -> (unit -> unit) -> t
val set : int -> (unit -> unit) -> unit
val remove : t -> unit
end
(*
Tkwait exists, but is not used in support
module Tkwait : sig
val internal_tracevis : string -> Protocol.cbid -> unit
val internal_tracedestroy : string -> Protocol.cbid -> unit
end
*)
|