From 993347ab3975ccc7c39dc0324255fab4a75bc0e2 Mon Sep 17 00:00:00 2001 From: Claudio Sacerdoti Coen Date: Fri, 1 Dec 2000 11:28:52 +0000 Subject: [PATCH] lablgtk_20001129* created --- .../lablgtk/lablgtk_20001129-0.1.0-1.spec | 25 + .../lablgtk/lablgtk_20001129-0.1.0.tar.gz | Bin 0 -> 407998 bytes .../lablgtk/lablgtk_20001129-0.1.0/CHANGES | 365 +++++ .../lablgtk/lablgtk_20001129-0.1.0/COPYING | 28 + .../lablgtk/lablgtk_20001129-0.1.0/Makefile | 187 +++ .../lablgtk_20001129-0.1.0/Makefile.nt | 147 ++ .../lablgtk/lablgtk_20001129-0.1.0/README | 239 +++ .../lablgtk/lablgtk_20001129-0.1.0/gBin.ml | 153 ++ .../lablgtk/lablgtk_20001129-0.1.0/gBin.mli | 163 ++ .../lablgtk/lablgtk_20001129-0.1.0/gButton.ml | 124 ++ .../lablgtk_20001129-0.1.0/gButton.mli | 144 ++ .../lablgtk_20001129-0.1.0/gContainer.ml | 75 + .../lablgtk_20001129-0.1.0/gContainer.mli | 79 + .../lablgtk/lablgtk_20001129-0.1.0/gData.ml | 60 + .../lablgtk/lablgtk_20001129-0.1.0/gData.mli | 60 + .../lablgtk/lablgtk_20001129-0.1.0/gDraw.ml | 163 ++ .../lablgtk/lablgtk_20001129-0.1.0/gDraw.mli | 107 ++ .../lablgtk/lablgtk_20001129-0.1.0/gEdit.ml | 147 ++ .../lablgtk/lablgtk_20001129-0.1.0/gEdit.mli | 146 ++ .../lablgtk/lablgtk_20001129-0.1.0/gHtml.ml | 33 + .../lablgtk/lablgtk_20001129-0.1.0/gList.ml | 162 ++ .../lablgtk/lablgtk_20001129-0.1.0/gList.mli | 158 ++ .../lablgtk/lablgtk_20001129-0.1.0/gMain.ml | 26 + .../lablgtk/lablgtk_20001129-0.1.0/gMenu.ml | 199 +++ .../lablgtk/lablgtk_20001129-0.1.0/gMenu.mli | 196 +++ .../lablgtk/lablgtk_20001129-0.1.0/gMisc.ml | 217 +++ .../lablgtk/lablgtk_20001129-0.1.0/gMisc.mli | 263 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gObj.ml | 292 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gObj.mli | 267 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gPack.ml | 217 +++ .../lablgtk/lablgtk_20001129-0.1.0/gPack.mli | 267 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gRange.ml | 83 ++ .../lablgtk/lablgtk_20001129-0.1.0/gRange.mli | 87 ++ .../lablgtk/lablgtk_20001129-0.1.0/gTree.ml | 76 + .../lablgtk/lablgtk_20001129-0.1.0/gTree.mli | 72 + .../lablgtk/lablgtk_20001129-0.1.0/gUtil.ml | 80 + .../lablgtk/lablgtk_20001129-0.1.0/gUtil.mli | 109 ++ .../lablgtk/lablgtk_20001129-0.1.0/gWindow.ml | 151 ++ .../lablgtk_20001129-0.1.0/gWindow.mli | 156 ++ .../lablgtk/lablgtk_20001129-0.1.0/gaux.ml | 17 + .../lablgtk/lablgtk_20001129-0.1.0/gdk.ml | 535 +++++++ .../lablgtk/lablgtk_20001129-0.1.0/gdk.mli | 447 ++++++ .../lablgtk_20001129-0.1.0/gdkEvent.ml | 159 ++ .../lablgtk_20001129-0.1.0/gdkKeysyms.ml | 1320 +++++++++++++++++ .../lablgtk_20001129-0.1.0/gdk_tags.var | 163 ++ .../lablgtk/lablgtk_20001129-0.1.0/glGtk.ml | 86 ++ .../lablgtk/lablgtk_20001129-0.1.0/glGtk.mli | 63 + .../lablgtk/lablgtk_20001129-0.1.0/glib.ml | 21 + .../lablgtk_20001129-0.1.0/gpointer.ml | 41 + .../lablgtk/lablgtk_20001129-0.1.0/gtk.ml | 158 ++ .../lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml | 106 ++ .../lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml | 414 ++++++ .../lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml | 170 +++ .../lablgtk_20001129-0.1.0/gtkButton.ml | 148 ++ .../lablgtk/lablgtk_20001129-0.1.0/gtkData.ml | 148 ++ .../lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml | 223 +++ .../lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml | 5 + .../lablgtk/lablgtk_20001129-0.1.0/gtkList.ml | 294 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml | 49 + .../lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml | 144 ++ .../lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml | 323 ++++ .../lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml | 56 + .../lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml | 318 ++++ .../lablgtk_20001129-0.1.0/gtkRange.ml | 147 ++ .../lablgtk_20001129-0.1.0/gtkSignal.ml | 65 + .../lablgtk_20001129-0.1.0/gtkSignal.mli | 45 + .../lablgtk_20001129-0.1.0/gtkThInit.ml | 5 + .../lablgtk_20001129-0.1.0/gtkThread.ml | 33 + .../lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml | 122 ++ .../lablgtk_20001129-0.1.0/gtkWindow.ml | 189 +++ .../lablgtk_20001129-0.1.0/gtkXmHTML.ml | 109 ++ .../lablgtk_20001129-0.1.0/gtk_tags.var | 169 +++ .../lablgtk_20001129-0.1.0/gtkgl_tags.var | 19 + .../lablgtk_20001129-0.1.0/gtkxmhtml_tags.var | 30 + .../lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c | 522 +++++++ .../lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h | 53 + .../lablgtk/lablgtk_20001129-0.1.0/ml_glib.c | 143 ++ .../lablgtk/lablgtk_20001129-0.1.0/ml_glib.h | 10 + .../lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c | 1013 +++++++++++++ .../lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h | 24 + .../lablgtk_20001129-0.1.0/ml_gtkbin.c | 118 ++ .../lablgtk_20001129-0.1.0/ml_gtkbutton.c | 75 + .../lablgtk_20001129-0.1.0/ml_gtkedit.c | 126 ++ .../lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c | 54 + .../lablgtk_20001129-0.1.0/ml_gtklist.c | 168 +++ .../lablgtk_20001129-0.1.0/ml_gtkmenu.c | 97 ++ .../lablgtk_20001129-0.1.0/ml_gtkmisc.c | 139 ++ .../lablgtk_20001129-0.1.0/ml_gtknew.c | 180 +++ .../lablgtk_20001129-0.1.0/ml_gtkpack.c | 229 +++ .../lablgtk_20001129-0.1.0/ml_gtkrange.c | 88 ++ .../lablgtk_20001129-0.1.0/ml_gtktree.c | 53 + .../lablgtk_20001129-0.1.0/ml_gtkxmhtml.c | 76 + .../lablgtk/lablgtk_20001129-0.1.0/varcc.ml | 157 ++ .../lablgtk/lablgtk_20001129-0.1.0/wrappers.c | 90 ++ .../lablgtk/lablgtk_20001129-0.1.0/wrappers.h | 225 +++ 95 files changed, 15504 insertions(+) create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c create mode 100644 helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec new file mode 100644 index 000000000..09b4b2eb9 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec @@ -0,0 +1,25 @@ +Summary: LablGTK : an interface to the GIMP Tool Kit for OCaml +Name: lablgtk_20001129 +Version: 0.1.0 +Release: 1 +Copyright: LGPL +Group: Development/Libraries +Source: ftp://ftp.kurims.kyoto-u.ac.jp/pub/lang/olabl/lablgtk-20001129.tar.gz +%description +LablGTK is an interface to the GIMP Tool Kit for OCaml. + +%prep +%setup + +%build +make configure +make +make opt + +%install +make install + +%files +%doc CHANGES COPYING README doc + +/usr/lib/ocaml/lablgtk/ diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..dbb907aba49fa8879069f440d49f47f554bc8825 GIT binary patch literal 407998 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

;n$*Z0@D|7wCNzyt{a4fb%a?pbn(WH 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

x09C4z`GQ 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

Bl{Ri{yU&4uA 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 z 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�{M70+Z+ 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 aIlbxfy~+Rom2^Q6QjkDY2pBd7*#7|d)xenm literal 0 HcmV?d00001 diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES new file mode 100644 index 000000000..5b6669cc5 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES @@ -0,0 +1,365 @@ +$Id$ + +2000.11.29 + * remove unison port, since unison already works with this snapshot + +2000.11.16 + * internal change: switch from var2def/var2conv to varcc, + and split ml_gtk.c in smaller files + +2000.8.29 + * bugs in color selection reported by Nicolas George + * changed the license + +2000.8.21 + * correct GtkStyle.set_font bug reported by Patrick Doane + +2000.7.27 + * changed GUtil.signal and GUtil.variable for better usability + * suppressed obsolete color settings in tooltips + +2000.6.19 + * patch by Michael Welsh for Gdk regions + +2000.6.15 + * add CList.set_cell_style/set_row_style + * change set_usize/set_uposition into set_geometry + * return an option rather than raise an exception for null pointers + * map empty strings to NULL when meaningful + * Gdk.Font.get_type/ascent/descent + +2000.6.14 + * add GDraw.optcolor for functions with a default (Jerome suggested) + +2000.6.8 + * apply Jerome Vouillon's patch + * changes in GtkSignal and GtkArgv.ml + +2000.6.7 + * create #misc#connect for widget generic signals + +2000.6.6 + * move notebook from GMisc to GPack + * #connect#event, #add_event, #misc#event, #misc#set_events_extension + transferred to #event su-bobject. + * #connect#drag -> #drag#connect. + * #get_type, #connect#disconnect, #connect#stop_emit transferred to #misc. + +2000.5.25 + * split misc.ml into gaux.ml and gpointer.ml + +2000.5.23 + * add GMisc.notebook#get_{tab,menu}_label. Rename nth_page to get_nth_page. + * modified ML signals in GUtil, to allow signals without widget. + +2000.5.22 + * Incompatible!: Change default for ~expand in Box.pack, + Pack.build_options, Table.build_options. Now defaults to false/`NONE. + This means that all options default to false/`NONE, except ~show + (true for all widgets except windows) and ~fill (always true but + effect controlled by ~expand). + * add GtkArgv.get_nativeint and GtkArgv.set_nativeint. + * make offset and length optional in GtkArgv.string_at_pointer. + +2000.5.10 + * rename GtkFrame to GtkBin and GFrame to GBin + * move socket to GBin + +2000.5.9 + * add arrow and image classes to GMisc + * add list and set_item_string methods to GEdit.combo + * add socket and plug classes to GContainer and GWindow + * two new examples: combo.ml and socket.ml + +2000.4.28 + * add GUtil.variable + +2000.4.27 + * add GtkXmHTML widget + +2000.4.26 + * release 1.00 + +2000.4.24 + * merge in changes for ocaml 3.00: label and syntax changes, autolink + * added better visual and colormap handling to Gdk + * GdkObj renamed to GDraw, GtkPixmap moved to GMisc + * Initialize Gtk in gtkInit.cmo/cmx, start a thread in gtkInitThread.cmo. + These are only included in toplevels, link them explicitely or call + GMain.Main.init and GtkThread.start otherwise. + * install to caml standard library + * many other forgotten changes... + +2000.3.02 + * move locale setting inside GtkMain.init, since it requires an + X display + +2000.2.24 + * add checks in add methods, to avoid critical errors + +2000.2.23 + * add dcalendar.ml (submitted by Ken Wakita) and csview.ml + * correct bug in GdkObj.pixmap#line + +1999.12.19 + * release lablGTK beta2 + +1999.12.16 + * upgraded unison to version 1.169 + * radio groups are of type {radio_menu_item,radio_button} obj option, + otherwise you could not use them several times + +1999.12.13 + * added GtkEdit::{insert_text,delete_text} signals + * better syntax highlighting and ergonomy in the browser's shell + +1999.11... + * switched to Objective Caml 3 + * constructors are no longer classes, but simple functions + +1999.10.29 + * changed GtkArgv.get_{string,pointer,object} to return option types + +1999.10.27 + * added radtest/CHANGES for cooperative editing on radtest + +1999.10.21 + * added a UI for unison + (ask bcpierce@saul.cis.upenn.edu about how to get unison) + +1999.10.20 + * corrected CList signals + * moved initialization out of the library, in gtkInit.cmo + +1999.10.15 + * release lablGTK beta1 + +1999.10.13 + * improved gtkThread.ml (no timer) + * modify Sys.argv in place (gtkMain.ml) + * add set_row_data and get_row_data for GtkCList + +1999.10.11 + * bugfixes in Makefile, radtest and lv + +1999.10.6 + * added Gdk.X.flush and Gdk.X.beep + * Gdk.X.flush is exported in GtkMain.Main + +1999.9.9 + * added font selection dialog + +1999.8.25 + * re-added connect#draw + +1999.8.10 + * reduced the number of methods in widget + * moved disconnect and stop_emit to object_signals + * moved ?:after to each signal + * more functions in applications/browser + +1999.8.9 + * Major change: created one set_param method by parameter, + rather than grouping them and using options. + You can get previous versions with tag "changing_set" + * corrected examples, radtest and browser for these changes + * a bit of clean-up in radtest (treew.ml and Makefile) + +1999.8.5 + * corrected a bad bug with indirected pointers in caml heap + +1999.7.15 + * add GdkKeysyms for exotic keysyms + +1999.7.14 + * moved Truecolor inside Gdk + * added COPYING + * prepared for release + +1999.7.12 + * clean up drag-and-drop + +1999.7.9 + * corrected bug in Container.children + * added ML signal support in GUtil + +1999.7.6 + * added DnD, improved radtest (Hubert) + * small corrections (Jacques) + +1999.7.1 + * added some gdk functions related window and ximage + * also added applications/lv, "labl image viewer" with + the camlimage library. + (JPF) + +1999.7.1 + * added applications/lablglade (Koji) + +1999.6.28 + * added applications/radtest (Hubert) + +1999.6.23 + * improved variant conversions for space. + +1999.6.22 + * updated olabl.patch. With this new version you can access fields + of records without opening modules. You can also use several times + the same label in one module. + * examples/GL/morph3d.ml uses it. + +1999.6.21 + * moved event functions to GdkEvent + +1999.6.20 + * new example: radtest.ml (Hubert) + +1999.6.18 + * added GL extension + +1999.6.15 + * grouped set methods into set_ + * added width and height option to all classes + * windows not shown are automatically destroyed by the GC + +1999.6.14 + * added GPack.layout, GPack.packer, GPack.paned, GMisc.notebook, + GRange.scale, GMisc.calendar + * added 3 examples + * #add_events only available on windowed widgets + +1999.6.11 + * added CList widget in GList module, and examples/clist.ml + * improved pixmap abstraction in GdkObj / GPix + +1999.6.10 + * suppressed almost all raw pointers from the code. Pointers are now + either boxed (second field of an abstract block) or marked (lowest + bit set to 1). + +1999.6.9 + * added GtkBase.Object.get_id and GObj.gtkobj#get_id to get an + unique identifier to gtk objects. Nice for hash-tables, etc... + * GUtil.memo is such an hash-table, allowing you to recover an + object's wrapper. + * added a show option to all classes, commanding whether the widget + should be shown immediately. It is by default true on all widgets + except in module GWindow. + * moved non-OO examples to examples/old. Do "cvs update -d old" to + get them. + * changes in Gdk/GtkData/GObj about styles. + +1999.6.8 + * updated olabl.patch + +1999.6.7 + * split gtk.ml into gtk*.ml + +1999.6.5 + * grouped Container focus operations in a "focus" subwidget + +1999.6.4 + * slightly reorganized widget grouping + +1999.6.3 + * disabled gtk_caller + * subtle hack to have GTree get the right interface + * switched completely to the new widget scheme (including examples) + * added olabl.patch to apply to olabl-2.02 to compile new sources + +1999.6.2 + * integrated changes from Hubert in Gtk, GtkObj and testgtk.ml + * added G* modules to replace GtkObj. "make lablgtk2" for it + +1999.6.1 + * added experimental GtkMenu for a cleaner approach to OO (Jacques) + +1999.5.31 + * GtkObj: list, tree and menu_shell inherit from item_container (Jacques) + * Argv.get_{string,pointer,object} may raise Null_pointer (Jacques) + * Support for creating new widgets (Hubert) + +1999.5.28 + * a few stylistic corrections + * added Packer in gtk.ml + +1999.5.27 + * new Gtk.Main.main Gtk.Main.quit and GtkThread.main (for modal windows) + * added x: and y: to Window.setter + * new methods: object#get_type widget#misc#lock_accelerators + widget#misc#visible widget#misc#parent container#set_focus#vadjustment + container#set_focus#hadjustment (could be container#set_focus#adjustment with a dir param) + window#set_modal window#set_position window#set_default_size + window#set_transient_for + menu#set_accel_group + * new classes: handle_box_skel handle_box_signals handle_box + bbox color_selection color_selection_dialog toolbar + and the corresponding modules in gtk.ml + new class type: is_window and method as_window + * new param tearoff: in new_menu_item + new param x: and y: modal: in Window.setter + * Widget.event and Widget.activate return bool + * new example: examples/testgtk.ml and test.xpm + (Hubert) + +1999.5.25 + * upgraded to gtk+-1.2.3 (all examples work) + * suppressed deprecated function calls and corrected examples + * added a patch to use toplevel threads in olabl-2.02 + +1998.12.13 + * upgraded to olabl-2.01 + +1998.12.9 + * replicated Main, Timeout and Grab to GtkObj (no need to open Gtk anymore) + * moved some non standard classes to GtkExt + +1998.12.8 + * added the first application, xxaplay, Playstation audio track + player for linux. (How architecture specific!) (Furuse) + +1998.12.8 + * more widgets in GtkObj + * refined memory management + * all variants in upper case + +1998.12.7 + * after deeper thought, re-introduced the connect sub-object + * simplified GtkObj: use simple inheritance and allow easy subtyping + * updated olabl.diffs for bugs in class functions parsing and printing + * add ThreadObj for concurrent object programming + (Jacques) + +1998.12.3 + * pousse.ml is now a reversi game (idea for strategy ?) + * solved startup bug (a value checker for ocaml is now available) + (Jacques) + +1998.12.2 + * added GdkObj for high level drawing primitives (Jacques) + +1998.11.30 + * removed cast checking for NULL valued widgets (ml_gtk.[ch]) + * module Arg is renamed as GtkArg because of the name corrision with + the module Arg in the standard library + * Makefile : native code compilation added + (Furuse) + +1998.11.29 + * renamed widget_ops sub-object to misc + * various improvements of set functions + (Jacques) + +1998.11.28 + * switched to object-oriented model. GtkObj is now the standard way + to access the library, but not all objects are ready (see README) + * removed inheritance in gtk.ml + (Jacques) + +1998.11.24 + * added inheritance in gtk.ml + +1998.11.22 + * added gtkObj.ml and examples/*_obj.ml + * various modifications in gtk.ml + diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING new file mode 100644 index 000000000..d417b8b7e --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING @@ -0,0 +1,28 @@ +This library is made available under the LGPL. +You should have got a copy of the LGPL with Objective Caml. +The LGPL applies to all the files in this directory, but not in +subdirectories. + +For the examples subdirectory, there is no specific licensing policy, +but you may freely take inspiration from the code, and copy parts of +it in your application. + +For the applications subdirectory, stricter rules apply: + +* You are free to do anything you want with this code as long as it is + for personal use. + +* Redistribution can only be "as is". Binary distribution and bug + fixes are allowed, but you cannot extensively modify the code + without asking the authors. + +The authors may choose to remove any of the above restrictions on a +per request basis. + +Authors: + Jacques Garrigue + Hubert Fauque + Jun Furuse + Koji Kagawa + +$Id$ \ No newline at end of file diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile new file mode 100644 index 000000000..a0ac04f33 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile @@ -0,0 +1,187 @@ +# $Id$ +# Makefile for lablgtk. + +TARGETS = varcc lablgtktop lablgtktop_t lablgtkrun lablgtk + +all: $(TARGETS) + +opt: lablgtkopt + +configure: + @rm -f config.make + @$(MAKE) --no-print-directory -f configure.mk + +depend: + @rm -f .depend + @$(MAKE) --no-print-directory -f configure.mk .depend + +.depend config.make: + @$(MAKE) --no-print-directory -f configure.mk + +COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c +LINKER = $(CAMLC) $(MLFLAGS) +COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c +LINKOPT = $(CAMLOPT) $(MLFLAGS) +TOPLEVEL = ocamlmktop $(MLFLAGS) + +include config.make + +INSTALLDIR = $(LIBDIR)/lablgtk +LABLGLDIR = $(LIBDIR)/lablGL + +MLLIBS = lablgtk.cma +CLIBS = liblablgtk.a +MLLINK = unix.cma str.cma + +ifdef DEBUG +CFLAGS = -g $(GTKCFLAGS) +MLLINK += -cclib -lcamlrund +MLFLAGS = -g +else +CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS) +endif + +THFLAGS = -thread +THLINK = unix.cma threads.cma + +ifdef USE_CC +CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS) +else +CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)" +endif + +ifdef USE_GL +MLFLAGS += -I $(LABLGLDIR) +MLLINK += lablgl.cma +MLLIBS += lablgtkgl.cma +CLIBS += liblablgtkgl.a +GLLINK = -cclib -llablgtkgl -cclib -lgtkgl +GLMLOBJS = glGtk.cmo +GLCOBJS = ml_gtkgl.o + +endif + +ifdef USE_GNOME +MLLIBS += lablgnome.cma +CLIBS += liblablgnome.a +GNOMEMLOBJS = gtkXmHTML.cmo gHtml.cmo +GNOMECOBJS = ml_gtkxmhtml.o +endif + +# Rules +.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def +.c.o: + $(CCOMPILER) $< +.ml.cmo: + $(COMPILER) $< +.mli.cmi: + $(COMPILER) $< +.ml.cmx: + $(COMPOPT) $< +.var.h: + ./varcc $< + +# Targets +GTKOBJS = ml_gtk.o ml_gtkbin.o ml_gtkbutton.o ml_gtkedit.o ml_gtklist.o \ + ml_gtkmenu.o ml_gtkmisc.o ml_gtknew.o ml_gtkpack.o ml_gtkrange.o \ + ml_gtktree.o +COBJS = ml_gdk.o ml_glib.o wrappers.o $(GTKOBJS) +MLOBJS = gaux.cmo gpointer.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \ + gtk.cmo gtkArgv.cmo gtkSignal.cmo \ + gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \ + gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \ + gtkBin.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \ + gDraw.cmo \ + gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \ + gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gBin.cmo \ + gEdit.cmo gRange.cmo gUtil.cmo +THOBJS = gtkThread.cmo +INITOBJS = gtkInit.cmo +THINITOBJS = gtkThInit.cmo +ALLOBJS = $(MLOBJS) $(GLMLOBJS) $(GNOMEMLOBJS) $(THOBJS) \ + $(INITOBJS) $(THINITOBJS) + +lablgtktop: $(CLIBS) $(MLLIBS) $(INITOBJS) + $(TOPLEVEL) -o $@ $(MLLINK) -ccopt -L. $(MLLIBS) $(INITOBJS) + +lablgtktop_t: $(CLIBS) $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS) + $(TOPLEVEL) $(THFLAGS) -o $@ $(THLINK) $(MLLINK) \ + -ccopt -L. $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS) + +lablgtk: Makefile config.make lablgtk.in + sed -e "s|@INSTALLDIR@|$(INSTALLDIR)|g" \ + -e "s|@LABLGLDIR@|$(LABLGLDIR)|g" \ + -e "s|@LIBDIR@|$(LIBDIR)|g" \ + < lablgtk.in > $@ + chmod 755 $@ + +lablgtkrun: $(CLIBS) $(MLLIBS) + $(LINKER) -o $@ -make-runtime $(MLLINK) -ccopt -L. $(MLLIBS) + +lablgtkopt: $(CLIBS) $(MLLIBS:.cma=.cmxa) $(INITOBJS:.cmo=.cmx) \ + $(THOBJS:.cmo=.cmx) + +install: + if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi + cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR) + cp *.mli $(INSTALLDIR) + cp *.h $(INSTALLDIR) + cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR) + cp $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR) + cp $(CLIBS) $(INSTALLDIR) + cp lablgtktop lablgtktop_t $(INSTALLDIR) + cp lablgtk lablgtkrun $(BINDIR) + if test -f lablgtk.cmxa; then \ + cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \ + $(INITOBJS:.cmo=.cmx) $(INITOBJS:.cmo=.o) $(INSTALLDIR); fi + if test -f gtkThread.cmx; then \ + cp $(THOBJS:.cmo=.cmx) $(THOBJS:.cmo=.o) $(INSTALLDIR); fi + +liblablgtk.a: $(COBJS) + ar rc $@ $(COBJS) + $(RANLIB) $@ +lablgtk.cma: $(MLOBJS) + $(LINKER) -a -custom -o $@ $(MLOBJS) \ + -cclib -llablgtk $(GTKLIBS) +lablgtk.cmxa: $(MLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \ + -cclib -llablgtk $(GTKLIBS) + +liblablgtkgl.a: $(GLCOBJS) + ar rc $@ $(GLCOBJS) + $(RANLIB) $@ +lablgtkgl.cma: $(GLMLOBJS) + $(LINKER) -a -custom -o $@ $(GLLINK) $(GLMLOBJS) +lablgtkgl.cmxa: $(GLMLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(GLLINK) $(GLMLOBJS:.cmo=.cmx) + +liblablgnome.a: $(GNOMECOBJS) + ar rc $@ $(GNOMECOBJS) + $(RANLIB) $@ +lablgnome.cma: $(GNOMEMLOBJS) + $(LINKER) -a -custom -o $@ $(GNOMEMLOBJS) \ + -cclib -llablgnome $(GNOMELIBS) +lablgnome.cmxa: $(GNOMEMLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(GNOMEMLOBJS:.cmo=.cmx) \ + -cclib -llablgnome $(GNOMELIBS) + +gtkThread.cmo: gtkThread.ml + $(COMPILER) $(THFLAGS) gtkThread.ml + +gtkThread.cmx: gtkThread.ml + if test -f $(LIBDIR)/libthreadsnat.a; then \ + $(COMPOPT) $(THFLAGS) gtkThread.ml; fi + +varcc: varcc.cmo + $(LINKER) -o $@ varcc.cmo + rm -f *_tags.h *_tags.c + +clean: + rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS) + +$(GTKOBJS): gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h +ml_gdk.o: gdk_tags.h ml_gdk.h wrappers.h +ml_gtkgl.o: gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h +ml_gtkxmhtml.o: gtkxmhtml_tags.h ml_gtk.h ml_gdk.h wrappers.h + +include .depend diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt new file mode 100644 index 000000000..bdf5b6cfd --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt @@ -0,0 +1,147 @@ +# $Id$ +# Makefile for lablgtk. + +EXE = .exe +TARGETS = var2conv var2def lablgtk$(EXE) lablgtk_t$(EXE) \ + lablgtkrun$(EXE) config.make + +all: $(TARGETS) + +opt: lablgtkopt + +CAMLC = ocamlc +CAMLOPT = ocamlopt +COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c +LINKER = $(CAMLC) $(MLFLAGS) +COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c +LINKOPT = $(CAMLOPT) $(MLFLAGS) + +TOPLEVEL = ocamlmktop $(MLFLAGS) +### How to invoke the librarian +MKLIB=lib /nologo /debugtype:CV /out: + +!include config.make.nt + +INSTALLDIR = $(LIBDIR:/=\)\lablgtk +BINDIR = $(LIBDIR:/=\)\..\bin +LABLGLDIR = $(LIBDIR)/lablGL + +CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS) +LDFLAGS = $(GTKLIBS) + +THFLAGS = -thread +THLIBS = unix.cma threads.cma + +!if $(USE_CC) == 1 +CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS) +!else +CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)" +!endif + +!if $(USE_GL) == 1 +MLFLAGS = $(MLFLAGS) -I $(LIBDIR)/lablGL +GLLINK = -I $(LABLGLDIR) lablgl.cma -cclib -lgtkgl +GLMLOBJS = glGtk.cmo +GLCOBJS = ml_gtkgl.o +!endif + +# Rules +.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .obj .var .h .opt .def +.c.obj: + $(CCOMPILER) $< +.ml.cmo: + $(COMPILER) $< +.mli.cmi: + $(COMPILER) $< +.ml.cmx: + $(COMPOPT) $< +.var.h: + ocamlrun ./var2def < $< > $@ +.var.c: + ocamlrun ./var2conv < $< > $@ + +# Targets +COBJS = ml_gtk.obj ml_gdk.obj ml_glib.obj wrappers.obj $(GLCOBJS) +OLDMLOBJS = misc.cmo glib.cmo gdk.cmo gtk.cmo gdkObj.cmo gtkObj.cmo gtkExt.cmo +MLOBJS = misc.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \ + gtk.cmo gtkArgv.cmo gtkSignal.cmo \ + gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \ + gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \ + gtkFrame.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \ + gDraw.cmo \ + gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \ + gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gFrame.cmo \ + gEdit.cmo gRange.cmo gUtil.cmo $(GLMLOBJS) +THOBJS = gtkThread.cmo threadObj.cmo +INITOBJS = gtkInit.cmo +THINITOBJS = gtkThInit.cmo +ALLOBJS = $(MLOBJS) $(THOBJS) $(INITOBJS) $(THINITOBJS) + +lablgtk$(EXE): liblablgtk.lib lablgtk.cma $(INITOBJS) + $(TOPLEVEL) -custom -o $@ unix.cma str.cma $(GLLINK) \ + lablgtk.cma $(INITOBJS) + +lablgtk_t$(EXE): liblablgtk.lib lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS) + $(TOPLEVEL) -custom $(THFLAGS) -o $@ $(THLIBS) str.cma $(GLLINK) \ + lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS) + +lablgtkrun$(EXE): liblablgtk.lib lablgtk.cma + $(LINKER) -o $@ -make-runtime $(GLLINK) lablgtk.cma + +lablgtkopt: liblablgtk.lib lablgtk.cmxa gtkInit.cmx + +install: + if not exist $(INSTALLDIR) mkdir $(INSTALLDIR) + cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR) + cp *.mli $(INSTALLDIR) + cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR) + cp lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR) + cp liblablgtk.lib $(INSTALLDIR) + cp lablgtk$(EXE) lablgtk_t$(EXE) lablgtkrun$(EXE) $(BINDIR) + if exist lablgtk.cmxa cp lablgtk.cmxa lablgtk.lib gtkInit.cmx gtkInit.obj $(INSTALLDIR) + +liblablgtk.lib: $(COBJS) + $(MKLIB)$@ $(COBJS) + +lablgtk.cma: $(MLOBJS) + $(LINKER) -a -custom -o $@ $(MLOBJS) \ + -cclib -llablgtk $(GTKLIBS) + +lablgtk.cmxa: $(MLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \ + -cclib -llablgtk $(GTKLIBS) + +gtkThread.cmo: gtkThread.ml + $(COMPILER) $(THFLAGS) gtkThread.ml + +threadObj.cmo: threadObj.ml + $(COMPILER) $(THFLAGS) threadObj.ml + +gtkThread.cmx: gtkThread.ml + $(COMPOPT) $(THFLAGS) gtkThread.ml + +threadObj.cmx: threadObj.ml + $(COMPOPT) $(THFLAGS) threadObj.ml + +var2conv: var2conv.cmo + $(LINKER) -o $@ var2conv.cmo + rm -f *_tags.c + +var2def: var2def.cmo + $(LINKER) -o $@ var2def.cmo + rm -f *_tags.h + +clean: + rm -f *.cm* *.obj *.lib *_tags.[ch] $(TARGETS) + +config.make: config.make.nt + cp config.make.nt config.make + +depend .depend: + ocamldep *.ml *.mli > .depend + +ml_gtk.obj: gtk_tags.c gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h +ml_gdk.obj: gdk_tags.c gdk_tags.h ml_gdk.h wrappers.h +ml_gtkgl.obj: gtkgl_tags.c gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h + +!include .depend diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README new file mode 100644 index 000000000..78c4ed3da --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README @@ -0,0 +1,239 @@ + + LablGTK : an interface to the GIMP Tool Kit + + +Needed: + ocaml-3.00 + gtk-1.2.x + gmake (there is no standard for conditionals) + +How to compile: + + You should normally not need to modify Makefiles. + First type "make configure ". + Options are + USE_CC=1 to use $(CC) rather than gcc + USE_GL=1 to compile with OpenGL support (see lower) + USE_GNOME=1 to compile GtkXmHTML support (requires gnome) + + Then just type "make" to build the library and toplevels. + + On FreeBSD, you need to link with libxpg4.so for Japanese + output. + +Contents: + + gdk.ml low-level interface to the General Drawing Kit + gtk.ml low-level interface to the GIMP Tool Kit + gtkThread.ml main loop for threaded version + g[A-Z]*.ml object-oriented interface to GTK + gdkObj.ml object-oriented interface to GDK + + lablgtk toplevel + + examples/*.ml various examples + applications/* applications using the library + radtest a very experimental RAD for lablgtk + (by Hubert Fauque) + browser the begin of a port of OCamlBrowser + (by Jacques Garrigue) + unison a frontend for the Unison file synchronizer + see the README for details. + +Upgrading from lablgtk-1.00: + There are a few incompatibilities between this version and the + previous release. We do not describe them all, since usually a type + error message will inform you. + * all signals are no longer under #connect. #connect#event changed + to #event#connect, and some signals are under #misc#connect or + #grab#connect. See lower for a description of the new widget + structure. + * some defaults changed. In particular GPack.box#pack have now all + its parameter defaulting to false rather than true. See lower for + the new default policy. Beware that this does not cause type + errors, just changes in the aspect. + +How to run the examples: + In the examples directory just type: + lablgtk -labels examples/???.ml + + Before installing lablgtk you have to be more explicit: + ../lablgtktop -labels -w s -I .. ???.ml + +How to link them: + lablgtktop contains an extra module GtkInit, whose only contents is: + let locale = GtkMain.Main.init () + You must either add this line, or add this module to your link, + before calling any Gtk function. + ocamlc -I CAMLLIB/lablgtk -labels -w s lablgtk.cma gtkInit.cmo ???.ml -o ??? + +How to use the threaded toplevel: + + % lablgtk -thread (or lablgtktop_t before installing) + Objective Caml version 3.00 + + # let w = GWindow.window ~show:true ();; + + You should at once see a window appear. + The GTK main loop is running in a separate thread. Any command + is immediately reflected by the system. + Beware that you cannot switch threads within a callback, that is the + only thread related command you may use in a callback is + Thread.create. On the other hand, all newly created threads will be + run directly by the caml main loop, so they can use all thread + operations. + +Structure of the (raw) Gtk* modules: + + These modules are composed of one submodule for each class. + Signals specific to a widget are in a Signals inner module. + A setter function is defined to give access to set_param functions. + +Structure of the G[A-Z]* modules: + + These modules provide classes to wrap the raw function calls. + Here are the widget classes contained in each module: + + GDraw Gdk pixmaps, etc... + GObj gtkobj, widget, style + GData data, adjustment, tooltips + GContainer container, item_container + GWindow window, dialog, color_selection_dialog, file_selection, plug + GPack box, button_box, table, fixed, layout, packer, paned, notebook + GBin scrolled_window, event_box, handle_box, frame, + aspect_frame, viewport, socket + GButton button, toggle_button, check_button, radio_button, toolbar + GMenu menu_item, tearoff_item, check_menu_item, radio_menu_item, + menu_shell, menu, option_menu, menu_bar, factory + GMisc separator, statusbar, calendar, drawing_area, + misc, arrow, image, pixmap, label, tips_query, + color_selection, font_selection + GTree tree_item, tree + GList list_item, liste, clist + GEdit editable, entry, spin_button, combo, text + GRange progress, progress_bar, range, scale, scrollbar + + While subtyping follows the Gtk widget hierarchy, you cannot always + use width subtyping (i.e. #super is not unifiable with all the + subclasses of super). Still, it works for some classes, like + #widget and #container, and allows subtyping without coercion towards + these classes (cf. #container in pousse.ml for instance). + + Practically, each widget class is composed of: + * a coerce method, returning the object coerced to the type widget. + * an as_widget method, returning the raw Gtk widget used for packing, etc... + * a connect sub-object, allowing one to widget specific + signals (this is what prevents width subtyping in subclasses.) + * a misc sub-object, giving access to miscellanous functionality of + the basic gtkwidget class, and a misc#connect sub-object. + * an event sub-object, for Xevent related functions (only if the widget + has an Xwindow), and an event#connect sub-object. + * a grab sub-object, containing drag and drop functions, + and a grab#connect sub-object. + * widget specific methods. + + Here is a diagram of the structure (- for methods, + for sub-objects) + - coerce : widget + - as_widget : Gtk.widget obj + - destroy : unit -> unit + - ... + + connect : mywidget_signals + | - after + | - signal_name : callback:(... -> ...) -> GtkSignal.id + + misc : misc_ops + | - show, hide, disconnect, ... + | + connect : misc_signals + + event : event_ops + | - add, ... + | + connect : event_signals + + grab : grab_ops + | - ... + | + connect : grab_signals + + You create a widget by [. options ... ()]. + Many optional arguments are admitted. The last two of them, packing: + and show:, allow you respectively to call a function on your newly + created widget, and to decide wether to show it immediately or not. + By default all widgets except toplevel windows (GWindow module) are + shown immediately. + +Default arguments: + For many constructor or method arguments, default values are provided. + Generally, this default value is defined by GTK, and you must refer + to GTK's documentation. + For ML defined defaults, usually default values are either false, 0, None + or `NONE, according to the expected type. + Important exceptions are ~show, which default to true in all widgets + except those in GWindow, and ~fill, which defaults to true or `BOTH. + +Note about unit as method argument: + + O'Caml introduces no distinction between methods having side-effects + and methods simply returning a value. In practice, this is + confusing, and awkward when used as callbacks. For this reason all + methods having noticeable side-effects should take arguments, and + unit if they have no argument. + +Memory management: + + Important efforts have been dedicated to cooperate with Gtk's + reference counting mechanism. As a result you should generally be + able to use Gdk/Gtk data structures without caring about memory + management. They will be freed when nobody points to them any more. + This also means that you do not need to pay too much attention to + whether a data structure is still alive or not. If it is not, you + should get an error rather than a core dump. + The case of Gtk objects deserves special care. Since they are + interactive, we cannot just destroy them when they are no longer + referenced. They have to be explicitely destroyed. If a widget was + added to a container widget, it will automatically be destroyed when + its last container is destroyed. For this reason you need only + destroy toplevel widgets. + +GL extension + + You can use lablgtk in combination with LablGL + + * get and install lablGL 0.94 from + http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgl.html + * get and install gtkglarea-1.2.x.tar.gz from + http://www.student.oulu.fi/~jlof/gtkglarea/index.html + * reconfigure: "make configure USE_GL=1" + + You can then use the widget GlGtk.gl_area as an OpenGL window. + Some examples are in examples/GL, but basically any LablGL example + can be easily ported. + +Windows port + + A Win32 port is provided. In order to compile it, you will need to + get and unpack glib-dev-????.zip and gtk+-dev-????.zip from + http://www.gimp.org/~tml/gimp/win32/ + Do not forget to get also extralibs-dev-????.zip, since you will + need some of the DLLs. + + Edit config.make.nt, then, using Visual C++, + nmake -f Makefile.nt + nmake -f Makefile.nt opt (if you have an MS Assembler) + Then install with + nmake -f Makefile.nt install + + Since the link is dynamic you will also need to have in your path: + gnu-intl.dll (extralibs), glib-1.3.dll, module-1.3.dll and + gthread-1.3.dll (glib), gdk-1.3.dll and gtk-1.3.dll (gtk+). + + I checked with the 2000-02-02 version of these libraries. + Currently threads do not seem to work, but otherwise everything + seems OK. In particular, you can run all examples, and build + applications\unison as usual. + +Authors: + Jacques Garrigue + Hubert Fauque + Jun Furuse + Koji Kagawa + +Bug reports: + Jacques Garrigue + +$Id$ diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml new file mode 100644 index 000000000..f248ba0f8 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml @@ -0,0 +1,153 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkBin +open GObj +open GContainer + +class scrolled_window obj = object + inherit container_full (obj : Gtk.scrolled_window obj) + method hadjustment = + new GData.adjustment (ScrolledWindow.get_hadjustment obj) + method vadjustment = + new GData.adjustment (ScrolledWindow.get_vadjustment obj) + method set_hadjustment adj = + ScrolledWindow.set_hadjustment obj (GData.as_adjustment adj) + method set_vadjustment adj = + ScrolledWindow.set_vadjustment obj (GData.as_adjustment adj) + method set_hpolicy hpolicy = ScrolledWindow.set_policy' obj ~hpolicy + method set_vpolicy vpolicy = ScrolledWindow.set_policy' obj ~vpolicy + method set_placement = ScrolledWindow.set_placement obj + method add_with_viewport w = + ScrolledWindow.add_with_viewport obj (as_widget w) +end + +let scrolled_window ?hadjustment ?vadjustment ?hpolicy ?vpolicy + ?placement ?border_width ?width ?height ?packing ?show () = + let w = + ScrolledWindow.create () + ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment) + ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in + ScrolledWindow.set w ?hpolicy ?vpolicy ?placement; + Container.set w ?border_width ?width ?height; + pack_return (new scrolled_window w) ~packing ~show + +class event_box obj = object + inherit container_full (obj : Gtk.event_box obj) + method event = new GObj.event_ops obj +end + +let event_box ?border_width ?width ?height ?packing ?show () = + let w = EventBox.create () in + Container.set w ?border_width ?width ?height; + pack_return (new event_box w) ~packing ~show + +class handle_box_signals obj = object + inherit container_signals obj + method child_attached ~callback = + GtkSignal.connect ~sgn:HandleBox.Signals.child_attached obj ~after + ~callback:(fun obj -> callback (new widget obj)) + method child_detached ~callback = + GtkSignal.connect ~sgn:HandleBox.Signals.child_detached obj ~after + ~callback:(fun obj -> callback (new widget obj)) +end + +class handle_box obj = object + inherit container (obj : Gtk.handle_box obj) + method set_shadow_type = HandleBox.set_shadow_type obj + method set_handle_position = HandleBox.set_handle_position obj + method set_snap_edge = HandleBox.set_snap_edge obj + method connect = new handle_box_signals obj + method event = new GObj.event_ops obj +end + +let handle_box ?border_width ?width ?height ?packing ?show () = + let w = HandleBox.create () in + let () = Container.set w ?border_width ?width ?height in + pack_return (new handle_box w) ~packing ~show + +class frame_skel obj = object + inherit container obj + method set_label = Frame.set_label obj + method set_label_align ?x ?y () = Frame.set_label_align' obj ?x ?y + method set_shadow_type = Frame.set_shadow_type obj +end + +class frame obj = object + inherit frame_skel (Frame.coerce obj) + method connect = new container_signals obj +end + +let frame ?(label="") ?label_xalign ?label_yalign ?shadow_type + ?border_width ?width ?height ?packing ?show () = + let w = Frame.create label in + Frame.set w ?label_xalign ?label_yalign ?shadow_type; + Container.set w ?border_width ?width ?height; + pack_return (new frame w) ~packing ~show + +class aspect_frame obj = object + inherit frame_skel (obj : Gtk.aspect_frame obj) + method connect = new container_signals obj + method set_alignment ?x ?y () = AspectFrame.set obj ?xalign:x ?yalign:y + method set_ratio ratio = AspectFrame.set obj ~ratio + method set_obey_child obey_child = AspectFrame.set obj ~obey_child +end + +let aspect_frame ?label ?xalign ?yalign ?ratio ?obey_child + ?label_xalign ?label_yalign ?shadow_type + ?border_width ?width ?height ?packing ?show () = + let w = + AspectFrame.create ?label ?xalign ?yalign ?ratio ?obey_child () in + Frame.set w ?label_xalign ?label_yalign ?shadow_type; + Container.set w ?border_width ?width ?height; + pack_return (new aspect_frame w) ~packing ~show + +class viewport obj = object + inherit container_full (obj : Gtk.viewport obj) + method event = new event_ops obj + method set_hadjustment adj = + Viewport.set_hadjustment obj (GData.as_adjustment adj) + method set_vadjustment adj = + Viewport.set_vadjustment obj (GData.as_adjustment adj) + method set_shadow_type = Viewport.set_shadow_type obj + method hadjustment = new GData.adjustment (Viewport.get_hadjustment obj) + method vadjustment = new GData.adjustment (Viewport.get_vadjustment obj) +end + +let viewport ?hadjustment ?vadjustment ?shadow_type + ?border_width ?width ?height ?packing ?show () = + let w = Viewport.create () + ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment) + ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in + may shadow_type ~f:(Viewport.set_shadow_type w); + Container.set w ?border_width ?width ?height; + pack_return (new viewport w) ~packing ~show + +class alignment obj = object + inherit container_full (obj : Gtk.alignment obj) + method set_alignment ?x ?y () = Alignment.set ?x ?y obj + method set_scale ?x ?y () = Alignment.set ?xscale:x ?yscale:y obj +end + +let alignment ?x ?y ?xscale ?yscale + ?border_width ?width ?height ?packing ?show () = + let w = Alignment.create ?x ?y ?xscale ?yscale () in + Container.set w ?border_width ?width ?height; + pack_return (new alignment w) ~packing ~show + +let alignment_cast w = new alignment (Alignment.cast w#as_widget) + +class socket obj = object (self) + inherit container_full (obj : Gtk.socket obj) + method steal = Socket.steal obj + method xwindow = + self#misc#realize (); + Gdk.Window.get_xwindow self#misc#window +end + +let socket ?border_width ?width ?height ?packing ?show () = + let w = Socket.create () in + Container.set w ?border_width ?width ?height; + pack_return (new socket w) ?packing ?show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli new file mode 100644 index 000000000..9593650c3 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli @@ -0,0 +1,163 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class scrolled_window : Gtk.scrolled_window obj -> + object + inherit container_full + val obj : Gtk.scrolled_window obj + method add_with_viewport : widget -> unit + method hadjustment : GData.adjustment + method set_hadjustment : GData.adjustment -> unit + method set_hpolicy : Tags.policy_type -> unit + method set_placement : Tags.corner_type -> unit + method set_vadjustment : GData.adjustment -> unit + method set_vpolicy : Tags.policy_type -> unit + method vadjustment : GData.adjustment + end +val scrolled_window : + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?hpolicy:Tags.policy_type -> + ?vpolicy:Tags.policy_type -> + ?placement:Tags.corner_type -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> scrolled_window + +class event_box : Gtk.event_box obj -> + object + inherit container_full + val obj : Gtk.event_box obj + method event : event_ops + end +val event_box : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> event_box + +class handle_box_signals : 'a obj -> + object + inherit container_signals + constraint 'a = [>`handlebox|`container|`widget] + val obj : 'a obj + method child_attached : callback:(widget -> unit) -> GtkSignal.id + method child_detached : callback:(widget -> unit) -> GtkSignal.id + end + +class handle_box : Gtk.handle_box obj -> + object + inherit container + val obj : Gtk.handle_box obj + method event : event_ops + method connect : handle_box_signals + method set_handle_position : Tags.position -> unit + method set_shadow_type : Tags.shadow_type -> unit + method set_snap_edge : Tags.position -> unit + end +val handle_box : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> handle_box + +class frame_skel : 'a obj -> + object + inherit container + constraint 'a = [>`frame|`container|`widget] + val obj : 'a obj + method set_label : string -> unit + method set_label_align : ?x:clampf -> ?y:clampf -> unit -> unit + method set_shadow_type : Tags.shadow_type -> unit + end +class frame : [>`frame] obj -> + object + inherit frame_skel + val obj : Gtk.frame obj + method connect : GContainer.container_signals + end +val frame : + ?label:string -> + ?label_xalign:clampf -> + ?label_yalign:clampf -> + ?shadow_type:Tags.shadow_type -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> frame + +class aspect_frame : Gtk.aspect_frame obj -> + object + inherit frame + val obj : Gtk.aspect_frame obj + method set_alignment : ?x:clampf -> ?y:clampf -> unit -> unit + method set_obey_child : bool -> unit + method set_ratio : clampf -> unit + end +val aspect_frame : + ?label:string -> + ?xalign:clampf -> + ?yalign:clampf -> + ?ratio:float -> + ?obey_child:bool -> + ?label_xalign:clampf -> + ?label_yalign:clampf -> + ?shadow_type:Tags.shadow_type -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> aspect_frame + +class viewport : Gtk.viewport obj -> + object + inherit container_full + val obj : Gtk.viewport obj + method event : event_ops + method hadjustment : GData.adjustment + method set_hadjustment : GData.adjustment -> unit + method set_shadow_type : Gtk.Tags.shadow_type -> unit + method set_vadjustment : GData.adjustment -> unit + method vadjustment : GData.adjustment + end +val viewport : + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?shadow_type:Tags.shadow_type -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> viewport + +class alignment : Gtk.alignment obj -> + object + inherit container_full + val obj : Gtk.alignment obj + method set_alignment : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit + method set_scale : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit + end +val alignment : + ?x:Gtk.clampf -> + ?y:Gtk.clampf -> + ?xscale:Gtk.clampf -> + ?yscale:Gtk.clampf -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> alignment +val alignment_cast : < as_widget : 'a obj; .. > -> alignment + +class socket : Gtk.socket obj -> + object + inherit container_full + val obj : Gtk.socket obj + method steal : Gdk.xid -> unit + method xwindow : Gdk.xid + end + +val socket : + ?border_width:int -> ?width:int -> ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> socket diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml new file mode 100644 index 000000000..08ac70445 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml @@ -0,0 +1,124 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkButton +open GObj +open GContainer + +class button_skel obj = object (self) + inherit container obj + method clicked () = Button.clicked obj + method grab_default () = + Widget.set_can_default obj true; + Widget.grab_default obj +end + +class button_signals obj = object + inherit container_signals obj + method clicked = GtkSignal.connect ~sgn:Button.Signals.clicked ~after obj + method pressed = GtkSignal.connect ~sgn:Button.Signals.pressed ~after obj + method released = GtkSignal.connect ~sgn:Button.Signals.released ~after obj + method enter = GtkSignal.connect ~sgn:Button.Signals.enter ~after obj + method leave = GtkSignal.connect ~sgn:Button.Signals.leave ~after obj +end + +class button obj = object + inherit button_skel (Button.coerce obj) + method connect = new button_signals obj + method event = new GObj.event_ops obj +end + +let button ?label ?border_width ?width ?height ?packing ?show () = + let w = Button.create ?label () in + Container.set w ?border_width ?width ?height; + pack_return (new button w) ~packing ~show + +class toggle_button_signals obj = object + inherit button_signals obj + method toggled = + GtkSignal.connect ~sgn:ToggleButton.Signals.toggled obj ~after +end + +class toggle_button obj = object + inherit button_skel obj + method connect = new toggle_button_signals obj + method active = ToggleButton.get_active obj + method set_active = ToggleButton.set_active obj + method set_draw_indicator = ToggleButton.set_mode obj +end + +let toggle_button ?label ?active ?draw_indicator + ?border_width ?width ?height ?packing ?show () = + let w = ToggleButton.create_toggle ?label () in + ToggleButton.set w ?active ?draw_indicator; + Container.set w ?border_width ?width ?height; + pack_return (new toggle_button w) ~packing ~show + +let check_button ?label ?active ?draw_indicator + ?border_width ?width ?height ?packing ?show () = + let w = ToggleButton.create_check ?label () in + ToggleButton.set w ?active ?draw_indicator; + Container.set w ?border_width ?width ?height; + pack_return (new toggle_button w) ~packing ~show + +class radio_button obj = object + inherit toggle_button (obj : Gtk.radio_button obj) + method set_group = RadioButton.set_group obj + method group = Some obj +end + +let radio_button ?group ?label ?active ?draw_indicator + ?border_width ?width ?height ?packing ?show () = + let w = RadioButton.create ?group ?label () in + ToggleButton.set w ?active ?draw_indicator; + Container.set w ?border_width ?width ?height; + pack_return (new radio_button w) ~packing ~show + +class toolbar obj = object + inherit container_full (obj : Gtk.toolbar obj) + method insert_widget ?tooltip ?tooltip_private ?pos w = + Toolbar.insert_widget obj (as_widget w) ?tooltip ?tooltip_private ?pos + + method insert_button ?text ?tooltip ?tooltip_private ?icon + ?pos ?callback () = + let icon = may_map icon ~f:as_widget in + new button + (Toolbar.insert_button obj ~kind:`BUTTON ?icon ?text + ?tooltip ?tooltip_private ?pos ?callback ()) + + method insert_toggle_button ?text ?tooltip ?tooltip_private ?icon + ?pos ?callback () = + let icon = may_map icon ~f:as_widget in + new toggle_button + (ToggleButton.cast + (Toolbar.insert_button obj ~kind:`TOGGLEBUTTON ?icon ?text + ?tooltip ?tooltip_private ?pos ?callback ())) + + method insert_radio_button ?text ?tooltip ?tooltip_private ?icon + ?pos ?callback () = + let icon = may_map icon ~f:as_widget in + new radio_button + (RadioButton.cast + (Toolbar.insert_button obj ~kind:`RADIOBUTTON ?icon ?text + ?tooltip ?tooltip_private ?pos ?callback ())) + + method insert_space = Toolbar.insert_space obj + + method set_orientation = Toolbar.set_orientation obj + method set_style = Toolbar.set_style obj + method set_space_size = Toolbar.set_space_size obj + method set_space_style = Toolbar.set_space_style obj + method set_tooltips = Toolbar.set_tooltips obj + method set_button_relief = Toolbar.set_button_relief obj + method button_relief = Toolbar.get_button_relief obj +end + +let toolbar ?(orientation=`HORIZONTAL) ?style + ?space_size ?space_style ?tooltips ?button_relief + ?border_width ?width ?height ?packing ?show () = + let w = Toolbar.create orientation ?style () in + Toolbar.set w ?space_size ?space_style ?tooltips ?button_relief; + Container.set w ?border_width ?width ?height; + pack_return (new toolbar w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli new file mode 100644 index 000000000..ee2653da1 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli @@ -0,0 +1,144 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class button_skel : + 'a obj -> + object + inherit container + constraint 'a = [>`widget|`button|`container] + val obj : 'a obj + method clicked : unit -> unit + method grab_default : unit -> unit + end +class button_signals : + 'b obj -> + object ('a) + inherit container_signals + constraint 'b = [>`button|`container|`widget] + val obj : 'b obj + method clicked : callback:(unit -> unit) -> GtkSignal.id + method enter : callback:(unit -> unit) -> GtkSignal.id + method leave : callback:(unit -> unit) -> GtkSignal.id + method pressed : callback:(unit -> unit) -> GtkSignal.id + method released : callback:(unit -> unit) -> GtkSignal.id + end + +class button : + [>`button] obj -> + object + inherit button_skel + val obj : Gtk.button obj + method event : event_ops + method connect : button_signals + end +val button : + ?label:string -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> button + +class toggle_button_signals : + 'b obj -> + object ('a) + inherit button_signals + constraint 'b = [>`toggle|`button|`container|`widget] + val obj : 'b obj + method toggled : callback:(unit -> unit) -> GtkSignal.id + end + +class toggle_button : + 'a obj -> + object + inherit button_skel + constraint 'a = [>`toggle|`button|`container|`widget] + val obj : 'a obj + method active : bool + method connect : toggle_button_signals + method set_active : bool -> unit + method set_draw_indicator : bool -> unit + end +val toggle_button : + ?label:string -> + ?active:bool -> + ?draw_indicator:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button +val check_button : + ?label:string -> + ?active:bool -> + ?draw_indicator:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button + +class radio_button : + Gtk.radio_button obj -> + object + inherit toggle_button + val obj : Gtk.radio_button obj + method group : Gtk.radio_button group + method set_group : Gtk.radio_button group -> unit + end +val radio_button : + ?group:Gtk.radio_button group -> + ?label:string -> + ?active:bool -> + ?draw_indicator:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> radio_button + +class toolbar : + Gtk.toolbar obj -> + object + inherit container_full + val obj : Gtk.toolbar obj + method button_relief : Tags.relief_style + method insert_button : + ?text:string -> + ?tooltip:string -> + ?tooltip_private:string -> + ?icon:widget -> + ?pos:int -> ?callback:(unit -> unit) -> unit -> button + method insert_radio_button : + ?text:string -> + ?tooltip:string -> + ?tooltip_private:string -> + ?icon:widget -> + ?pos:int -> ?callback:(unit -> unit) -> unit -> radio_button + method insert_space : ?pos:int -> unit -> unit + method insert_toggle_button : + ?text:string -> + ?tooltip:string -> + ?tooltip_private:string -> + ?icon:widget -> + ?pos:int -> ?callback:(unit -> unit) -> unit -> toggle_button + method insert_widget : + ?tooltip:string -> + ?tooltip_private:string -> ?pos:int -> widget -> unit + method set_button_relief : Tags.relief_style -> unit + method set_orientation : Tags.orientation -> unit + method set_space_size : int -> unit + method set_space_style : [`EMPTY|`LINE] -> unit + method set_style : Tags.toolbar_style -> unit + method set_tooltips : bool -> unit + end +val toolbar : + ?orientation:Tags.orientation -> + ?style:Tags.toolbar_style -> + ?space_size:int -> + ?space_style:[`EMPTY|`LINE] -> + ?tooltips:bool -> + ?button_relief:Tags.relief_style -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> toolbar diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml new file mode 100644 index 000000000..2ea765e83 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml @@ -0,0 +1,75 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GObj +open GData + +class focus obj = object + val obj = obj + method circulate = Container.focus obj + method set (child : widget option) = + let child = may_map child ~f:(fun x -> x#as_widget) in + Container.set_focus_child obj (Gpointer.optboxed child) + method set_hadjustment adj = + Container.set_focus_hadjustment obj + (Gpointer.optboxed (may_map adj ~f:as_adjustment)) + method set_vadjustment adj = + Container.set_focus_vadjustment obj + (Gpointer.optboxed (may_map adj ~f:as_adjustment)) +end + +class container obj = object (self) + inherit widget obj + method add w = + (* Hack to avoid creating a bin class *) + if GtkBase.Object.is_a obj "GtkBin" && Container.children obj <> [] then + raise (Gtk.Error "GContainer.container#add: already full"); + Container.add obj (as_widget w) + method remove w = Container.remove obj (as_widget w) + method children = List.map ~f:(new widget) (Container.children obj) + method set_border_width = Container.set_border_width obj + method focus = new focus obj +end + +class container_signals obj = object + inherit widget_signals obj + method add ~callback = + GtkSignal.connect ~sgn:Container.Signals.add obj ~after + ~callback:(fun w -> callback (new widget w)) + method remove ~callback = + GtkSignal.connect ~sgn:Container.Signals.remove obj ~after + ~callback:(fun w -> callback (new widget w)) +end + +class container_full obj = object + inherit container obj + method connect = new container_signals obj +end + +let cast_container (w : widget) = + new container_full (GtkBase.Container.cast w#as_widget) + +class virtual ['a] item_container obj = object (self) + inherit widget obj + method add (w : 'a) = + Container.add obj w#as_item + method remove (w : 'a) = + Container.remove obj w#as_item + method private virtual wrap : Gtk.widget obj -> 'a + method children : 'a list = + List.map ~f:self#wrap (Container.children obj) + method set_border_width = Container.set_border_width obj + method focus = new focus obj + method virtual insert : 'a -> pos:int -> unit + method append (w : 'a) = self#insert w ~pos:(-1) + method prepend (w : 'a) = self#insert w ~pos:0 +end + +class item_signals obj = object + inherit container_signals obj + method select = GtkSignal.connect ~sgn:Item.Signals.select obj ~after + method deselect = GtkSignal.connect ~sgn:Item.Signals.deselect obj ~after + method toggle = GtkSignal.connect ~sgn:Item.Signals.toggle obj ~after +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli new file mode 100644 index 000000000..290982942 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli @@ -0,0 +1,79 @@ +(* $Id$ *) + +open Gtk +open GObj + +class focus : + 'a obj -> + object + constraint 'a = [>`container] + val obj : 'a obj + method circulate : Tags.direction_type -> bool + method set : widget option -> unit + method set_hadjustment : GData.adjustment option -> unit + method set_vadjustment : GData.adjustment option -> unit + end + +class container : + 'a obj -> + object + inherit widget + constraint 'a = [>`container|`widget] + val obj : 'a obj + method add : widget -> unit + method children : widget list + method remove : widget -> unit + method focus : focus + method set_border_width : int -> unit + end + +class container_signals : + 'a obj -> + object + inherit widget_signals + constraint 'a = [>`container|`widget] + val obj : 'a obj + method add : callback:(widget -> unit) -> GtkSignal.id + method remove : callback:(widget -> unit) -> GtkSignal.id + end + +class container_full : + 'a obj -> + object + inherit container + constraint 'a = [>`container|`widget] + val obj : 'a obj + method connect : container_signals + end + +val cast_container : widget -> container_full +(* may raise [Gtk.Cannot_cast "GtkContainer"] *) + +class virtual ['a] item_container : + 'c obj -> + object + constraint 'a = < as_item : [>`widget] obj; .. > + constraint 'c = [>`container|`widget] + inherit widget + val obj : 'c obj + method add : 'a -> unit + method append : 'a -> unit + method children : 'a list + method virtual insert : 'a -> pos:int -> unit + method prepend : 'a -> unit + method remove : 'a -> unit + method focus : focus + method set_border_width : int -> unit + method private virtual wrap : Gtk.widget obj -> 'a + end + +class item_signals : + 'a obj -> + object + inherit container_signals + constraint 'a = [>`container|`item|`widget] + val obj : 'a obj + method deselect : callback:(unit -> unit) -> GtkSignal.id + method select : callback:(unit -> unit) -> GtkSignal.id + method toggle : callback:(unit -> unit) -> GtkSignal.id + end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml new file mode 100644 index 000000000..52aa3f1f4 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml @@ -0,0 +1,60 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkData +open GObj + +class data_signals obj = object + inherit gtkobj_signals obj + method disconnect_data = + GtkSignal.connect ~sgn:Data.Signals.disconnect obj ~after +end + +class adjustment_signals obj = object + inherit data_signals obj + method changed = GtkSignal.connect ~sgn:Adjustment.Signals.changed obj ~after + method value_changed = + GtkSignal.connect ~sgn:Adjustment.Signals.value_changed obj ~after +end + +class adjustment obj = object + inherit gtkobj obj + method as_adjustment : Gtk.adjustment obj = obj + method connect = new adjustment_signals obj + method set_value = Adjustment.set_value obj + method clamp_page = Adjustment.clamp_page obj + method lower = Adjustment.get_lower obj + method upper = Adjustment.get_upper obj + method value = Adjustment.get_value obj + method step_increment = Adjustment.get_step_increment obj + method page_increment = Adjustment.get_page_increment obj + method page_size = Adjustment.get_page_size obj +end + +let adjustment ?(value=0.) ?(lower=0.) ?(upper=100.) + ?(step_incr=1.) ?(page_incr=10.) ?(page_size=10.) () = + let w = + Adjustment.create ~value ~lower ~upper ~step_incr ~page_incr ~page_size in + new adjustment w + +let as_adjustment (adj : adjustment) = adj#as_adjustment + +class tooltips obj = object + inherit gtkobj (obj : Gtk.tooltips obj) + method as_tooltips = obj + method connect = new data_signals obj + method enable () = Tooltips.enable obj + method disable () = Tooltips.disable obj + method set_tip ?text ?privat w = + Tooltips.set_tip obj (as_widget w) ?text ?privat + method set_delay = Tooltips.set_delay obj +end + +let tooltips ?delay () = + let tt = Tooltips.create () in + Tooltips.set tt ?delay; + new tooltips tt + + + diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli new file mode 100644 index 000000000..ae7b29eb5 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli @@ -0,0 +1,60 @@ +(* $Id$ *) + +open Gtk + +class data_signals : + 'a obj -> + object + inherit GObj.gtkobj_signals + constraint 'a = [>`data] + val obj : 'a obj + method disconnect_data : callback:(unit -> unit) -> GtkSignal.id + end + +class adjustment_signals : + 'a obj -> + object + inherit data_signals + constraint 'a = [>`adjustment|`data] + val obj : 'a obj + method changed : callback:(unit -> unit) -> GtkSignal.id + method value_changed : callback:(unit -> unit) -> GtkSignal.id + end + +class adjustment : Gtk.adjustment obj -> + object + inherit GObj.gtkobj + val obj : Gtk.adjustment obj + method as_adjustment : Gtk.adjustment obj + method clamp_page : lower:float -> upper:float -> unit + method connect : adjustment_signals + method set_value : float -> unit + method lower : float + method upper : float + method value : float + method step_increment : float + method page_increment : float + method page_size : float + end +val adjustment : + ?value:float -> + ?lower:float -> + ?upper:float -> + ?step_incr:float -> + ?page_incr:float -> ?page_size:float -> unit -> adjustment + +val as_adjustment : adjustment -> Gtk.adjustment obj + +class tooltips : + Gtk.tooltips obj -> + object + inherit GObj.gtkobj + val obj : Gtk.tooltips obj + method as_tooltips : Gtk.tooltips obj + method connect : data_signals + method disable : unit -> unit + method enable : unit -> unit + method set_delay : int -> unit + method set_tip : ?text:string -> ?privat:string -> GObj.widget -> unit + end +val tooltips : ?delay:int -> unit -> tooltips diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml new file mode 100644 index 000000000..5782079a0 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml @@ -0,0 +1,163 @@ +(* $Id$ *) + +open Gaux +open Gdk + +type color = [ + | `COLOR of Color.t + | `WHITE + | `BLACK + | `NAME of string + | `RGB of int * int * int +] + +let default_colormap = GtkBase.Widget.get_default_colormap + +let color ?(colormap = default_colormap ()) (c : color) = + match c with + | `COLOR col -> col + | #Gdk.Color.spec as def -> Color.alloc ~colormap def + +type optcolor = [ + | `COLOR of Color.t + | `WHITE + | `BLACK + | `NAME of string + | `RGB of int * int * int + | `DEFAULT +] + +let optcolor ?colormap (c : optcolor) = + match c with + | `DEFAULT -> None + | #color as c -> Some (color ?colormap c) + +class ['a] drawable ?(colormap = default_colormap ()) w = +object (self) + val colormap = colormap + val gc = GC.create w + val w : 'a Gdk.drawable = w + method color = color ~colormap + method set_foreground col = GC.set_foreground gc (self#color col) + method set_background col = GC.set_background gc (self#color col) + method gc_values = GC.get_values gc + method set_clip_region region = GC.set_clip_region gc region + method set_line_attributes ?width ?style ?cap ?join () = + let v = GC.get_values gc in + GC.set_line_attributes gc + ~width:(default v.GC.line_width ~opt:width) + ~style:(default v.GC.line_style ~opt:style) + ~cap:(default v.GC.cap_style ~opt:cap) + ~join:(default v.GC.join_style ~opt:join) + method point = Draw.point w gc + method line = Draw.line w gc + method rectangle = Draw.rectangle w gc + method arc = Draw.arc w gc + method polygon ?filled l = Draw.polygon w gc ?filled l + method string s = Draw.string w gc ~string:s + method image ~width ~height ?(xsrc=0) ?(ysrc=0) ?(xdest=0) ?(ydest=0) image = + Draw.image w gc ~image ~width ~height ~xsrc ~ysrc ~xdest ~ydest +end + +class pixmap ?colormap ?mask pm = object + inherit [[`pixmap]] drawable ?colormap pm as pixmap + val bitmap = may_map mask ~f: + begin fun x -> + let mask = new drawable x in + mask#set_foreground `WHITE; + mask + end + val mask : Gdk.bitmap option = mask + method pixmap = w + method mask = mask + method set_line_attributes ?width ?style ?cap ?join () = + pixmap#set_line_attributes ?width ?style ?cap ?join (); + may bitmap ~f:(fun m -> m#set_line_attributes ?width ?style ?cap ?join ()) + method point ~x ~y = + pixmap#point ~x ~y; + may bitmap ~f:(fun m -> m#point ~x ~y) + method line ~x ~y ~x:x' ~y:y' = + pixmap#line ~x ~y ~x:x' ~y:y'; + may bitmap ~f:(fun m -> m#line ~x ~y ~x:x' ~y:y') + method rectangle ~x ~y ~width ~height ?filled () = + pixmap#rectangle ~x ~y ~width ~height ?filled (); + may bitmap ~f:(fun m -> m#rectangle ~x ~y ~width ~height ?filled ()) + method arc ~x ~y ~width ~height ?filled ?start ?angle () = + pixmap#arc ~x ~y ~width ~height ?filled ?start ?angle (); + may bitmap + ~f:(fun m -> m#arc ~x ~y ~width ~height ?filled ?start ?angle ()); + method polygon ?filled l = + pixmap#polygon ?filled l; + may bitmap ~f:(fun m -> m#polygon ?filled l) + method string s ~font ~x ~y = + pixmap#string s ~font ~x ~y; + may bitmap ~f:(fun m -> m#string s ~font ~x ~y) +end + +class type misc_ops = object + method allocation : Gtk.rectangle + method colormap : colormap + method draw : Rectangle.t option -> unit + method hide : unit -> unit + method hide_all : unit -> unit + method intersect : Rectangle.t -> Rectangle.t option + method pointer : int * int + method realize : unit -> unit + method set_app_paintable : bool -> unit + method set_geometry : + ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit + method show : unit -> unit + method unmap : unit -> unit + method unparent : unit -> unit + method unrealize : unit -> unit + method visible : bool + method visual : visual + method visual_depth : int + method window : window +end + +let pixmap ~(window : < misc : #misc_ops; .. >) + ~width ~height ?(mask=false) () = + window#misc#realize (); + let window = + try window#misc#window + with Gpointer.Null -> failwith "GDraw.pixmap : no window" + and depth = window#misc#visual_depth + and colormap = window#misc#colormap in + let mask = + if not mask then None else + let bm = Bitmap.create window ~width ~height in + let mask = new drawable bm in + mask#set_foreground `BLACK; + mask#rectangle ~x:0 ~y:0 ~width ~height ~filled:true (); + Some bm + in + new pixmap (Pixmap.create window ~width ~height ~depth) ~colormap ?mask + +let pixmap_from_xpm ~window ~file ?colormap ?transparent () = + window#misc#realize (); + let window = + try window#misc#window + with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm : no window" in + let pm, mask = + try Pixmap.create_from_xpm window ~file ?colormap + ?transparent:(may_map transparent ~f:(fun c -> color c)) + with Gpointer.Null -> invalid_arg ("GDraw.pixmap_from_xpm : " ^ file) in + new pixmap pm ?colormap ~mask + +let pixmap_from_xpm_d ~window ~data ?colormap ?transparent () = + window#misc#realize (); + let window = + try window#misc#window + with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm_d : no window" in + let pm, mask = + Pixmap.create_from_xpm_d window ~data ?colormap + ?transparent:(may_map transparent ~f:(fun c -> color c)) in + new pixmap pm ?colormap ~mask + +class drag_context context = object + val context = context + method status ?(time=0) act = DnD.drag_status context act ~time + method suggested_action = DnD.drag_context_suggested_action context + method targets = DnD.drag_context_targets context +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli new file mode 100644 index 000000000..2b5fc8627 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli @@ -0,0 +1,107 @@ +(* $Id$ *) + +open Gdk + +type color = + [ `COLOR of Color.t + | `WHITE + | `BLACK + | `NAME of string + | `RGB of int * int * int] + +val color : ?colormap:colormap -> color -> Color.t + +type optcolor = + [ `COLOR of Color.t + | `WHITE + | `BLACK + | `NAME of string + | `RGB of int * int * int + | `DEFAULT ] + +val optcolor : ?colormap:colormap -> optcolor -> Color.t option + +class ['a] drawable : ?colormap:colormap -> 'a Gdk.drawable -> + object + val gc : gc + val w : 'a Gdk.drawable + method arc : + x:int -> + y:int -> + width:int -> + height:int -> + ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit + method color : color -> Color.t + method gc_values : GC.values + method image : + width:int -> + height:int -> + ?xsrc:int -> ?ysrc:int -> ?xdest:int -> ?ydest:int -> image -> unit + method line : x:int -> y:int -> x:int -> y:int -> unit + method point : x:int -> y:int -> unit + method polygon : ?filled:bool -> (int * int) list -> unit + method rectangle : + x:int -> + y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit + method set_background : color -> unit + method set_foreground : color -> unit + method set_clip_region : region -> unit + method set_line_attributes : + ?width:int -> + ?style:GC.gdkLineStyle -> + ?cap:GC.gdkCapStyle -> ?join:GC.gdkJoinStyle -> unit -> unit + method string : string -> font:font -> x:int -> y:int -> unit + end + +class pixmap : + ?colormap:colormap -> ?mask:bitmap -> [ `pixmap] Gdk.drawable -> + object + inherit [[`pixmap]] drawable + val bitmap : [ `bitmap] drawable option + val mask : bitmap option + method mask : bitmap option + method pixmap : Gdk.pixmap + end + +class type misc_ops = + object + method allocation : Gtk.rectangle + method colormap : colormap + method draw : Rectangle.t option -> unit + method hide : unit -> unit + method hide_all : unit -> unit + method intersect : Rectangle.t -> Rectangle.t option + method pointer : int * int + method realize : unit -> unit + method set_app_paintable : bool -> unit + method set_geometry : + ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit + method show : unit -> unit + method unmap : unit -> unit + method unparent : unit -> unit + method unrealize : unit -> unit + method visible : bool + method visual : visual + method visual_depth : int + method window : window + end + +val pixmap : + window:< misc : #misc_ops; .. > -> + width:int -> height:int -> ?mask:bool -> unit -> pixmap +val pixmap_from_xpm : + window:< misc : #misc_ops; .. > -> + file:string -> + ?colormap:colormap -> ?transparent:color -> unit -> pixmap +val pixmap_from_xpm_d : + window:< misc : #misc_ops; .. > -> + data:string array -> + ?colormap:colormap -> ?transparent:color -> unit -> pixmap + +class drag_context : Gdk.drag_context -> + object + val context : Gdk.drag_context + method status : ?time:int -> Tags.drag_action list -> unit + method suggested_action : Tags.drag_action + method targets : atom list + end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml new file mode 100644 index 000000000..467ee4505 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml @@ -0,0 +1,147 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkEdit +open GObj + +class editable_signals obj = object + inherit widget_signals obj + method activate = GtkSignal.connect ~sgn:Editable.Signals.activate obj ~after + method changed = GtkSignal.connect ~sgn:Editable.Signals.changed obj ~after + method insert_text = + GtkSignal.connect ~sgn:Editable.Signals.insert_text obj ~after + method delete_text = + GtkSignal.connect ~sgn:Editable.Signals.delete_text obj ~after +end + +class editable obj = object + inherit widget obj + method connect = new editable_signals obj + method select_region = Editable.select_region obj + method insert_text = Editable.insert_text obj + method delete_text = Editable.delete_text obj + method get_chars = Editable.get_chars obj + method cut_clipboard () = Editable.cut_clipboard obj + method copy_clipboard () = Editable.copy_clipboard obj + method paste_clipboard () = Editable.paste_clipboard obj + method delete_selection () = Editable.delete_selection obj + method set_position = Editable.set_position obj + method position = Editable.get_position obj + method set_editable = Editable.set_editable obj + method selection = + if Editable.has_selection obj then + Some (Editable.selection_start_pos obj, Editable.selection_end_pos obj) + else None +end + +class entry obj = object + inherit editable obj + method event = new GObj.event_ops obj + method set_text = Entry.set_text obj + method append_text = Entry.append_text obj + method prepend_text = Entry.prepend_text obj + method set_visibility = Entry.set_visibility obj + method set_max_length = Entry.set_max_length obj + method text = Entry.get_text obj + method text_length = Entry.text_length obj +end + +let set_editable ?editable ?(width = -2) ?(height = -2) w = + may editable ~f:(Editable.set_editable w); + if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height + +let entry ?max_length ?text ?visibility ?editable + ?width ?height ?packing ?show () = + let w = Entry.create ?max_length () in + Entry.set w ?text ?visibility; + set_editable w ?editable ?width ?height; + pack_return (new entry w) ~packing ~show + +class spin_button obj = object + inherit entry (obj : Gtk.spin_button obj) + method adjustment = new GData.adjustment (SpinButton.get_adjustment obj) + method value = SpinButton.get_value obj + method value_as_int = SpinButton.get_value_as_int obj + method spin = SpinButton.spin obj + method update = SpinButton.update obj + method set_adjustment adj = + SpinButton.set_adjustment obj (GData.as_adjustment adj) + method set_digits = SpinButton.set_digits obj + method set_value = SpinButton.set_value obj + method set_update_policy = SpinButton.set_update_policy obj + method set_numeric = SpinButton.set_numeric obj + method set_wrap = SpinButton.set_wrap obj + method set_shadow_type = SpinButton.set_shadow_type obj + method set_snap_to_ticks = SpinButton.set_snap_to_ticks obj +end + +let spin_button ?adjustment ?rate ?digits ?value ?update_policy + ?numeric ?wrap ?shadow_type ?snap_to_ticks + ?width ?height ?packing ?show () = + let w = SpinButton.create ?rate ?digits + ?adjustment:(may_map ~f:GData.as_adjustment adjustment) () in + SpinButton.set w ?value ?update_policy + ?numeric ?wrap ?shadow_type ?snap_to_ticks; + set_editable w ?width ?height; + pack_return (new spin_button w) ~packing ~show + +class combo obj = object + inherit GObj.widget (obj : Gtk.combo obj) + method entry = new entry (Combo.entry obj) + method list = new GList.liste (Combo.list obj) + method set_popdown_strings = Combo.set_popdown_strings obj + method set_use_arrows = Combo.set_use_arrows' obj + method set_case_sensitive = Combo.set_case_sensitive obj + method set_value_in_list = Combo.set_value_in_list obj + method disable_activate () = Combo.disable_activate obj + method set_item_string (item : GList.list_item) = + Combo.set_item_string obj item#as_item +end + +let combo ?popdown_strings ?use_arrows + ?case_sensitive ?value_in_list ?ok_if_empty + ?border_width ?width ?height ?packing ?show () = + let w = Combo.create () in + Combo.set w ?popdown_strings ?use_arrows + ?case_sensitive ?value_in_list ?ok_if_empty; + Container.set w ?border_width ?width ?height; + pack_return (new combo w) ~packing ~show + +class text obj = object (self) + inherit editable (obj : Gtk.text obj) as super + method get_chars ~start ~stop:e = + if start < 0 || e > Text.get_length obj || e < start then + invalid_arg "GEdit.text#get_chars"; + super#get_chars ~start ~stop:e + method event = new GObj.event_ops obj + method set_point = Text.set_point obj + method set_hadjustment adj = + Text.set_adjustment obj ~horizontal:(GData.as_adjustment adj) () + method set_vadjustment adj = + Text.set_adjustment obj ~vertical:(GData.as_adjustment adj) () + method set_word_wrap = Text.set_word_wrap obj + method set_line_wrap = Text.set_line_wrap obj + method hadjustment = new GData.adjustment (Text.get_hadjustment obj) + method vadjustment = new GData.adjustment (Text.get_vadjustment obj) + method point = Text.get_point obj + method length = Text.get_length obj + method freeze () = Text.freeze obj + method thaw () = Text.thaw obj + method insert ?font ?foreground ?background text = + let colormap = try Some self#misc#colormap with _ -> None in + Text.insert obj text ?font + ?foreground:(may_map foreground ~f:(GDraw.color ?colormap)) + ?background:(may_map background ~f:(GDraw.color ?colormap)) +end + +let text ?hadjustment ?vadjustment ?editable + ?word_wrap ?line_wrap ?width ?height ?packing ?show () = + let w = Text.create () + ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment) + ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in + may word_wrap ~f:(Text.set_word_wrap w); + may line_wrap ~f:(Text.set_line_wrap w); + set_editable w ?editable ?width ?height; + pack_return (new text w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli new file mode 100644 index 000000000..3b2c286ea --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli @@ -0,0 +1,146 @@ +(* $Id$ *) + +open Gtk +open GObj + +class editable_signals : 'a obj -> + object + inherit widget_signals + constraint 'a = [>`editable|`widget] + val obj : 'a obj + method activate : callback:(unit -> unit) -> GtkSignal.id + method changed : callback:(unit -> unit) -> GtkSignal.id + method delete_text : + callback:(start:int -> stop:int -> unit) -> GtkSignal.id + method insert_text : + callback:(string -> pos:int -> unit) -> GtkSignal.id + end + +class editable : 'a obj -> + object + inherit widget + constraint 'a = [>`editable|`widget] + val obj : 'a obj + method connect : editable_signals + method copy_clipboard : unit -> unit + method cut_clipboard : unit -> unit + method delete_selection : unit -> unit + method delete_text : start:int -> stop:int -> unit + method get_chars : start:int -> stop:int -> string + method insert_text : string -> pos:int -> int + method paste_clipboard : unit -> unit + method position : int + method select_region : start:int -> stop:int -> unit + method selection : (int * int) option + method set_editable : bool -> unit + method set_position : int -> unit + end + +class entry : 'a obj -> + object + inherit editable + constraint 'a = [>`entry|`editable|`widget] + val obj : 'a obj + method event : event_ops + method append_text : string -> unit + method prepend_text : string -> unit + method set_max_length : int -> unit + method set_text : string -> unit + method set_visibility : bool -> unit + method text : string + method text_length : int + end +val entry : + ?max_length:int -> + ?text:string -> + ?visibility:bool -> + ?editable:bool -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> entry + +class spin_button : Gtk.spin_button obj -> + object + inherit entry + val obj : Gtk.spin_button obj + method adjustment : GData.adjustment + method set_adjustment : GData.adjustment -> unit + method set_digits : int -> unit + method set_numeric : bool -> unit + method set_shadow_type : Tags.shadow_type -> unit + method set_snap_to_ticks : bool -> unit + method set_update_policy : [`ALWAYS|`IF_VALID] -> unit + method set_value : float -> unit + method set_wrap : bool -> unit + method spin : Tags.spin_type -> unit + method update : unit + method value : float + method value_as_int : int + end +val spin_button : + ?adjustment:GData.adjustment -> + ?rate:float -> + ?digits:int -> + ?value:float -> + ?update_policy:[`ALWAYS|`IF_VALID] -> + ?numeric:bool -> + ?wrap:bool -> + ?shadow_type:Tags.shadow_type -> + ?snap_to_ticks:bool -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> spin_button + +class combo : Gtk.combo obj -> + object + inherit widget + val obj : Gtk.combo obj + method disable_activate : unit -> unit + method entry : entry + method list : GList.liste + method set_case_sensitive : bool -> unit + method set_item_string : GList.list_item -> string -> unit + method set_popdown_strings : string list -> unit + method set_use_arrows : [`NEVER|`DEFAULT|`ALWAYS] -> unit + method set_value_in_list : + ?required:bool -> ?ok_if_empty:bool -> unit -> unit + end +val combo : + ?popdown_strings:string list -> + ?use_arrows:[`NEVER|`DEFAULT|`ALWAYS] -> + ?case_sensitive:bool -> + ?value_in_list:bool -> + ?ok_if_empty:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> combo + +class text : Gtk.text obj -> + object + inherit editable + val obj : Gtk.text obj + method event : event_ops + method freeze : unit -> unit + method hadjustment : GData.adjustment + method insert : + ?font:Gdk.font -> + ?foreground:GDraw.color -> ?background:GDraw.color -> string -> unit + method length : int + method point : int + method set_hadjustment : GData.adjustment -> unit + method set_point : int -> unit + method set_vadjustment : GData.adjustment -> unit + method set_word_wrap : bool -> unit + method set_line_wrap : bool -> unit + method thaw : unit -> unit + method vadjustment : GData.adjustment + end +val text : + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?editable:bool -> + ?word_wrap:bool -> + ?line_wrap:bool -> + ?width:int -> + ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> text diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml new file mode 100644 index 000000000..1150790c5 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml @@ -0,0 +1,33 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GObj +open GtkXmHTML + +class xmhtml obj = object (self) + inherit widget_full (obj : GtkXmHTML.xmhtml obj) + method event = new GObj.event_ops obj + method freeze = freeze obj + method thaw = thaw obj + method source = source obj + method set_fonts = set_font_familty obj + method set_fonts_fixed = set_font_familty_fixed obj + method set_anchor_buttons = set_anchor_buttons obj + method set_anchor_cursor = set_anchor_cursor obj + method set_anchor_underline = set_anchor_underline_type obj + method set_anchor_visited_underline = set_anchor_visited_underline_type obj + method set_anchor_target_underline = set_anchor_target_underline_type obj + method set_topline = set_topline obj + method topline = get_topline obj + method set_strict_checking = set_strict_checking obj + method set_bad_html_warnings = set_bad_html_warnings obj + method set_imagemap_draw = set_imagemap_draw obj +end + +let xmhtml ?source ?border_width ?width ?height ?packing ?show () = + let w = create () in + Container.set w ?border_width ?width ?height; + may source ~f:(GtkXmHTML.source w); + pack_return (new xmhtml w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml new file mode 100644 index 000000000..3b1abe43b --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml @@ -0,0 +1,162 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkList +open GObj +open GContainer + +class list_item obj = object + inherit container (obj : Gtk.list_item obj) + method event = new GObj.event_ops obj + method as_item = obj + method select () = Item.select obj + method deselect () = Item.deselect obj + method toggle () = Item.toggle obj + method connect = new item_signals obj +end + +let list_item ?label ?border_width ?width ?height ?packing ?(show=true) () = + let w = ListItem.create ?label () in + Container.set w ?border_width ?width ?height; + let item = new list_item w in + may packing ~f:(fun f -> (f item : unit)); + if show then item#misc#show (); + item + +class liste obj = object + inherit [list_item] item_container (obj : Gtk.liste obj) + method private wrap w = new list_item (ListItem.cast w) + method insert w = Liste.insert_item obj w#as_item + method clear_items = Liste.clear_items obj + method select_item = Liste.select_item obj + method unselect_item = Liste.unselect_item obj + method child_position (w : list_item) = Liste.child_position obj w#as_item +end + +let liste ?selection_mode ?border_width ?width ?height + ?packing ?show () = + let w = Liste.create () in + may selection_mode ~f:(Liste.set_selection_mode w); + Container.set w ?border_width ?width ?height; + pack_return (new liste w) ~packing ~show + +(* Cell lists *) + +class clist_signals obj = object + inherit container_signals obj + method click_column = + GtkSignal.connect ~sgn:CList.Signals.click_column obj ~after + method select_row = + GtkSignal.connect ~sgn:CList.Signals.select_row obj ~after + method unselect_row = + GtkSignal.connect ~sgn:CList.Signals.unselect_row obj ~after + method scroll_vertical = + GtkSignal.connect ~sgn:CList.Signals.scroll_vertical obj ~after + method scroll_horizontal = + GtkSignal.connect ~sgn:CList.Signals.scroll_horizontal obj ~after +end + +class ['a] clist obj = object (self) + inherit widget (obj : Gtk.clist obj) + method set_border_width = Container.set_border_width obj + method event = new GObj.event_ops obj + method connect = new clist_signals obj + method rows = CList.get_rows obj + method columns = CList.get_columns obj + method focus_row = CList.get_focus_row obj + method hadjustment = new GData.adjustment (CList.get_hadjustment obj) + method vadjustment = new GData.adjustment (CList.get_vadjustment obj) + method set_button_actions = CList.set_button_actions obj + method freeze () = CList.freeze obj + method thaw () = CList.thaw obj + method column_title = CList.get_column_title obj + method column_widget col = + new widget (CList.get_column_widget obj col) + method columns_autosize () = CList.columns_autosize obj + method optimal_column_width = CList.optimal_column_width obj + method moveto ?(row_align=0.) ?(col_align=0.) row col = + CList.moveto obj row col ~row_align ~col_align + method row_is_visible = CList.row_is_visible obj + method cell_type = CList.get_cell_type obj + method cell_text = CList.get_text obj + method cell_pixmap row col = + let pm, mask = CList.get_pixmap obj row col in + may_map pm ~f:(fun x -> new GDraw.pixmap ?mask x) + method cell_style row col = + try Some (new style (CList.get_cell_style obj row col)) + with Gpointer.Null -> None + method row_selectable row = CList.get_selectable obj ~row + method row_style row = + try Some (new style (CList.get_row_style obj ~row)) + with Gpointer.Null -> None + method set_shift = CList.set_shift obj + method insert ~row texts = + let texts = List.map texts ~f:(fun x -> Some x) in + CList.insert obj ~row texts + method append = self#insert ~row:self#rows + method prepend = self#insert ~row:0 + method remove = CList.remove obj + method select = CList.select obj + method unselect = CList.unselect obj + method clear () = CList.clear obj + method get_row_column = CList.get_row_column obj + method select_all () = CList.select_all obj + method unselect_all () = CList.unselect_all obj + method swap_rows = CList.swap_rows obj + method row_move = CList.row_move obj + method sort () = CList.sort obj + method set_hadjustment adj = + CList.set_hadjustment obj (GData.as_adjustment adj) + method set_vadjustment adj = + CList.set_vadjustment obj (GData.as_adjustment adj) + method set_shadow_type = CList.set_shadow_type obj + method set_button_actions = CList.set_button_actions obj + method set_selection_mode = CList.set_selection_mode obj + method set_reorderable = CList.set_reorderable obj + method set_use_drag_icons = CList.set_use_drag_icons obj + method set_row_height = CList.set_row_height obj + method set_titles_show = CList.set_titles_show obj + method set_titles_active = CList.set_titles_active obj + method set_sort = CList.set_sort obj + method set_column ?widget = + CList.set_column obj ?widget:(may_map widget ~f:as_widget) + method set_row ?foreground ?background ?selectable ?style = + let color = may_map ~f:(fun c -> Gpointer.optboxed (GDraw.optcolor c)) + and style = may_map ~f:(fun (st : style) -> st#as_style) style in + CList.set_row obj + ?foreground:(color foreground) ?background:(color background) + ?selectable ?style + method set_cell ?text ?pixmap ?spacing ?style = + let pixmap, mask = + match pixmap with None -> None, None + | Some (pm : GDraw.pixmap) -> Some pm#pixmap, pm#mask + and style = may_map ~f:(fun (st : style) -> st#as_style) style in + CList.set_cell obj ?text ?pixmap ?mask ?spacing ?style + method set_row_data n ~data = + CList.set_row_data obj ~row:n (Obj.repr (data : 'a)) + method get_row_data n : 'a = Obj.obj (CList.get_row_data obj ~row:n) + method scroll_vertical = + CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_vertical + method scroll_horizontal = + CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_horizontal +end + +let clist ?(columns=1) ?titles ?hadjustment ?vadjustment + ?shadow_type ?button_actions ?selection_mode + ?reorderable ?use_drag_icons ?row_height + ?titles_show ?titles_active ?auto_sort ?sort_column ?sort_type + ?border_width ?width ?height ?packing ?show () = + let w = + match titles with None -> CList.create ~cols:columns + | Some titles -> CList.create_with_titles (Array.of_list titles) + in + CList.set w + ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment) + ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) + ?shadow_type ?button_actions ?selection_mode ?reorderable + ?use_drag_icons ?row_height ?titles_show ?titles_active; + CList.set_sort w ?auto:auto_sort ?column:sort_column ?dir:sort_type (); + Container.set w ?border_width ?width ?height; + pack_return (new clist w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli new file mode 100644 index 000000000..17f4cef96 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli @@ -0,0 +1,158 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class list_item : Gtk.list_item obj -> + object + inherit container + val obj : Gtk.list_item obj + method event : event_ops + method as_item : Gtk.list_item obj + method connect : item_signals + method deselect : unit -> unit + method select : unit -> unit + method toggle : unit -> unit + end +val list_item : + ?label:string -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(list_item -> unit) -> ?show:bool -> unit -> list_item + +class liste : Gtk.liste obj -> + object + inherit [list_item] item_container + val obj : Gtk.liste obj + method child_position : list_item -> int + method clear_items : start:int -> stop:int -> unit + method insert : list_item -> pos:int -> unit + method select_item : pos:int -> unit + method unselect_item : pos:int -> unit + method private wrap : Gtk.widget obj -> list_item + end +val liste : + ?selection_mode:Tags.selection_mode -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> liste + +class clist_signals : 'a obj -> + object + inherit container_signals + constraint 'a = [>`clist|`container|`widget] + val obj : 'a obj + method click_column : callback:(int -> unit) -> GtkSignal.id + method select_row : + callback:(row:int -> + column:int -> event:GdkEvent.Button.t option -> unit) -> + GtkSignal.id + method unselect_row : + callback:(row:int -> + column:int -> event:GdkEvent.Button.t option -> unit) -> + GtkSignal.id + method scroll_horizontal : + callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id + method scroll_vertical : + callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id + end + +class ['a] clist : Gtk.clist obj -> + object + inherit widget + val obj : Gtk.clist obj + method event : event_ops + method append : string list -> int + method cell_pixmap : int -> int -> GDraw.pixmap option + method cell_style : int -> int -> style option + method cell_text : int -> int -> string + method cell_type : int -> int -> Tags.cell_type + method clear : unit -> unit + method column_title : int -> string + method column_widget : int -> widget + method columns : int + method columns_autosize : unit -> unit + method connect : clist_signals + method focus_row : int + method freeze : unit -> unit + method get_row_column : x:int -> y:int -> int * int + method get_row_data : int -> 'a + method hadjustment : GData.adjustment + method insert : row:int -> string list -> int + method moveto : + ?row_align:clampf -> ?col_align:clampf -> int -> int -> unit + method optimal_column_width : int -> int + method prepend : string list -> int + method remove : row:int -> unit + method row_is_visible : int -> Tags.visibility + method row_move : int -> dst:int -> unit + method row_selectable : int -> bool + method row_style : int -> style option + method rows : int + method scroll_vertical : Tags.scroll_type -> pos:clampf -> unit + method scroll_horizontal : Tags.scroll_type -> pos:clampf -> unit + method select : int -> int -> unit + method select_all : unit -> unit + method set_border_width : int -> unit + method set_button_actions : int -> Tags.button_action list -> unit + method set_cell : + ?text:string -> + ?pixmap:GDraw.pixmap -> + ?spacing:int -> ?style:style -> int -> int -> unit + method set_column : + ?widget:widget -> + ?title:string -> + ?title_active:bool -> + ?justification:Tags.justification -> + ?visibility:bool -> + ?resizeable:bool -> + ?auto_resize:bool -> + ?width:int -> ?min_width:int -> ?max_width:int -> int -> unit + method set_hadjustment : GData.adjustment -> unit + method set_reorderable : bool -> unit + method set_row : + ?foreground:GDraw.optcolor -> + ?background:GDraw.optcolor -> + ?selectable:bool -> + ?style:style -> int -> unit + method set_row_data : int -> data:'a -> unit + method set_row_height : int -> unit + method set_selection_mode : Tags.selection_mode -> unit + method set_shadow_type : Tags.shadow_type -> unit + method set_shift : int -> int -> vertical:int -> horizontal:int -> unit + method set_sort : + ?auto:bool -> ?column:int -> ?dir:Tags.sort_type -> unit -> unit + method set_titles_active : bool -> unit + method set_titles_show : bool -> unit + method set_use_drag_icons : bool -> unit + method set_vadjustment : GData.adjustment -> unit + method sort : unit -> unit + method swap_rows : int -> int -> unit + method thaw : unit -> unit + method unselect : int -> int -> unit + method unselect_all : unit -> unit + method vadjustment : GData.adjustment + end +val clist : + ?columns:int -> + ?titles:string list -> + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?shadow_type:Tags.shadow_type -> + ?button_actions:(int * Tags.button_action list) list -> + ?selection_mode:Tags.selection_mode -> + ?reorderable:bool -> + ?use_drag_icons:bool -> + ?row_height:int -> + ?titles_show:bool -> + ?titles_active:bool -> + ?auto_sort:bool -> + ?sort_column:int -> + ?sort_type:Tags.sort_type -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> 'a clist diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml new file mode 100644 index 000000000..811f490d4 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml @@ -0,0 +1,26 @@ +(* $Id$ *) + +open Gtk +open GtkMain +open GObj + +module Main : sig + val init : unit -> string (* returns the locale name *) + val main : unit -> unit + val quit : unit -> unit + val version : int * int * int + val flush : unit -> unit +end = Main + +module Grab = struct + open Grab + let add (w : #widget) = add w#as_widget + let remove (w : #widget) = remove w#as_widget + let get_current () = new widget (get_current ()) +end + +module Timeout : sig + type id + val add : ms:int -> callback:(unit -> bool) -> id + val remove : id -> unit +end = Timeout diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml new file mode 100644 index 000000000..52f05a462 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml @@ -0,0 +1,199 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkData +open GtkBase +open GtkMenu +open GObj +open GContainer + +(* Menu type *) + +class menu_shell_signals obj = object + inherit container_signals obj + method deactivate = + GtkSignal.connect ~sgn:MenuShell.Signals.deactivate obj ~after +end + +class type virtual ['a] pre_menu = object + inherit ['a] item_container + method as_menu : Gtk.menu Gtk.obj + method deactivate : unit -> unit + method connect : menu_shell_signals + method event : event_ops + method popup : button:int -> time:int -> unit + method popdown : unit -> unit + method set_accel_group : accel_group -> unit +end + +(* Menu items *) + +class menu_item_signals obj = object + inherit item_signals obj + method activate = GtkSignal.connect ~sgn:MenuItem.Signals.activate obj +end + + +class ['a] pre_menu_item_skel obj = object + inherit container obj + method as_item = MenuItem.coerce obj + method set_submenu (w : 'a pre_menu) = MenuItem.set_submenu obj w#as_menu + method remove_submenu () = MenuItem.remove_submenu obj + method configure = MenuItem.configure obj + method activate () = MenuItem.activate obj + method right_justify () = MenuItem.right_justify obj + method add_accelerator ~group ?modi:m ?flags key= + Widget.add_accelerator obj ~sgn:MenuItem.Signals.activate group ?flags + ?modi:m ~key +end + +class menu_item obj = object + inherit [menu_item] pre_menu_item_skel obj + method connect = new menu_item_signals obj + method event = new GObj.event_ops obj +end + +class menu_item_skel = [menu_item] pre_menu_item_skel + +let pack_item self ~packing ~show = + may packing ~f:(fun f -> (f (self :> menu_item) : unit)); + if show <> Some false then self#misc#show (); + self + +let menu_item ?label ?border_width ?width ?height ?packing ?show () = + let w = MenuItem.create ?label () in + Container.set w ?border_width ?width ?height; + pack_item (new menu_item w) ?packing ?show + +let tearoff_item ?border_width ?width ?height ?packing ?show () = + let w = MenuItem.tearoff_create () in + Container.set w ?border_width ?width ?height; + pack_item (new menu_item w) ?packing ?show + +class check_menu_item_signals obj = object + inherit menu_item_signals obj + method toggled = + GtkSignal.connect ~sgn:CheckMenuItem.Signals.toggled obj ~after +end + +class check_menu_item obj = object + inherit menu_item_skel obj + method set_active = CheckMenuItem.set_active obj + method set_show_toggle = CheckMenuItem.set_show_toggle obj + method active = CheckMenuItem.get_active obj + method toggled () = CheckMenuItem.toggled obj + method connect = new check_menu_item_signals obj + method event = new GObj.event_ops obj +end + +let check_menu_item ?label ?active ?show_toggle + ?border_width ?width ?height ?packing ?show () = + let w = CheckMenuItem.create ?label () in + CheckMenuItem.set w ?active ?show_toggle; + Container.set w ?border_width ?width ?height; + pack_item (new check_menu_item w) ?packing ?show + +class radio_menu_item obj = object + inherit check_menu_item (obj : Gtk.radio_menu_item obj) + method group = Some obj + method set_group = RadioMenuItem.set_group obj +end + +let radio_menu_item ?group ?label ?active ?show_toggle + ?border_width ?width ?height ?packing ?show () = + let w = RadioMenuItem.create ?group ?label () in + CheckMenuItem.set w ?active ?show_toggle; + Container.set w ?border_width ?width ?height; + pack_item (new radio_menu_item w) ?packing ?show + +(* Menus *) + +class menu_shell obj = object + inherit [menu_item] item_container obj + method private wrap w = new menu_item (MenuItem.cast w) + method insert w = MenuShell.insert obj w#as_item + method deactivate () = MenuShell.deactivate obj + method connect = new menu_shell_signals obj + method event = new GObj.event_ops obj +end + +class menu obj = object + inherit menu_shell obj + method popup = Menu.popup obj + method popdown () = Menu.popdown obj + method as_menu : Gtk.menu obj = obj + method set_accel_group = Menu.set_accel_group obj +end + +let menu ?border_width ?packing ?show () = + let w = Menu.create () in + may border_width ~f:(Container.set_border_width w); + let self = new menu w in + may packing ~f:(fun f -> (f (self :> menu) : unit)); + if show <> Some false then self#misc#show (); + self + +(* Option Menu (GtkButton?) *) + +class option_menu obj = object + inherit GButton.button_skel obj + method connect = new GButton.button_signals obj + method event = new GObj.event_ops obj + method set_menu (menu : menu) = OptionMenu.set_menu obj menu#as_menu + method get_menu = new menu (OptionMenu.get_menu obj) + method remove_menu () = OptionMenu.remove_menu obj + method set_history = OptionMenu.set_history obj +end + +let option_menu ?border_width ?width ?height ?packing ?show () = + let w = OptionMenu.create () in + Container.set w ?border_width ?width ?height; + pack_return (new option_menu w) ~packing ~show + +(* Menu Bar *) + +let menu_bar ?border_width ?width ?height ?packing ?show () = + let w = MenuBar.create () in + Container.set w ?border_width ?width ?height; + pack_return (new menu_shell w) ~packing ~show + +(* Menu Factory *) + +class ['a] factory + ?(accel_group=AccelGroup.create ()) + ?(accel_modi=[`CONTROL]) + ?(accel_flags=[`VISIBLE]) (menu_shell : 'a) = + object (self) + val menu_shell : #menu_shell = menu_shell + val group = accel_group + val m = accel_modi + val flags = accel_flags + method menu = menu_shell + method accel_group = group + method private bind ?key ?callback (item : menu_item) = + menu_shell#append item; + may key ~f:(item#add_accelerator ~group ~modi:m ~flags); + may callback ~f:(fun callback -> item#connect#activate ~callback) + method add_item ?key ?callback ?submenu label = + let item = menu_item ~label () in + self#bind item ?key ?callback; + may (submenu : menu option) ~f:item#set_submenu; + item + method add_check_item ?active ?key ?callback label = + let item = check_menu_item ~label ?active () in + self#bind (item :> menu_item) ?key + ?callback:(may_map callback ~f:(fun f () -> f item#active)); + item + method add_radio_item ?group ?active ?key ?callback label = + let item = radio_menu_item ~label ?group ?active () in + self#bind (item :> menu_item) ?key + ?callback:(may_map callback ~f:(fun f () -> f item#active)); + item + method add_separator () = menu_item ~packing:menu_shell#append () + method add_submenu ?key label = + let item = menu_item ~label () in + self#bind item ?key; + menu ~packing:item#set_submenu (); + method add_tearoff () = tearoff_item ~packing:menu_shell#append () +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli new file mode 100644 index 000000000..505249bea --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli @@ -0,0 +1,196 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class menu_shell_signals : 'b obj -> + object ('a) + inherit container_signals + constraint 'b = [>`menushell|`container|`widget] + val obj : 'b obj + method deactivate : callback:(unit -> unit) -> GtkSignal.id + end + +class menu_item_signals : 'b obj -> + object ('a) + inherit item_signals + constraint 'b = [>`menuitem|`container|`item|`widget] + val obj : 'b obj + method activate : callback:(unit -> unit) -> GtkSignal.id + end + +class menu_item_skel : + 'a obj -> + object + inherit container + constraint 'a = [>`widget|`container|`menuitem] + val obj : 'a obj + method activate : unit -> unit + method add_accelerator : + group:accel_group -> + ?modi:Gdk.Tags.modifier list -> + ?flags:Tags.accel_flag list -> Gdk.keysym -> unit + method as_item : Gtk.menu_item obj + method configure : show_toggle:bool -> show_indicator:bool -> unit + method remove_submenu : unit -> unit + method right_justify : unit -> unit + method set_submenu : menu -> unit + end +and menu_item : 'a obj -> + object + inherit menu_item_skel + constraint 'a = [>`widget|`container|`item|`menuitem] + val obj : 'a obj + method event : event_ops + method connect : menu_item_signals + end +and menu : Gtk.menu obj -> + object + inherit [menu_item] item_container + val obj : Gtk.menu obj + method add : menu_item -> unit + method event : event_ops + method append : menu_item -> unit + method as_menu : Gtk.menu obj + method children : menu_item list + method connect : menu_shell_signals + method deactivate : unit -> unit + method insert : menu_item -> pos:int -> unit + method popdown : unit -> unit + method popup : button:int -> time:int -> unit + method prepend : menu_item -> unit + method remove : menu_item -> unit + method set_accel_group : accel_group -> unit + method set_border_width : int -> unit + method private wrap : Gtk.widget obj -> menu_item + end + +val menu : + ?border_width:int -> ?packing:(menu -> unit) -> ?show:bool -> unit -> menu +val menu_item : + ?label:string -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item +val tearoff_item : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item + +class check_menu_item_signals : 'a obj -> + object + inherit menu_item_signals + constraint 'a = [>`checkmenuitem|`container|`item|`menuitem|`widget] + val obj : 'a obj + method toggled : callback:(unit -> unit) -> GtkSignal.id + end + +class check_menu_item : 'a obj -> + object + inherit menu_item_skel + constraint 'a = [>`widget|`checkmenuitem|`container|`item|`menuitem] + val obj : 'a obj + method active : bool + method event : event_ops + method connect : check_menu_item_signals + method set_active : bool -> unit + method set_show_toggle : bool -> unit + method toggled : unit -> unit + end +val check_menu_item : + ?label:string -> + ?active:bool -> + ?show_toggle:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(menu_item -> unit) -> ?show:bool -> unit -> check_menu_item + +class radio_menu_item : Gtk.radio_menu_item obj -> + object + inherit check_menu_item + val obj : Gtk.radio_menu_item obj + method group : Gtk.radio_menu_item group + method set_group : Gtk.radio_menu_item group -> unit + end +val radio_menu_item : + ?group:Gtk.radio_menu_item group -> + ?label:string -> + ?active:bool -> + ?show_toggle:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(menu_item -> unit) -> ?show:bool -> unit -> radio_menu_item + +class menu_shell : 'a obj -> + object + inherit [menu_item] item_container + constraint 'a = [>`widget|`container|`menushell] + val obj : 'a obj + method event : event_ops + method deactivate : unit -> unit + method connect : menu_shell_signals + method insert : menu_item -> pos:int -> unit + method private wrap : Gtk.widget obj -> menu_item + end + +val menu_bar : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> menu_shell + +class option_menu : 'a obj -> + object + inherit GButton.button_skel + constraint 'a = [>`optionmenu|`button|`container|`widget] + val obj : 'a obj + method event : event_ops + method connect : GButton.button_signals + method get_menu : menu + method remove_menu : unit -> unit + method set_history : int -> unit + method set_menu : menu -> unit + end +val option_menu : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> option_menu + +class ['a] factory : + ?accel_group:accel_group -> + ?accel_modi:Gdk.Tags.modifier list -> + ?accel_flags:Tags.accel_flag list -> + 'a -> + object + constraint 'a = #menu_shell + val flags : Tags.accel_flag list + val group : accel_group + val m : Gdk.Tags.modifier list + val menu_shell : 'a + method accel_group : accel_group + method add_check_item : + ?active:bool -> + ?key:Gdk.keysym -> + ?callback:(bool -> unit) -> string -> check_menu_item + method add_item : + ?key:Gdk.keysym -> + ?callback:(unit -> unit) -> + ?submenu:menu -> string -> menu_item + method add_radio_item : + ?group:Gtk.radio_menu_item group -> + ?active:bool -> + ?key:Gdk.keysym -> + ?callback:(bool -> unit) -> string -> radio_menu_item + method add_separator : unit -> menu_item + method add_submenu : ?key:Gdk.keysym -> string -> menu + method add_tearoff : unit -> menu_item + method private bind : + ?key:Gdk.keysym -> ?callback:(unit -> unit) -> menu_item -> unit + method menu : 'a + end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml new file mode 100644 index 000000000..13fd7b4dd --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml @@ -0,0 +1,217 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkMisc +open GObj + +let separator dir ?(width = -2) ?(height = -2) ?packing ?show () = + let w = Separator.create dir in + if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height; + pack_return (new widget_full w) ~packing ~show + +class statusbar_context obj ctx = object (self) + val obj : statusbar obj = obj + val context : Gtk.statusbar_context = ctx + method context = context + method push text = Statusbar.push obj context ~text + method pop () = Statusbar.pop obj context + method remove = Statusbar.remove obj context + method flash ?(delay=1000) text = + let msg = self#push text in + GtkMain.Timeout.add ~ms:delay ~callback:(fun () -> self#remove msg; false); + () +end + +class statusbar obj = object + inherit GContainer.container_full (obj : Gtk.statusbar obj) + method new_context ~name = + new statusbar_context obj (Statusbar.get_context obj name) +end + +let statusbar ?border_width ?width ?height ?packing ?show () = + let w = Statusbar.create () in + Container.set w ?border_width ?width ?height; + pack_return (new statusbar w) ~packing ~show + +class calendar_signals obj = object + inherit widget_signals obj + method month_changed = + GtkSignal.connect obj ~sgn:Calendar.Signals.month_changed ~after + method day_selected = + GtkSignal.connect obj ~sgn:Calendar.Signals.day_selected ~after + method day_selected_double_click = + GtkSignal.connect obj + ~sgn:Calendar.Signals.day_selected_double_click ~after + method prev_month = + GtkSignal.connect obj ~sgn:Calendar.Signals.prev_month ~after + method next_month = + GtkSignal.connect obj ~sgn:Calendar.Signals.next_month ~after + method prev_year = + GtkSignal.connect obj ~sgn:Calendar.Signals.prev_year ~after + method next_year = + GtkSignal.connect obj ~sgn:Calendar.Signals.next_year ~after +end + +class calendar obj = object + inherit widget (obj : Gtk.calendar obj) + method event = new GObj.event_ops obj + method connect = new calendar_signals obj + method select_month = Calendar.select_month obj + method select_day = Calendar.select_day obj + method mark_day = Calendar.mark_day obj + method unmark_day = Calendar.unmark_day obj + method clear_marks = Calendar.clear_marks obj + method display_options = Calendar.display_options obj + method date = Calendar.get_date obj + method freeze () = Calendar.freeze obj + method thaw () = Calendar.thaw obj +end + +let calendar ?options ?(width = -2) ?(height = -2) ?packing ?show () = + let w = Calendar.create () in + if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height; + may options ~f:(Calendar.display_options w); + pack_return (new calendar w) ~packing ~show + +class drawing_area obj = object + inherit widget_full (obj : Gtk.drawing_area obj) + method event = new GObj.event_ops obj + method set_size = DrawingArea.size obj +end + +let drawing_area ?(width=0) ?(height=0) ?packing ?show () = + let w = DrawingArea.create () in + if width <> 0 || height <> 0 then DrawingArea.size w ~width ~height; + pack_return (new drawing_area w) ~packing ~show + +class misc obj = object + inherit widget obj + method set_alignment = Misc.set_alignment obj + method set_padding = Misc.set_padding obj +end + +class arrow obj = object + inherit misc obj + method set_arrow kind ~shadow = Arrow.set obj ~kind ~shadow +end + +let arrow ~kind ~shadow + ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () = + let w = Arrow.create ~kind ~shadow in + Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height; + pack_return (new arrow w) ~packing ~show + +class image obj = object + inherit misc obj + method set_image ?mask image = Image.set obj image ?mask +end + +let image image ?mask + ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () = + let w = Image.create image ?mask in + Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height; + pack_return (new image w) ~packing ~show + +class label_skel obj = object + inherit misc obj + method set_text = Label.set_text obj + method set_justify = Label.set_justify obj + method set_pattern = Label.set_pattern obj + method set_line_wrap = Label.set_line_wrap obj + method text = Label.get_text obj +end + +class label obj = object + inherit label_skel (Label.coerce obj) + method connect = new widget_signals obj +end + +let label ?(text="") ?justify ?line_wrap ?pattern + ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () = + let w = Label.create text in + Label.set w ?justify ?line_wrap ?pattern; + Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height; + pack_return (new label w) ~packing ~show + +let label_cast w = new label (Label.cast w#as_widget) + +class tips_query_signals obj = object + inherit widget_signals obj + method widget_entered ~callback = + GtkSignal.connect ~sgn:TipsQuery.Signals.widget_entered obj ~after + ~callback:(function None -> callback None + | Some w -> callback (Some (new widget w))) + method widget_selected ~callback = + GtkSignal.connect ~sgn:TipsQuery.Signals.widget_selected obj ~after + ~callback:(function None -> callback None + | Some w -> callback (Some (new widget w))) +end + +class tips_query obj = object + inherit label_skel (obj : Gtk.tips_query obj) + method start () = TipsQuery.start obj + method stop () = TipsQuery.stop obj + method set_caller (w : widget) = TipsQuery.set_caller obj w#as_widget + method set_emit_always = TipsQuery.set_emit_always obj + method set_label_inactive inactive = TipsQuery.set_labels obj ~inactive + method set_label_no_tip no_tip = TipsQuery.set_labels obj ~no_tip + method connect = new tips_query_signals obj +end + +let tips_query ?caller ?emit_always ?label_inactive ?label_no_tip + ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () = + let w = TipsQuery.create () in + let caller = may_map caller ~f:(fun (w : #widget) -> w#as_widget) in + TipsQuery.set w ?caller ?emit_always ?label_inactive ?label_no_tip; + Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height; + pack_return (new tips_query w) ~packing ~show + +class color_selection obj = object + inherit GObj.widget_full (obj : Gtk.color_selection obj) + method set_update_policy = ColorSelection.set_update_policy obj + method set_opacity = ColorSelection.set_opacity obj + method set_color ~red ~green ~blue ?opacity () = + ColorSelection.set_color obj ~red ~green ~blue ?opacity + method get_color = ColorSelection.get_color obj +end + +let color_selection ?border_width ?width ?height ?packing ?show () = + let w = ColorSelection.create () in + Container.set w ?border_width ?width ?height; + pack_return (new color_selection w) ~packing ~show + +class pixmap obj = object + inherit misc (obj : Gtk.pixmap obj) + method connect = new widget_signals obj + method set_pixmap (pm : GDraw.pixmap) = + Pixmap.set obj ~pixmap:pm#pixmap ?mask:pm#mask + method pixmap = + new GDraw.pixmap (Pixmap.pixmap obj) + ?mask:(try Some(Pixmap.mask obj) with Gpointer.Null -> None) +end + +let pixmap (pm : #GDraw.pixmap) ?xalign ?yalign ?xpad ?ypad + ?(width = -2) ?(height = -2) ?packing ?show () = + let w = Pixmap.create pm#pixmap ?mask:pm#mask in + Misc.set w ?xalign ?yalign ?xpad ?ypad; + if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height; + pack_return (new pixmap w) ~packing ~show + +class font_selection obj = object + inherit widget_full (obj : Gtk.font_selection obj) + method notebook = new GPack.notebook obj + method event = new event_ops obj + method font = FontSelection.get_font obj + method font_name = FontSelection.get_font_name obj + method set_font_name = FontSelection.set_font_name obj + method preview_text = FontSelection.get_preview_text obj + method set_preview_text = FontSelection.set_preview_text obj + method set_filter = FontSelection.set_filter obj +end + +let font_selection ?border_width ?width ?height ?packing ?show () = + let w = FontSelection.create () in + Container.set w ?border_width ?width ?height; + pack_return (new font_selection w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli new file mode 100644 index 000000000..7008369b7 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli @@ -0,0 +1,263 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +val separator : + Tags.orientation -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> widget_full + +class statusbar_context : + Gtk.statusbar obj -> Gtk.statusbar_context -> + object + val context : Gtk.statusbar_context + val obj : Gtk.statusbar obj + method context : Gtk.statusbar_context + method flash : ?delay:int -> string -> unit + method pop : unit -> unit + method push : string -> statusbar_message + method remove : statusbar_message -> unit + end + +class statusbar : Gtk.statusbar obj -> + object + inherit container_full + val obj : Gtk.statusbar obj + method new_context : name:string -> statusbar_context + end +val statusbar : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> statusbar + +class calendar_signals : 'a obj -> + object + inherit widget_signals + constraint 'a = [>`calendar|`widget] + val obj : 'a obj + method day_selected : callback:(unit -> unit) -> GtkSignal.id + method day_selected_double_click : + callback:(unit -> unit) -> GtkSignal.id + method month_changed : callback:(unit -> unit) -> GtkSignal.id + method next_month : callback:(unit -> unit) -> GtkSignal.id + method next_year : callback:(unit -> unit) -> GtkSignal.id + method prev_month : callback:(unit -> unit) -> GtkSignal.id + method prev_year : callback:(unit -> unit) -> GtkSignal.id + end + +class calendar : Gtk.calendar obj -> + object + inherit widget + val obj : Gtk.calendar obj + method event : event_ops + method clear_marks : unit + method connect : calendar_signals + method date : int * int * int + method display_options : Tags.calendar_display_options list -> unit + method freeze : unit -> unit + method mark_day : int -> unit + method select_day : int -> unit + method select_month : month:int -> year:int -> unit + method thaw : unit -> unit + method unmark_day : int -> unit + end +val calendar : + ?options:Tags.calendar_display_options list -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> calendar + +class drawing_area : Gtk.drawing_area obj -> + object + inherit widget_full + val obj : Gtk.drawing_area obj + method event : event_ops + method set_size : width:int -> height:int -> unit + end +val drawing_area : + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> drawing_area + +class misc : 'a obj -> + object + inherit widget + constraint 'a = [>`misc|`widget] + val obj : 'a obj + method set_alignment : ?x:float -> ?y:float -> unit -> unit + method set_padding : ?x:int -> ?y:int -> unit -> unit + end + +class arrow : 'a obj -> + object + inherit misc + constraint 'a = [>`arrow|`misc|`widget] + val obj : 'a obj + method set_arrow : Tags.arrow_type -> shadow:Tags.shadow_type -> unit + end + +val arrow : + kind:Tags.arrow_type -> + shadow:Tags.shadow_type -> + ?xalign:float -> + ?yalign:float -> + ?xpad:int -> + ?ypad:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> arrow + +class image : 'a obj -> + object + inherit misc + constraint 'a = [>`image|`misc|`widget] + val obj : 'a obj + method set_image : ?mask:Gdk.bitmap -> Gdk.image -> unit + end + +val image : + Gdk.image -> + ?mask:Gdk.bitmap -> + ?xalign:float -> + ?yalign:float -> + ?xpad:int -> + ?ypad:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> image + +class label_skel : 'a obj -> + object + inherit misc + constraint 'a = [>`label|`misc|`widget] + val obj : 'a obj + method set_justify : Tags.justification -> unit + method set_line_wrap : bool -> unit + method set_pattern : string -> unit + method set_text : string -> unit + method text : string + end + +class label : [>`label] obj -> + object + inherit label_skel + val obj : Gtk.label obj + method connect : widget_signals + end +val label : + ?text:string -> + ?justify:Tags.justification -> + ?line_wrap:bool -> + ?pattern:string -> + ?xalign:float -> + ?yalign:float -> + ?xpad:int -> + ?ypad:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> label +val label_cast : < as_widget : 'a obj ; .. > -> label + +class tips_query_signals : 'a obj -> + object + inherit widget_signals + constraint 'a = [>`tipsquery|`widget] + val obj : 'a obj + method widget_entered : + callback:(widget option -> + text:string option -> privat:string option -> unit) -> + GtkSignal.id + method widget_selected : + callback:(widget option -> text:string option -> + privat:string option -> GdkEvent.Button.t option -> bool) -> + GtkSignal.id + end + +class tips_query : Gtk.tips_query obj -> + object + inherit label_skel + val obj : Gtk.tips_query obj + method connect : tips_query_signals + method set_caller : widget -> unit + method set_emit_always : bool -> unit + method set_label_inactive : string -> unit + method set_label_no_tip : string -> unit + method start : unit -> unit + method stop : unit -> unit + end +val tips_query : + ?caller:#widget -> + ?emit_always:bool -> + ?label_inactive:string -> + ?label_no_tip:string -> + ?xalign:float -> + ?yalign:float -> + ?xpad:int -> + ?ypad:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> tips_query + +class pixmap : Gtk.pixmap Gtk.obj -> + object + inherit misc + val obj : Gtk.pixmap Gtk.obj + method connect : GObj.widget_signals + method pixmap : GDraw.pixmap + method set_pixmap : GDraw.pixmap -> unit + end +val pixmap : + #GDraw.pixmap -> + ?xalign:float -> + ?yalign:float -> + ?xpad:int -> + ?ypad:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> pixmap + +class color_selection : Gtk.color_selection obj -> + object + inherit widget_full + val obj : Gtk.color_selection obj + method get_color : Gtk.color + method set_color : + red:float -> green:float -> blue:float -> ?opacity:float -> unit -> unit + method set_opacity : bool -> unit + method set_update_policy : Tags.update_type -> unit + end +val color_selection : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> color_selection + +class font_selection : Gtk.font_selection obj -> + object + inherit widget_full + val obj : Gtk.font_selection obj + method event : event_ops + method notebook : GPack.notebook + method font : Gdk.font option + method font_name : string option + method preview_text : string + method set_filter : + ?kind:Tags.font_type list -> + ?foundry:string list -> + ?weight:string list -> + ?slant:string list -> + ?setwidth:string list -> + ?spacing:string list -> + ?charset:string list -> Tags.font_filter_type -> unit + method set_font_name : string -> unit + method set_preview_text : string -> unit + end +val font_selection : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> font_selection diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml new file mode 100644 index 000000000..5c4819fa0 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml @@ -0,0 +1,292 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkData +open GtkBase + +(* Object *) + +class gtkobj obj = object + val obj = obj + method destroy () = Object.destroy obj + method get_id = Object.get_id obj +end + +class gtkobj_misc obj = object + val obj = obj + method get_type = Type.name (Object.get_type obj) + method disconnect = GtkSignal.disconnect obj + method handler_block = GtkSignal.handler_block obj + method handler_unblock = GtkSignal.handler_unblock obj +end + +class gtkobj_signals ?(after=false) obj = object + val obj = obj + val after = after + method after = {< after = true >} + method destroy = GtkSignal.connect ~sgn:Object.Signals.destroy obj +end + +(* Widget *) + +class event_signals ?(after=false) obj = object + val obj = Widget.coerce obj + val after = after + method after = {< after = true >} + method any = GtkSignal.connect ~sgn:Widget.Signals.Event.any ~after obj + method button_press = + GtkSignal.connect ~sgn:Widget.Signals.Event.button_press ~after obj + method button_release = + GtkSignal.connect ~sgn:Widget.Signals.Event.button_release ~after obj + method configure = + GtkSignal.connect ~sgn:Widget.Signals.Event.configure ~after obj + method delete = + GtkSignal.connect ~sgn:Widget.Signals.Event.delete ~after obj + method destroy = + GtkSignal.connect ~sgn:Widget.Signals.Event.destroy ~after obj + method enter_notify = + GtkSignal.connect ~sgn:Widget.Signals.Event.enter_notify ~after obj + method expose = + GtkSignal.connect ~sgn:Widget.Signals.Event.expose ~after obj + method focus_in = + GtkSignal.connect ~sgn:Widget.Signals.Event.focus_in ~after obj + method focus_out = + GtkSignal.connect ~sgn:Widget.Signals.Event.focus_out ~after obj + method key_press = + GtkSignal.connect ~sgn:Widget.Signals.Event.key_press ~after obj + method key_release = + GtkSignal.connect ~sgn:Widget.Signals.Event.key_release ~after obj + method leave_notify = + GtkSignal.connect ~sgn:Widget.Signals.Event.leave_notify ~after obj + method map = GtkSignal.connect ~sgn:Widget.Signals.Event.map ~after obj + method motion_notify = + GtkSignal.connect ~sgn:Widget.Signals.Event.motion_notify ~after obj + method property_notify = + GtkSignal.connect ~sgn:Widget.Signals.Event.property_notify ~after obj + method proximity_in = + GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_in ~after obj + method proximity_out = + GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_out ~after obj + method selection_clear = + GtkSignal.connect ~sgn:Widget.Signals.Event.selection_clear ~after obj + method selection_notify = + GtkSignal.connect ~sgn:Widget.Signals.Event.selection_notify ~after obj + method selection_request = + GtkSignal.connect ~sgn:Widget.Signals.Event.selection_request ~after obj + method unmap = GtkSignal.connect ~sgn:Widget.Signals.Event.unmap ~after obj +end + +class event_ops obj = object + val obj = Widget.coerce obj + method add = Widget.add_events obj + method connect = new event_signals obj + method send : Gdk.Tags.event_type Gdk.event -> bool = Widget.event obj + method set_extensions = Widget.set_extension_events obj +end + +class style st = object + val style = st + method as_style = style + method copy = {< style = Style.copy style >} + method bg state = Style.get_bg style ~state + method colormap = Style.get_colormap style + method font = Style.get_font style + method set_bg = + List.iter ~f: + (fun (state,c) -> Style.set_bg style ~state ~color:(GDraw.color c)) + method set_font = Style.set_font style + method set_background = Style.set_background style +end + +class selection_data (sel : Selection.t) = object + val sel = sel + method selection = Selection.selection sel + method target = Selection.target sel + method seltype = Selection.seltype sel + method format = Selection.format sel + method data = Selection.get_data sel + method set = Selection.set sel +end + +class drag_signals ?(after=false) obj = object + val obj = Widget.coerce obj + val after = after + method after = {< after = true >} + method beginning ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_begin ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method ending ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_end ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method data_delete ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_data_delete ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method leave ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_leave ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method motion ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_motion ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method drop ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_drop ~after obj + ~callback:(fun context -> callback (new drag_context context)) + method data_get ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_data_get ~after obj + ~callback:(fun context data -> callback (new drag_context context) + (new selection_data data)) + method data_received ~callback = + GtkSignal.connect ~sgn:Widget.Signals.drag_data_received ~after obj + ~callback:(fun context ~x ~y data -> callback (new drag_context context) + ~x ~y (new selection_data data)) + +end + +and drag_ops obj = object + val obj = Widget.coerce obj + method connect = new drag_signals obj + method dest_set ?(flags=[`ALL]) ?(actions=[]) targets = + DnD.dest_set obj ~flags ~actions ~targets:(Array.of_list targets) + method dest_unset () = DnD.dest_unset obj + method get_data ?(time=0) ~context:(context : drag_context) target = + DnD.get_data obj (context : < context : Gdk.drag_context; .. >)#context + ~target ~time + method highlight () = DnD.highlight obj + method unhighlight () = DnD.unhighlight obj + method source_set ?modi:m ?(actions=[]) targets = + DnD.source_set obj ?modi:m ~actions ~targets:(Array.of_list targets) + method source_set_icon ?(colormap = Gdk.Color.get_system_colormap ()) + (pix : GDraw.pixmap) = + DnD.source_set_icon obj ~colormap pix#pixmap ?mask:pix#mask + method source_unset () = DnD.source_unset obj +end + +and drag_context context = object + inherit GDraw.drag_context context + method context = context + method finish = DnD.finish context + method source_widget = + new widget (Object.unsafe_cast (DnD.get_source_widget context)) + method set_icon_widget (w : widget) = + DnD.set_icon_widget context (w#as_widget) + method set_icon_pixmap ?(colormap = Gdk.Color.get_system_colormap ()) + (pix : GDraw.pixmap) = + DnD.set_icon_pixmap context ~colormap pix#pixmap ?mask:pix#mask +end + +and misc_signals ?after obj = object + inherit gtkobj_signals ?after obj + method draw ~callback = + GtkSignal.connect obj ~sgn:Widget.Signals.draw ~after ~callback: + begin fun rect -> + callback + { x = Gdk.Rectangle.x rect ; y = Gdk.Rectangle.y rect; + width = Gdk.Rectangle.width rect; + height = Gdk.Rectangle.height rect } + end + method show = GtkSignal.connect ~sgn:Widget.Signals.show ~after obj + method hide = GtkSignal.connect ~sgn:Widget.Signals.hide ~after obj + method map = GtkSignal.connect ~sgn:Widget.Signals.map ~after obj + method unmap = GtkSignal.connect ~sgn:Widget.Signals.unmap ~after obj + method realize = GtkSignal.connect ~sgn:Widget.Signals.realize ~after obj + method state_changed = + GtkSignal.connect ~sgn:Widget.Signals.state_changed ~after obj + method parent_set ~callback = + GtkSignal.connect obj ~sgn:Widget.Signals.parent_set ~after ~callback: + begin function + None -> callback None + | Some w -> callback (Some (new widget (Object.unsafe_cast w))) + end + method style_set ~callback = + GtkSignal.connect obj ~sgn:Widget.Signals.style_set ~after ~callback: + (fun opt -> callback (may opt ~f:(new style))) +end + +and misc_ops obj = object + inherit gtkobj_misc (Widget.coerce obj) + method connect = new misc_signals obj + method show () = Widget.show obj + method unparent () = Widget.unparent obj + method show_all () = Widget.show_all obj + method hide () = Widget.hide obj + method hide_all () = Widget.hide_all obj + method map () = Widget.map obj + method unmap () = Widget.unmap obj + method realize () = Widget.realize obj + method unrealize () = Widget.unrealize obj + method draw = Widget.draw obj + method activate () = Widget.activate obj + method reparent (w : widget) = Widget.reparent obj w#as_widget + method popup = Widget.popup obj + method intersect = Widget.intersect obj + method grab_focus () = Widget.grab_focus obj + method grab_default () = Widget.grab_default obj + method is_ancestor (w : widget) = Widget.is_ancestor obj w#as_widget + method add_accelerator ~sgn:sg ~group ?modi ?flags key = + Widget.add_accelerator obj ~sgn:sg group ~key ?modi ?flags + method remove_accelerator ~group ?modi key = + Widget.remove_accelerator obj group ~key ?modi + method lock_accelerators () = Widget.lock_accelerators obj + method set_name = Widget.set_name obj + method set_state = Widget.set_state obj + method set_sensitive = Widget.set_sensitive obj + method set_can_default = Widget.set_can_default obj + method set_can_focus = Widget.set_can_focus obj + method set_geometry ?(x = -2) ?(y = -2) ?(width = -2) ?(height = -2) () = + if x+y <> -4 then Widget.set_uposition obj ~x ~y; + if width+height <> -4 then Widget.set_usize obj ~width ~height + method set_style (style : style) = Widget.set_style obj style#as_style + (* get functions *) + method name = Widget.get_name obj + method toplevel = + try Some (new widget (Object.unsafe_cast (Widget.get_toplevel obj))) + with Gpointer.Null -> None + method window = Widget.window obj + method colormap = Widget.get_colormap obj + method visual = Widget.get_visual obj + method visual_depth = Gdk.Window.visual_depth (Widget.get_visual obj) + method pointer = Widget.get_pointer obj + method style = new style (Widget.get_style obj) + method visible = Widget.visible obj + method has_focus = Widget.has_focus obj + method parent = + try Some (new widget (Object.unsafe_cast (Widget.parent obj))) + with Gpointer.Null -> None + method set_app_paintable = Widget.set_app_paintable obj + method allocation = Widget.allocation obj +end + +and widget obj = object (self) + inherit gtkobj obj + method as_widget = Widget.coerce obj + method misc = new misc_ops obj + method drag = new drag_ops (Object.unsafe_cast obj) + method coerce = + (self :> < destroy : _; get_id : _; as_widget : _; misc : _; + drag : _; coerce : _ >) +end + +(* just to check that GDraw.misc_ops is compatible with misc_ops *) +let _ = fun (x : #GDraw.misc_ops) -> (x : misc_ops) + +class widget_signals ?after (obj : [> `widget] obj) = + gtkobj_signals ?after obj + +(* +class widget_coerce obj = object + inherit widget obj + method coerce = (self :> widget) +end +*) + +class widget_full obj = object + inherit widget obj + method connect = new widget_signals obj +end + +let as_widget (w : widget) = w#as_widget + +let pack_return self ~packing ~show = + may packing ~f:(fun f -> (f (self :> widget) : unit)); + if show <> Some false then self#misc#show (); + self diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli new file mode 100644 index 000000000..7c37cf124 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli @@ -0,0 +1,267 @@ +(* $Id$ *) + +open Gtk + +(* Object *) + +class gtkobj : + 'a obj -> + object + val obj : 'a obj + method destroy : unit -> unit + method get_id : int + end + +class gtkobj_signals : + ?after:bool -> 'a obj -> + object ('b) + val obj : 'a obj + val after : bool + method after : 'b + method destroy : callback:(unit -> unit) -> GtkSignal.id + end + +class gtkobj_misc : 'a obj -> + object + method get_type : string + method disconnect : GtkSignal.id -> unit + method handler_block : GtkSignal.id -> unit + method handler_unblock : GtkSignal.id -> unit + end + +(* Widget *) + +class event_signals : + ?after:bool -> [>`widget] obj -> + object ('a) + method after : 'a + method any : + callback:(Gdk.Tags.event_type Gdk.event -> bool) -> GtkSignal.id + method button_press : callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id + method button_release : + callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id + method configure : callback:(GdkEvent.Configure.t -> bool) -> GtkSignal.id + method delete : callback:([`DELETE] Gdk.event -> bool) -> GtkSignal.id + method destroy : callback:([`DESTROY] Gdk.event -> bool) -> GtkSignal.id + method enter_notify : + callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id + method expose : callback:(GdkEvent.Expose.t -> bool) -> GtkSignal.id + method focus_in : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id + method focus_out : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id + method key_press : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id + method key_release : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id + method leave_notify : + callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id + method map : callback:([`MAP] Gdk.event -> bool) -> GtkSignal.id + method motion_notify : + callback:(GdkEvent.Motion.t -> bool) -> GtkSignal.id + method property_notify : + callback:(GdkEvent.Property.t -> bool) -> GtkSignal.id + method proximity_in : + callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id + method proximity_out : + callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id + method selection_clear : + callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id + method selection_notify : + callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id + method selection_request : + callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id + method unmap : callback:([`UNMAP] Gdk.event -> bool) -> GtkSignal.id + end + +class event_ops : [>`widget] obj -> + object + method add : Gdk.Tags.event_mask list -> unit + method connect : event_signals + method send : Gdk.Tags.event_type Gdk.event -> bool + method set_extensions : Gdk.Tags.extension_events -> unit + end + +class style : Gtk.style -> + object ('a) + val style : Gtk.style + method as_style : Gtk.style + method bg : Tags.state_type -> Gdk.Color.t + method colormap : Gdk.colormap + method copy : 'a + method font : Gdk.font + method set_background : Gdk.window -> Tags.state_type -> unit + method set_bg : (Tags.state_type * GDraw.color) list -> unit + method set_font : Gdk.font -> unit + end + +class selection_data : + GtkData.Selection.t -> + object + val sel : GtkData.Selection.t + method data : string (* May raise Null_pointer *) + method format : int + method selection : Gdk.atom + method seltype : Gdk.atom + method target : Gdk.atom + method set : typ:Gdk.atom -> format:int -> ?data:string -> unit + end + +class drag_ops : [>`widget] obj -> + object + method connect : drag_signals + method dest_set : + ?flags:Tags.dest_defaults list -> + ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit + method dest_unset : unit -> unit + method get_data : ?time:int -> context:drag_context -> Gdk.atom ->unit + method highlight : unit -> unit + method source_set : + ?modi:Gdk.Tags.modifier list -> + ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit + method source_set_icon : ?colormap:Gdk.colormap -> GDraw.pixmap -> unit + method source_unset : unit -> unit + method unhighlight : unit -> unit + end + +and misc_ops : + [>`widget] obj -> + object + inherit gtkobj_misc + val obj : Gtk.widget obj + method activate : unit -> bool + method add_accelerator : + sgn:(Gtk.widget, unit -> unit) GtkSignal.t -> + group:accel_group -> ?modi:Gdk.Tags.modifier list -> + ?flags:Tags.accel_flag list -> Gdk.keysym -> unit + method allocation : rectangle + method colormap : Gdk.colormap + method connect : misc_signals + method draw : Gdk.Rectangle.t option -> unit + method grab_default : unit -> unit + method grab_focus : unit -> unit + method has_focus : bool + method hide : unit -> unit + method hide_all : unit -> unit + method intersect : Gdk.Rectangle.t -> Gdk.Rectangle.t option + method is_ancestor : widget -> bool + method lock_accelerators : unit -> unit + method map : unit -> unit + method name : string + method parent : widget option + method pointer : int * int + method popup : x:int -> y:int -> unit + method realize : unit -> unit + method remove_accelerator : + group:accel_group -> ?modi:Gdk.Tags.modifier list -> Gdk.keysym -> unit + method reparent : widget -> unit + method set_app_paintable : bool -> unit + method set_can_default : bool -> unit + method set_can_focus : bool -> unit + method set_name : string -> unit + method set_sensitive : bool -> unit + method set_state : Tags.state_type -> unit + method set_style : style -> unit + method set_geometry : + ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit + method show : unit -> unit + method show_all : unit -> unit + method style : style + method toplevel : widget option + method unmap : unit -> unit + method unparent : unit -> unit + method unrealize : unit -> unit + method visible : bool + method visual : Gdk.visual + method visual_depth : int + method window : Gdk.window + end + +and widget : + 'a obj -> + object + inherit gtkobj + constraint 'a = [>`widget] + val obj : 'a obj + method as_widget : Gtk.widget obj + method coerce : widget + method drag : drag_ops + method misc : misc_ops + end + +and misc_signals : + ?after:bool -> Gtk.widget obj -> + object ('b) + inherit gtkobj_signals + val obj : Gtk.widget obj + method after : 'b + method draw : callback:(Gtk.rectangle -> unit) -> GtkSignal.id + method hide : callback:(unit -> unit) -> GtkSignal.id + method map : callback:(unit -> unit) -> GtkSignal.id + method parent_set : callback:(widget option -> unit) -> GtkSignal.id + method realize : callback:(unit -> unit) -> GtkSignal.id + method show : callback:(unit -> unit) -> GtkSignal.id + method state_changed : + callback:(Gtk.Tags.state_type -> unit) -> GtkSignal.id + method style_set : callback:(unit -> unit) -> GtkSignal.id + method unmap : callback:(unit -> unit) -> GtkSignal.id + end + +and drag_context : + Gdk.drag_context -> + object + val context : Gdk.drag_context + method context : Gdk.drag_context + method finish : success:bool -> del:bool -> time:int -> unit + method source_widget : widget + method set_icon_pixmap : + ?colormap:Gdk.colormap -> GDraw.pixmap -> hot_x:int -> hot_y:int -> unit + method set_icon_widget : widget -> hot_x:int -> hot_y:int -> unit + method status : ?time:int -> Gdk.Tags.drag_action list -> unit + method suggested_action : Gdk.Tags.drag_action + method targets : Gdk.atom list + end + +and drag_signals : + ?after:bool -> Gtk.widget obj -> + object ('a) + method after : 'a + method beginning : + callback:(drag_context -> unit) -> GtkSignal.id + method data_delete : + callback:(drag_context -> unit) -> GtkSignal.id + method data_get : + callback:(drag_context -> selection_data -> info:int -> time:int -> unit) + -> GtkSignal.id + method data_received : + callback:(drag_context -> x:int -> y:int -> + selection_data -> info:int -> time:int -> unit) -> GtkSignal.id + method drop : + callback:(drag_context -> x:int -> y:int -> time:int -> bool) -> + GtkSignal.id + method ending : + callback:(drag_context -> unit) -> GtkSignal.id + method leave : + callback:(drag_context -> time:int -> unit) -> GtkSignal.id + method motion : + callback:(drag_context -> x:int -> y:int -> time:int -> bool) -> + GtkSignal.id + end + +class widget_signals : ?after:bool -> 'a obj -> + object + inherit gtkobj_signals + constraint 'a = [>`widget] + val obj : 'a obj + end + +class widget_full : 'a obj -> + object + inherit widget + constraint 'a = [>`widget] + val obj : 'a obj + method connect : widget_signals + end + +val as_widget : widget -> Gtk.widget obj + +val pack_return : + (#widget as 'a) -> + packing:(widget -> unit) option -> show:bool option -> 'a + (* To use in initializers to provide a ?packing: option *) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml new file mode 100644 index 000000000..3641349a9 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml @@ -0,0 +1,217 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkPack +open GObj +open GContainer + +class box_skel obj = object + inherit container obj + method pack ?from:f ?expand ?fill ?padding w = + Box.pack obj (as_widget w) ?from:f ?expand ?fill ?padding + method set_homogeneous = Box.set_homogeneous obj + method set_spacing = Box.set_spacing obj + method set_child_packing ?from:f ?expand ?fill ?padding w = + Box.set_child_packing obj (as_widget w) ?from:f ?expand ?fill ?padding + method reorder_child w = Box.reorder_child obj (as_widget w) +end + +class box obj = object + inherit box_skel obj + method connect = new container_signals obj +end + +let box dir ?homogeneous ?spacing ?border_width ?width ?height + ?packing ?show () = + let w = Box.create dir ?homogeneous ?spacing () in + Container.set w ?border_width ?width ?height; + pack_return (new box w) ~packing ~show + +let vbox = box `VERTICAL +let hbox = box `HORIZONTAL + +class button_box obj = object + inherit box_skel (obj : Gtk.button_box obj) + method connect = new container_signals obj + method set_layout = BBox.set_layout obj + method set_spacing = BBox.set_spacing obj + method set_child_size = BBox.set_child_size obj + method set_child_ipadding = BBox.set_child_ipadding obj +end + +let button_box dir ?spacing ?child_width ?child_height ?child_ipadx + ?child_ipady ?layout ?border_width ?width ?height ?packing ?show ()= + let w = BBox.create dir in + BBox.set w ?spacing ?child_width ?child_height ?child_ipadx + ?child_ipady ?layout; + Container.set w ?border_width ?width ?height; + pack_return (new button_box w) ~packing ~show + +class table obj = object + inherit container_full (obj : Gtk.table obj) + method attach ~left ~top ?right ?bottom ?expand ?fill ?shrink + ?xpadding ?ypadding w = + Table.attach obj (as_widget w) ~left ~top ?right ?bottom ?expand + ?fill ?shrink ?xpadding ?ypadding + method set_row_spacing = Table.set_row_spacing obj + method set_col_spacing = Table.set_col_spacing obj + method set_row_spacings = Table.set_row_spacings obj + method set_col_spacings = Table.set_col_spacings obj + method set_homogeneous = Table.set_homogeneous obj +end + +let table ~rows ~columns ?homogeneous ?row_spacings ?col_spacings + ?border_width ?width ?height ?packing ?show () = + let w = Table.create ~rows ~columns ?homogeneous () in + Table.set w ?row_spacings ?col_spacings; + Container.set w ?border_width ?width ?height; + pack_return (new table w) ~packing ~show + +class fixed obj = object + inherit container_full (obj : Gtk.fixed obj) + method event = new GObj.event_ops obj + method put w = Fixed.put obj (as_widget w) + method move w = Fixed.move obj (as_widget w) +end + +let fixed ?border_width ?width ?height ?packing ?show () = + let w = Fixed.create () in + Container.set w ?border_width ?width ?height; + pack_return (new fixed w) ~packing ~show + +class layout obj = object + inherit container_full (obj : Gtk.layout obj) + method event = new GObj.event_ops obj + method put w = Layout.put obj (as_widget w) + method move w = Layout.move obj (as_widget w) + method set_hadjustment adj = + Layout.set_hadjustment obj (GData.as_adjustment adj) + method set_vadjustment adj = + Layout.set_vadjustment obj (GData.as_adjustment adj) + method set_width width = Layout.set_size obj ~width + method set_height height = Layout.set_size obj ~height + method hadjustment = new GData.adjustment (Layout.get_hadjustment obj) + method vadjustment = new GData.adjustment (Layout.get_vadjustment obj) + method freeze () = Layout.freeze obj + method thaw () = Layout.thaw obj + method width = Layout.get_width obj + method height = Layout.get_height obj +end + +let layout ?hadjustment ?vadjustment ?layout_width ?layout_height + ?border_width ?width ?height ?packing ?show () = + let w = Layout.create + (Gpointer.optboxed (may_map ~f:GData.as_adjustment hadjustment)) + (Gpointer.optboxed (may_map ~f:GData.as_adjustment vadjustment)) in + if layout_width <> None || layout_height <> None then + Layout.set_size w ?width:layout_width ?height:layout_height; + Container.set w ?border_width ?width ?height; + pack_return (new layout w) ~packing ~show + + +class packer obj = object + inherit container_full (obj : Gtk.packer obj) + method pack ?side ?anchor ?expand ?fill + ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w = + let options = Packer.build_options ?expand ?fill () in + if border_width == None && pad_x == None && pad_y == None && + i_pad_x == None && i_pad_y == None + then Packer.add_defaults obj (as_widget w) ?side ?anchor ~options + else Packer.add obj (as_widget w) ?side ?anchor ~options + ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y + method set_child_packing ?side ?anchor ?expand ?fill + ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w = + Packer.set_child_packing obj (as_widget w) ?side ?anchor + ~options:(Packer.build_options ?expand ?fill ()) + ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y + method reorder_child w = Packer.reorder_child obj (as_widget w) + method set_spacing = Packer.set_spacing obj + method set_defaults = Packer.set_defaults obj +end + +let packer ?spacing ?border_width ?width ?height ?packing ?show () = + let w = Packer.create () in + may spacing ~f:(Packer.set_spacing w); + Container.set w ?border_width ?width ?height; + pack_return (new packer w) ~packing ~show + +class paned obj = object + inherit container_full (obj : Gtk.paned obj) + method event = new GObj.event_ops obj + method add w = + if List.length (Container.children obj) = 2 then + raise(Error "Gpack.paned#add: already full"); + Container.add obj (as_widget w) + method add1 w = + try ignore(Paned.child1 obj); raise(Error "GPack.paned#add1: already full") + with _ -> Paned.add1 obj (as_widget w) + method add2 w = + try ignore(Paned.child2 obj); raise(Error "GPack.paned#add2: already full") + with _ -> Paned.add2 obj (as_widget w) + method set_handle_size = Paned.set_handle_size obj + method set_gutter_size = Paned.set_gutter_size obj + method child1 = new widget (Paned.child1 obj) + method child2 = new widget (Paned.child2 obj) + method handle_size = Paned.handle_size obj + method gutter_size = Paned.gutter_size obj +end + +let paned dir ?handle_size ?gutter_size + ?border_width ?width ?height ?packing ?show () = + let w = Paned.create dir in + Paned.set w ?handle_size ?gutter_size; + Container.set w ?border_width ?width ?height; + pack_return (new paned w) ~packing ~show + +class notebook_signals obj = object + inherit GContainer.container_signals obj + method switch_page = + GtkSignal.connect obj ~sgn:Notebook.Signals.switch_page ~after +end + +class notebook obj = object (self) + inherit GContainer.container obj + method event = new GObj.event_ops obj + method connect = new notebook_signals obj + method insert_page ?tab_label ?menu_label ~pos child = + Notebook.insert_page obj (as_widget child) ~pos + ~tab_label:(Gpointer.may_box tab_label ~f:as_widget) + ~menu_label:(Gpointer.may_box menu_label ~f:as_widget) + method append_page = self#insert_page ~pos:(-1) + method prepend_page = self#insert_page ~pos:0 + method remove_page = Notebook.remove_page obj + method current_page = Notebook.get_current_page obj + method goto_page = Notebook.set_page obj + method previous_page () = Notebook.prev_page obj + method next_page () = Notebook.next_page obj + method set_tab_pos = Notebook.set_tab_pos obj + method set_show_tabs = Notebook.set_show_tabs obj + method set_homogeneous_tabs = Notebook.set_homogeneous_tabs obj + method set_show_border = Notebook.set_show_border obj + method set_scrollable = Notebook.set_scrollable obj + method set_tab_border = Notebook.set_tab_border obj + method set_popup = Notebook.set_popup obj + method page_num w = Notebook.page_num obj (as_widget w) + method get_nth_page n = new widget (Notebook.get_nth_page obj n) + method get_tab_label w = + new widget (Notebook.get_tab_label obj (as_widget w)) + method get_menu_label w = + new widget (Notebook.get_tab_label obj (as_widget w)) + method set_page ?tab_label ?menu_label page = + let child = as_widget page in + may tab_label + ~f:(fun lbl -> Notebook.set_tab_label obj child (as_widget lbl)); + may menu_label + ~f:(fun lbl -> Notebook.set_menu_label obj child (as_widget lbl)) +end + +let notebook ?tab_pos ?tab_border ?show_tabs ?homogeneous_tabs + ?show_border ?scrollable ?popup + ?border_width ?width ?height ?packing ?show () = + let w = Notebook.create () in + Notebook.set w ?tab_pos ?tab_border ?show_tabs + ?homogeneous_tabs ?show_border ?scrollable ?popup; + Container.set w ?border_width ?width ?height; + pack_return (new notebook w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli new file mode 100644 index 000000000..994c8b87f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli @@ -0,0 +1,267 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class box_skel : + 'a obj -> + object + inherit container + constraint 'a = [>`box|`container|`widget] + val obj : 'a obj + method pack : + ?from:Tags.pack_type -> + ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit + method reorder_child : widget -> pos:int -> unit + method set_child_packing : + ?from:Tags.pack_type -> + ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit + method set_homogeneous : bool -> unit + method set_spacing : int -> unit + end +class box : + 'a obj -> + object + inherit box_skel + constraint 'a = [>`box|`container|`widget] + val obj : 'a obj + method connect : GContainer.container_signals + end + +val box : + Tags.orientation -> + ?homogeneous:bool -> + ?spacing:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box +val vbox : + ?homogeneous:bool -> + ?spacing:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box +val hbox : + ?homogeneous:bool -> + ?spacing:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box + +class button_box : + Gtk.button_box obj -> + object + inherit container_full + val obj : Gtk.button_box obj + method pack : + ?from:Tags.pack_type -> + ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit + method reorder_child : widget -> pos:int -> unit + method set_child_ipadding : ?x:int -> ?y:int -> unit -> unit + method set_child_packing : + ?from:Tags.pack_type -> + ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit + method set_child_size : ?width:int -> ?height:int -> unit -> unit + method set_homogeneous : bool -> unit + method set_layout : GtkPack.BBox.bbox_style -> unit + method set_spacing : int -> unit + end +val button_box : + Tags.orientation -> + ?spacing:int -> + ?child_width:int -> + ?child_height:int -> + ?child_ipadx:int -> + ?child_ipady:int -> + ?layout:GtkPack.BBox.bbox_style -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> button_box + +class table : + Gtk.table obj -> + object + inherit container_full + val obj : Gtk.table obj + method attach : + left:int -> + top:int -> + ?right:int -> + ?bottom:int -> + ?expand:Tags.expand_type -> + ?fill:Tags.expand_type -> + ?shrink:Tags.expand_type -> + ?xpadding:int -> ?ypadding:int -> widget -> unit + method set_col_spacing : int -> int -> unit + method set_col_spacings : int -> unit + method set_homogeneous : bool -> unit + method set_row_spacing : int -> int -> unit + method set_row_spacings : int -> unit + end +val table : + rows:int -> + columns:int -> + ?homogeneous:bool -> + ?row_spacings:int -> + ?col_spacings:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> table + +class fixed : + Gtk.fixed obj -> + object + inherit container_full + val obj : Gtk.fixed obj + method event : event_ops + method move : widget -> x:int -> y:int -> unit + method put : widget -> x:int -> y:int -> unit + end +val fixed : + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> fixed + +class layout : + Gtk.layout obj -> + object + inherit container_full + val obj : Gtk.layout obj + method event : event_ops + method freeze : unit -> unit + method hadjustment : GData.adjustment + method height : int + method move : widget -> x:int -> y:int -> unit + method put : widget -> x:int -> y:int -> unit + method set_hadjustment : GData.adjustment -> unit + method set_height : int -> unit + method set_vadjustment : GData.adjustment -> unit + method set_width : int -> unit + method thaw : unit -> unit + method vadjustment : GData.adjustment + method width : int + end +val layout : + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?layout_width:int -> + ?layout_height:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> layout + +class notebook_signals : 'a obj -> + object + inherit container_signals + constraint 'a = [>`notebook|`container|`widget] + val obj : 'a obj + method switch_page : callback:(int -> unit) -> GtkSignal.id + end + +class notebook : ([> `widget | `container | `notebook] as 'a) obj -> + object + inherit container + val obj : 'a obj + method event : event_ops + method append_page : + ?tab_label:widget -> ?menu_label:widget -> widget -> unit + method connect : notebook_signals + method current_page : int + method get_menu_label : widget -> widget + method get_nth_page : int -> widget + method get_tab_label : widget -> widget + method goto_page : int -> unit + method insert_page : + ?tab_label:widget -> ?menu_label:widget -> pos:int -> widget -> unit + method next_page : unit -> unit + method page_num : widget -> int + method prepend_page : + ?tab_label:widget -> ?menu_label:widget -> widget -> unit + method previous_page : unit -> unit + method remove_page : int -> unit + method set_homogeneous_tabs : bool -> unit + method set_page : + ?tab_label:widget -> ?menu_label:widget -> widget -> unit + method set_popup : bool -> unit + method set_scrollable : bool -> unit + method set_show_border : bool -> unit + method set_show_tabs : bool -> unit + method set_tab_border : int -> unit + method set_tab_pos : Tags.position -> unit + end +val notebook : + ?tab_pos:Tags.position -> + ?tab_border:int -> + ?show_tabs:bool -> + ?homogeneous_tabs:bool -> + ?show_border:bool -> + ?scrollable:bool -> + ?popup:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> notebook + +class packer : + Gtk.packer obj -> + object + inherit container_full + val obj : Gtk.packer obj + method pack : + ?side:Tags.side_type -> + ?anchor:Tags.anchor_type -> + ?expand:bool -> + ?fill:Tags.expand_type -> + ?border_width:int -> + ?pad_x:int -> + ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit + method reorder_child : widget -> pos:int -> unit + method set_child_packing : + ?side:Tags.side_type -> + ?anchor:Tags.anchor_type -> + ?expand:bool -> + ?fill:Tags.expand_type -> + ?border_width:int -> + ?pad_x:int -> + ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit + method set_defaults : + ?border_width:int -> + ?pad_x:int -> + ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit + method set_spacing : int -> unit + end +val packer : + ?spacing:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> packer + +class paned : + Gtk.paned obj -> + object + inherit container_full + val obj : Gtk.paned obj + method add1 : widget -> unit + method add2 : widget -> unit + method event : event_ops + method child1 : widget + method child2 : widget + method gutter_size : int + method handle_size : int + method set_gutter_size : int -> unit + method set_handle_size : int -> unit + end +val paned : + Tags.orientation -> + ?handle_size:int -> + ?gutter_size:int -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> paned diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml new file mode 100644 index 000000000..7df53ced1 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml @@ -0,0 +1,83 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkRange +open GObj + +class progress obj = object + inherit widget_full obj + method set_adjustment adj = + Progress.set_adjustment obj (GData.as_adjustment adj) + method set_show_text = Progress.set_show_text obj + method set_format_string = Progress.set_format_string obj + method set_text_alignment = Progress.set_text_alignment obj + method set_activity_mode = Progress.set_activity_mode obj + method set_value = Progress.set_value obj + method set_percentage = Progress.set_percentage obj + method configure = Progress.configure obj + method value = Progress.get_value obj + method percentage = Progress.get_percentage obj + method current_text = Progress.get_current_text obj + method adjustment = new GData.adjustment (Progress.get_adjustment obj) +end + +class progress_bar obj = object + inherit progress (obj : Gtk.progress_bar obj) + method event = new GObj.event_ops obj + method set_bar_style = ProgressBar.set_bar_style obj + method set_discrete_blocks = ProgressBar.set_discrete_blocks obj + method set_activity_step = ProgressBar.set_activity_step obj + method set_activity_blocks = ProgressBar.set_activity_blocks obj + method set_orientation = ProgressBar.set_orientation obj +end + +let progress_bar ?adjustment ?bar_style ?discrete_blocks + ?activity_step ?activity_blocks ?value ?percentage ?activity_mode + ?show_text ?format_string ?text_xalign ?text_yalign + ?packing ?show () = + let w = + match adjustment with None -> ProgressBar.create () + | Some adj -> + ProgressBar.create_with_adjustment (GData.as_adjustment adj) + in + ProgressBar.set w ?bar_style ?discrete_blocks + ?activity_step ?activity_blocks; + Progress.set w ?value ?percentage ?activity_mode + ?show_text ?format_string ?text_xalign ?text_yalign; + pack_return (new progress_bar w) ~packing ~show + +class range obj = object + inherit widget_full obj + method adjustment = new GData.adjustment (Range.get_adjustment obj) + method set_adjustment adj = + Range.set_adjustment obj (GData.as_adjustment adj) + method set_update_policy = Range.set_update_policy obj +end + +class scale obj = object + inherit range (obj : Gtk.scale obj) + method set_digits = Scale.set_digits obj + method set_draw_value = Scale.set_draw_value obj + method set_value_pos = Scale.set_value_pos obj +end + +let scale dir ?adjustment ?digits ?draw_value ?value_pos + ?packing ?show () = + let w = + Scale.create dir ?adjustment:(may_map ~f:GData.as_adjustment adjustment) + in + let () = Scale.set w ?digits ?draw_value ?value_pos in + pack_return (new scale w) ~packing ~show + +class scrollbar obj = object + inherit range (obj : Gtk.scrollbar obj) + method event = new GObj.event_ops obj +end + +let scrollbar dir ?adjustment ?update_policy ?packing ?show () = + let w = Scrollbar.create dir + ?adjustment:(may_map ~f:GData.as_adjustment adjustment) in + let () = may update_policy ~f:(Range.set_update_policy w) in + pack_return (new scrollbar w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli new file mode 100644 index 000000000..ac9b38c27 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli @@ -0,0 +1,87 @@ +(* $Id$ *) + +open Gtk +open GObj + +class progress : 'a obj -> + object + inherit widget_full + constraint 'a = [>`progress|`widget] + val obj : 'a obj + method adjustment : GData.adjustment + method configure : current:float -> min:float -> max:float -> unit + method current_text : string + method percentage : float + method set_activity_mode : bool -> unit + method set_adjustment : GData.adjustment -> unit + method set_format_string : string -> unit + method set_percentage : float -> unit + method set_show_text : bool -> unit + method set_text_alignment : ?x:float -> ?y:float -> unit -> unit + method set_value : float -> unit + method value : float + end + +class progress_bar : Gtk.progress_bar obj -> + object + inherit progress + val obj : Gtk.progress_bar obj + method event : event_ops + method set_activity_blocks : int -> unit + method set_activity_step : int -> unit + method set_bar_style : [`CONTINUOUS|`DISCRETE] -> unit + method set_discrete_blocks : int -> unit + method set_orientation : Tags.progress_bar_orientation -> unit + end +val progress_bar : + ?adjustment:GData.adjustment -> + ?bar_style:[`CONTINUOUS|`DISCRETE] -> + ?discrete_blocks:int -> + ?activity_step:int -> + ?activity_blocks:int -> + ?value:float -> + ?percentage:float -> + ?activity_mode:bool -> + ?show_text:bool -> + ?format_string:string -> + ?text_xalign:float -> + ?text_yalign:float -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> progress_bar + +class range : 'a obj -> + object + inherit widget_full + constraint 'a = [>`range|`widget] + val obj : 'a obj + method adjustment : GData.adjustment + method set_adjustment : GData.adjustment -> unit + method set_update_policy : Tags.update_type -> unit + end + +class scale : Gtk.scale obj -> + object + inherit range + val obj : Gtk.scale obj + method set_digits : int -> unit + method set_draw_value : bool -> unit + method set_value_pos : Tags.position -> unit + end +val scale : + Tags.orientation -> + ?adjustment:GData.adjustment -> + ?digits:int -> + ?draw_value:bool -> + ?value_pos:Tags.position -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> scale + +class scrollbar : Gtk.scrollbar obj -> + object + inherit range + val obj : Gtk.scrollbar obj + method event : event_ops + end +val scrollbar : + Tags.orientation -> + ?adjustment:GData.adjustment -> + ?update_policy:Tags.update_type -> + ?packing:(widget -> unit) -> ?show:bool -> unit -> scrollbar diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml new file mode 100644 index 000000000..80dab7be6 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml @@ -0,0 +1,76 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkTree +open GObj +open GContainer + +class tree_item_signals obj = object + inherit item_signals obj + method expand = GtkSignal.connect obj ~sgn:TreeItem.Signals.expand ~after + method collapse = GtkSignal.connect obj ~sgn:TreeItem.Signals.collapse ~after +end + +class tree_item obj = object + inherit container obj + method event = new GObj.event_ops obj + method as_item : Gtk.tree_item obj = obj + method connect = new tree_item_signals obj + method set_subtree (w : tree) = TreeItem.set_subtree obj w#as_tree + method remove_subtree () = TreeItem.remove_subtree obj + method expand () = TreeItem.expand obj + method collapse () = TreeItem.collapse obj + method subtree = + try Some(new tree (TreeItem.subtree obj)) with Gpointer.Null -> None +end + +and tree_signals obj = object + inherit container_signals obj + method selection_changed = + GtkSignal.connect obj ~sgn:Tree.Signals.selection_changed ~after + method select_child ~callback = + GtkSignal.connect obj ~sgn:Tree.Signals.select_child ~after + ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) + method unselect_child ~callback = + GtkSignal.connect obj ~sgn:Tree.Signals.unselect_child ~after + ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) +end + +and tree obj = object (self) + inherit [tree_item] item_container obj + method event = new GObj.event_ops obj + method as_tree = Tree.coerce obj + method insert w ~pos = Tree.insert obj w#as_item ~pos + method connect = new tree_signals obj + method clear_items = Tree.clear_items obj + method select_item = Tree.select_item obj + method unselect_item = Tree.unselect_item obj + method child_position (w : tree_item) = Tree.child_position obj w#as_item + method remove_items items = + Tree.remove_items obj + (List.map ~f:(fun (t : tree_item) -> t#as_item) items) + method set_selection_mode = Tree.set_selection_mode obj + method set_view_mode = Tree.set_view_mode obj + method set_view_lines = Tree.set_view_lines obj + method selection = + List.map ~f:(fun w -> self#wrap (Widget.coerce w)) (Tree.selection obj) + method private wrap w = + new tree_item (TreeItem.cast w) +end + +let tree_item ?label ?border_width ?width ?height ?packing ?show () = + let w = TreeItem.create ?label () in + Container.set w ?border_width ?width ?height; + let self = new tree_item w in + may packing ~f:(fun f -> (f self : unit)); + if show <> Some false then self#misc#show (); + self + +let tree ?selection_mode ?view_mode ?view_lines + ?border_width ?width ?height ?packing ?show () = + let w = Tree.create () in + Tree.set w ?selection_mode ?view_mode ?view_lines; + Container.set w ?border_width ?width ?height; + pack_return (new tree w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli new file mode 100644 index 000000000..d48e09b2a --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli @@ -0,0 +1,72 @@ +(* $Id$ *) + +open Gtk +open GObj +open GContainer + +class tree_item_signals : 'a obj -> + object + inherit item_signals + constraint 'a = [>`treeitem|`container|`item|`widget] + val obj : 'a obj + method collapse : callback:(unit -> unit) -> GtkSignal.id + method expand : callback:(unit -> unit) -> GtkSignal.id + end + +class tree_item : Gtk.tree_item obj -> + object + inherit GContainer.container + val obj : Gtk.tree_item obj + method event : event_ops + method as_item : Gtk.tree_item obj + method collapse : unit -> unit + method connect : tree_item_signals + method expand : unit -> unit + method remove_subtree : unit -> unit + method set_subtree : tree -> unit + method subtree : tree option + end + +and tree_signals : Gtk.tree obj -> + object + inherit container_signals + val obj : Gtk.tree obj + method select_child : callback:(tree_item -> unit) -> GtkSignal.id + method selection_changed : callback:(unit -> unit) -> GtkSignal.id + method unselect_child : callback:(tree_item -> unit) -> GtkSignal.id + end + +and tree : Gtk.tree obj -> + object + inherit [tree_item] item_container + val obj : Gtk.tree obj + method event : event_ops + method as_tree : Gtk.tree obj + method child_position : tree_item -> int + method clear_items : start:int -> stop:int -> unit + method connect : tree_signals + method insert : tree_item -> pos:int -> unit + method remove_items : tree_item list -> unit + method select_item : pos:int -> unit + method selection : tree_item list + method set_selection_mode : Tags.selection_mode -> unit + method set_view_lines : bool -> unit + method set_view_mode : [`LINE|`ITEM] -> unit + method unselect_item : pos:int -> unit + method private wrap : Gtk.widget obj -> tree_item + end + +val tree_item : + ?label:string -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(tree_item -> unit) -> ?show:bool -> unit -> tree_item + +val tree : + ?selection_mode:Tags.selection_mode -> + ?view_mode:[`LINE|`ITEM] -> + ?view_lines:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> tree diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml new file mode 100644 index 000000000..260c2acee --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml @@ -0,0 +1,80 @@ +(* $Id$ *) + +open GObj + +class ['a] memo () = object + constraint 'a = #widget + val tbl = Hashtbl.create 7 + method add (obj : 'a) = + Hashtbl.add tbl ~key:obj#get_id ~data:obj + method find (obj : widget) = Hashtbl.find tbl obj#get_id + method remove (obj : widget) = Hashtbl.remove tbl obj#get_id +end + +let signal_id = ref 0 + +let next_callback_id () : GtkSignal.id = + decr signal_id; Obj.magic (!signal_id : int) + +class ['a] signal () = object (self) + val mutable callbacks : (GtkSignal.id * ('a -> unit)) list = [] + method callbacks = callbacks + method connect ~after ~callback = + let id = next_callback_id () in + callbacks <- + if after then callbacks @ [id,callback] else (id,callback)::callbacks; + id + method call arg = + List.exists callbacks ~f: + begin fun (_,f) -> + let old = GtkSignal.push_callback () in + try f arg; GtkSignal.pop_callback old + with exn -> GtkSignal.pop_callback old; raise exn + end; + () + method disconnect key = + List.mem_assoc key callbacks && + (callbacks <- List.remove_assoc key callbacks; true) +end + +class virtual ml_signals disconnectors = + object (self) + val after = false + method after = {< after = true >} + val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors + method disconnect key = + ignore (List.exists disconnectors ~f:(fun f -> f key)) + end + +class virtual add_ml_signals obj disconnectors = + object (self) + val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors + method disconnect key = + if List.exists disconnectors ~f:(fun f -> f key) then () + else GtkSignal.disconnect obj key + end + +class ['a] variable_signals ~(set : 'a signal) ~(changed : 'a signal) = + object + inherit ml_signals [changed#disconnect; set#disconnect] + method changed = changed#connect ~after + method set = set#connect ~after + end + +class ['a] variable x = + object (self) + val changed = new signal () + val set = new signal () + method connect = new variable_signals ~set ~changed + val mutable x : 'a = x + method get = x + method set = set#call + method private equal : 'a -> 'a -> bool = (=) + method private real_set y = + let x0 = x in x <- y; + if changed#callbacks <> [] && not (self#equal x x0) + then changed#call y + initializer + ignore (set#connect ~after:false ~callback:self#real_set) + end + diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli new file mode 100644 index 000000000..cd88d8697 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli @@ -0,0 +1,109 @@ +(* $Id$ *) + +open GObj + +(* The memo class provides an easy way to remember the real class of + a widget. + Insert all widgets of class in one single t memo, and you can then + recover their original ML object with #find. +*) + +class ['a] memo : unit -> + object + constraint 'a = #widget + val tbl : (int, 'a) Hashtbl.t + method add : 'a -> unit + method find : widget -> 'a + method remove : widget -> unit + end + +(* The ML signal mechanism allows one to add GTK-like signals to + arbitrary objects. +*) + +val next_callback_id : unit -> GtkSignal.id + +class ['a] signal : + unit -> + object + val mutable callbacks : (GtkSignal.id * ('a -> unit)) list + method callbacks : (GtkSignal.id * ('a -> unit)) list + method call : 'a -> unit + method connect : after:bool -> callback:('a -> unit) -> GtkSignal.id + method disconnect : GtkSignal.id -> bool + end +(* As with GTK signals, you can use [GtkSignal.stop_emit] inside a + callback to prevent other callbacks from being called. *) + +class virtual ml_signals : (GtkSignal.id -> bool) list -> + object ('a) + val after : bool + method after : 'a + method disconnect : GtkSignal.id -> unit + val mutable disconnectors : (GtkSignal.id -> bool) list + end +class virtual add_ml_signals : + 'a Gtk.obj -> (GtkSignal.id -> bool) list -> + object + method disconnect : GtkSignal.id -> unit + val mutable disconnectors : (GtkSignal.id -> bool) list + end + +(* To add ML signals to a LablGTK object: + + class mywidget_signals obj ~mysignal1 ~mysignal2 = object + inherit somewidget_signals obj + inherit add_ml_signals obj [mysignal1#disconnect; mysignal2#disconnect] + method mysignal1 = mysignal1#connect ~after + method mysignal2 = mysignal2#connect ~after + end + + class mywidget obj = object (self) + inherit somewidget obj + val mysignal1 = new signal obj + val mysignal2 = new signal obj + method connect = new mywidget_signals obj ~mysignal1 ~mysignal2 + method call1 = mysignal1#call + method call2 = mysignal2#call + end + + You can also add ML signals to an arbitrary object; just inherit + from [ml_signals] in place of [widget_signals]+[add_ml_signals]. + + class mysignals ~mysignal1 ~mysignal2 = object + inherit ml_signals [mysignal1#disconnect; mysignal2#disconnect] + method mysignal1 = mysignal1#connect ~after + method mysignal2 = mysignal2#connect ~after + end +*) + +(* The variable class provides an easy way to propagate state modifications. + A new variable is created by [new variable init]. The [#set] method just + calls the [set] signal, which by default only calls [real_set]. + [real_set] sets the variable and calls [changed] when needed. + Deep equality is used to compare values, but check is only done if + there are callbacks for [changed]. +*) + +class ['a] variable_signals : + set:'a signal -> changed:'a signal -> + object ('b) + val after : bool + method after : 'b + method set : callback:('a -> unit) -> GtkSignal.id + method changed : callback:('a -> unit) -> GtkSignal.id + method disconnect : GtkSignal.id -> unit + val mutable disconnectors : (GtkSignal.id -> bool) list + end + +class ['a] variable : 'a -> + object + val set : 'a signal + val changed : 'a signal + val mutable x : 'a + method connect : 'a variable_signals + method get : 'a + method set : 'a -> unit + method private equal : 'a -> 'a -> bool + method private real_set : 'a -> unit + end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml new file mode 100644 index 000000000..9ee313647 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml @@ -0,0 +1,151 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase +open GtkWindow +open GtkMisc +open GObj +open GContainer + +class ['a] window_skel obj = object + constraint 'a = _ #window_skel + inherit container obj + method event = new GObj.event_ops obj + method as_window = Window.coerce obj + method activate_focus () = Window.activate_focus obj + method activate_default () = Window.activate_default obj + method add_accel_group = Window.add_accel_group obj + method set_modal = Window.set_modal obj + method set_default_size = Window.set_default_size obj + method set_position = Window.set_position obj + method set_resize_mode = Container.set_resize_mode obj + method set_transient_for (w : 'a) = + Window.set_transient_for obj w#as_window + method set_title = Window.set_title obj + method set_wm_name name = Window.set_wmclass obj ~name + method set_wm_class cls = Window.set_wmclass obj ~clas:cls + method set_allow_shrink allow_shrink = Window.set_policy obj ~allow_shrink + method set_allow_grow allow_grow = Window.set_policy obj ~allow_grow + method set_auto_shrink auto_shrink = Window.set_policy obj ~auto_shrink + method show () = Widget.show obj +end + +class window obj = object + inherit [window] window_skel (Window.coerce obj) + method connect = new container_signals obj +end + +let window ?kind:(t=`TOPLEVEL) ?title ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y + ?border_width ?width ?height ?(show=false) () = + let w = Window.create t in + Window.set w ?title ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y; + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new window w + +class dialog obj = object + inherit [window] window_skel (Dialog.coerce obj) + method connect = new container_signals obj + method action_area = new GPack.box (Dialog.action_area obj) + method vbox = new GPack.box (Dialog.vbox obj) +end + +let dialog ?title ?wm_name ?wm_class ?position ?allow_shrink + ?allow_grow ?auto_shrink ?modal ?x ?y ?border_width ?width ?height + ?(show=false) () = + let w = Dialog.create () in + Window.set w ?title ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y; + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new dialog w + +class color_selection_dialog obj = object + inherit [window] window_skel (obj : Gtk.color_selection_dialog obj) + method connect = new container_signals obj + method ok_button = + new GButton.button (ColorSelection.ok_button obj) + method cancel_button = + new GButton.button (ColorSelection.cancel_button obj) + method help_button = + new GButton.button (ColorSelection.help_button obj) + method colorsel = + new GMisc.color_selection (ColorSelection.colorsel obj) +end + +let color_selection_dialog ?(title="Pick a color") + ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y + ?border_width ?width ?height ?(show=false) () = + let w = ColorSelection.create_dialog title in + Window.set w ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y; + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new color_selection_dialog w + +class file_selection obj = object + inherit [window] window_skel (obj : Gtk.file_selection obj) + method connect = new container_signals obj + method set_filename = FileSelection.set_filename obj + method get_filename = FileSelection.get_filename obj + method set_fileop_buttons = FileSelection.set_fileop_buttons obj + method ok_button = new GButton.button (FileSelection.get_ok_button obj) + method cancel_button = + new GButton.button (FileSelection.get_cancel_button obj) + method help_button = new GButton.button (FileSelection.get_help_button obj) +end + +let file_selection ?(title="Choose a file") ?filename + ?(fileop_buttons=false) + ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y + ?border_width ?width ?height ?(show=false) () = + let w = FileSelection.create title in + FileSelection.set w ?filename ~fileop_buttons; + Window.set w ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y; + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new file_selection w + +class font_selection_dialog obj = object + inherit [window] window_skel (obj : Gtk.font_selection_dialog obj) + method connect = new container_signals obj +(* + method font = FontSelectionDialog.get_font obj + method font_name = FontSelectionDialog.get_font_name obj + method set_font_name = FontSelectionDialog.set_font_name obj + method preview_text = FontSelectionDialog.get_preview_text obj + method set_preview_text = FontSelectionDialog.set_preview_text obj + method set_filter = FontSelectionDialog.set_filter obj +*) + method selection = + new GMisc.font_selection (FontSelectionDialog.font_selection obj) + method ok_button = new GButton.button (FontSelectionDialog.ok_button obj) + method apply_button = + new GButton.button (FontSelectionDialog.apply_button obj) + method cancel_button = + new GButton.button (FontSelectionDialog.cancel_button obj) +end + +let font_selection_dialog ?title ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y + ?border_width ?width ?height ?(show=false) () = + let w = FontSelectionDialog.create ?title () in + Window.set w ?wm_name ?wm_class ?position + ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y; + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new font_selection_dialog w + +class plug (obj : Gtk.plug obj) = window obj + +let plug ~window:xid ?border_width ?width ?height ?(show=false) () = + let w = Plug.create xid in + Container.set w ?border_width ?width ?height; + if show then Widget.show w; + new plug w diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli new file mode 100644 index 000000000..4c89a76b6 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli @@ -0,0 +1,156 @@ +(* $Id$ *) + +open Gtk +open GObj + +class ['a] window_skel : 'b obj -> + object + inherit GContainer.container + constraint 'a = 'a #window_skel + constraint 'b = [>`widget|`container|`window] + val obj : 'b obj + method activate_default : unit -> unit + method activate_focus : unit -> unit + method add_accel_group : accel_group -> unit + method event : event_ops + method as_window : Gtk.window obj + method set_allow_grow : bool -> unit + method set_allow_shrink : bool -> unit + method set_auto_shrink : bool -> unit + method set_default_size : width:int -> height:int -> unit + method set_modal : bool -> unit + method set_position : Tags.window_position -> unit + method set_resize_mode : Tags.resize_mode -> unit + method set_title : string -> unit + method set_transient_for : 'a -> unit + method set_wm_class : string -> unit + method set_wm_name : string -> unit + method show : unit -> unit + end + +class window : [>`window] obj -> + object + inherit [window] window_skel + val obj : Gtk.window obj + method connect : GContainer.container_signals + end +val window : + ?kind:Tags.window_type -> + ?title:string -> + ?wm_name:string -> + ?wm_class:string -> + ?position:Tags.window_position -> + ?allow_shrink:bool -> + ?allow_grow:bool -> + ?auto_shrink:bool -> + ?modal:bool -> + ?x:int -> + ?y:int -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> window + +class dialog : [>`dialog] obj -> + object + inherit [window] window_skel + val obj : Gtk.dialog obj + method action_area : GPack.box + method connect : GContainer.container_signals + method event : event_ops + method vbox : GPack.box + end +val dialog : + ?title:string -> + ?wm_name:string -> + ?wm_class:string -> + ?position:Tags.window_position -> + ?allow_shrink:bool -> + ?allow_grow:bool -> + ?auto_shrink:bool -> + ?modal:bool -> + ?x:int -> + ?y:int -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> dialog + +class color_selection_dialog : Gtk.color_selection_dialog obj -> + object + inherit [window] window_skel + val obj : Gtk.color_selection_dialog obj + method cancel_button : GButton.button + method colorsel : GMisc.color_selection + method connect : GContainer.container_signals + method help_button : GButton.button + method ok_button : GButton.button + end +val color_selection_dialog : + ?title:string -> + ?wm_name:string -> + ?wm_class:string -> + ?position:Tags.window_position -> + ?allow_shrink:bool -> + ?allow_grow:bool -> + ?auto_shrink:bool -> + ?modal:bool -> + ?x:int -> + ?y:int -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> color_selection_dialog + +class file_selection : Gtk.file_selection obj -> + object + inherit [window] window_skel + val obj : Gtk.file_selection obj + method cancel_button : GButton.button + method connect : GContainer.container_signals + method get_filename : string + method help_button : GButton.button + method ok_button : GButton.button + method set_filename : string -> unit + method set_fileop_buttons : bool -> unit + end +val file_selection : + ?title:string -> + ?filename:string -> + ?fileop_buttons:bool -> + ?wm_name:string -> + ?wm_class:string -> + ?position:Tags.window_position -> + ?allow_shrink:bool -> + ?allow_grow:bool -> + ?auto_shrink:bool -> + ?modal:bool -> + ?x:int -> + ?y:int -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> file_selection + +class font_selection_dialog : Gtk.font_selection_dialog obj -> + object + inherit [window] window_skel + val obj : Gtk.font_selection_dialog obj + method apply_button : GButton.button + method cancel_button : GButton.button + method connect : GContainer.container_signals + method selection : GMisc.font_selection + method ok_button : GButton.button + end +val font_selection_dialog : + ?title:string -> + ?wm_name:string -> + ?wm_class:string -> + ?position:Tags.window_position -> + ?allow_shrink:bool -> + ?allow_grow:bool -> + ?auto_shrink:bool -> + ?modal:bool -> + ?x:int -> + ?y:int -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> font_selection_dialog + +class plug : Gtk.plug obj -> window + +val plug : + window:Gdk.xid -> + ?border_width:int -> + ?width:int -> ?height:int -> ?show:bool -> unit -> plug diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml new file mode 100644 index 000000000..a1172915b --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml @@ -0,0 +1,17 @@ +(* $Id$ *) + +(* Option handling *) + +let may ~f x = + match x with None -> () + | Some x -> let _ = f x in () + +let may_map ~f x = + match x with None -> None + | Some x -> Some (f x) + +let default x ~opt = + match opt with None -> x | Some y -> y + +let may_default f x ~opt = + match opt with None -> f x | Some y -> y diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml new file mode 100644 index 000000000..c22c4b55c --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml @@ -0,0 +1,535 @@ +(* $Id$ *) + +open Gaux + +type colormap +type visual +type region +type gc +type 'a drawable +type window = [`window] drawable +type pixmap = [`pixmap] drawable +type bitmap = [`bitmap] drawable +type font +type image +type atom = int +type keysym = int +type 'a event +type drag_context +type cursor +type xid = int32 + +exception Error of string +let _ = Callback.register_exception "gdkerror" (Error"") + +module Tags = struct + type event_type = + [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS + |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS + |`BUTTON_RELEASE|`KEY_PRESS + |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE + |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR + |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN + |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS + |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY + |`NO_EXPOSE ] + + type event_mask = + [ `EXPOSURE + |`POINTER_MOTION|`POINTER_MOTION_HINT + |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION + |`BUTTON_PRESS|`BUTTON_RELEASE + |`KEY_PRESS|`KEY_RELEASE + |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE + |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY + |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE + |`ALL_EVENTS ] + + type extension_events = + [ `NONE|`ALL|`CURSOR ] + + type visibility_state = + [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ] + + type input_source = + [ `MOUSE|`PEN|`ERASER|`CURSOR ] + + type notify_type = + [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] + + type crossing_mode = + [ `NORMAL|`GRAB|`UNGRAB ] + + type modifier = + [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1 + |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ] + + type drag_action = + [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ] + +end +open Tags + +module Convert = struct + external test_modifier : modifier -> int -> bool + = "ml_test_GdkModifier_val" + let modifier i = + List.filter [`SHIFT;`LOCK;`CONTROL;`MOD1;`MOD2;`MOD3;`MOD4;`MOD5; + `BUTTON1;`BUTTON2;`BUTTON3;`BUTTON4;`BUTTON5] + ~f:(fun m -> test_modifier m i) +end + +module Screen = struct + external width : unit -> int = "ml_gdk_screen_width" + external height : unit -> int = "ml_gdk_screen_height" +end + +module Visual = struct + type visual_type = + [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR + |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ] + + external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual + = "ml_gdk_visual_get_best" + external get_type : visual -> visual_type = "ml_GdkVisual_type" + external depth : visual -> int = "ml_GdkVisual_depth" + external red_mask : visual -> int = "ml_GdkVisual_red_mask" + external red_shift : visual -> int = "ml_GdkVisual_red_shift" + external red_prec : visual -> int = "ml_GdkVisual_red_prec" + external green_mask : visual -> int = "ml_GdkVisual_green_mask" + external green_shift : visual -> int = "ml_GdkVisual_green_shift" + external green_prec : visual -> int = "ml_GdkVisual_green_prec" + external blue_mask : visual -> int = "ml_GdkVisual_blue_mask" + external blue_shift : visual -> int = "ml_GdkVisual_blue_shift" + external blue_prec : visual -> int = "ml_GdkVisual_blue_prec" +end + +module Image = struct + type image_type = + [ `NORMAL|`SHARED|`FASTEST ] + + external create_bitmap : visual: visual -> data: string -> + width: int -> height: int -> image + = "ml_gdk_image_new_bitmap" + external create : kind: image_type -> visual: visual -> + width: int -> height: int -> image + = "ml_gdk_image_new" + external get : + 'a drawable -> x: int -> y: int -> width: int -> height: int -> image + = "ml_gdk_image_get" + external put_pixel : image -> x: int -> y: int -> pixel: int -> unit + = "ml_gdk_image_put_pixel" + external get_pixel : image -> x: int -> y: int -> int + = "ml_gdk_image_get_pixel" + external destroy : image -> unit + = "ml_gdk_image_destroy" +end + +module Color = struct + type t + + external color_white : colormap -> t = "ml_gdk_color_white" + external color_black : colormap -> t = "ml_gdk_color_black" + external color_parse : string -> t = "ml_gdk_color_parse" + external color_alloc : colormap -> t -> bool = "ml_gdk_color_alloc" + external color_create : red:int -> green:int -> blue:int -> t + = "ml_GdkColor" + + external get_system_colormap : unit -> colormap + = "ml_gdk_colormap_get_system" + external colormap_new : visual -> privat:bool -> colormap + = "ml_gdk_colormap_new" + let get_colormap ?(privat=false) vis = colormap_new vis ~privat + + type spec = [ `BLACK | `NAME of string | `RGB of int * int * int | `WHITE] + let color_alloc ~colormap color = + if not (color_alloc colormap color) then raise (Error"Color.alloc"); + color + let alloc ~colormap color = + match color with + `WHITE -> color_white colormap + | `BLACK -> color_black colormap + | `NAME s -> color_alloc ~colormap (color_parse s) + | `RGB (red,green,blue) -> + color_alloc ~colormap (color_create ~red ~green ~blue) + + external red : t -> int = "ml_GdkColor_red" + external blue : t -> int = "ml_GdkColor_blue" + external green : t -> int = "ml_GdkColor_green" + external pixel : t -> int = "ml_GdkColor_pixel" +end + +module Rectangle = struct + type t + external create : x:int -> y:int -> width:int -> height:int -> t + = "ml_GdkRectangle" + external x : t -> int = "ml_GdkRectangle_x" + external y : t -> int = "ml_GdkRectangle_y" + external width : t -> int = "ml_GdkRectangle_width" + external height : t -> int = "ml_GdkRectangle_height" +end + +module Window = struct + type background_pixmap = [ `NONE | `PARENT_RELATIVE | `PIXMAP of pixmap] + external visual_depth : visual -> int = "ml_gdk_visual_get_depth" + external get_visual : window -> visual = "ml_gdk_window_get_visual" + external get_parent : window -> window = "ml_gdk_window_get_parent" + external get_size : window -> int * int = "ml_gdk_window_get_size" + external get_position : window -> int * int = + "ml_gdk_window_get_position" + external root_parent : unit -> window = "ml_GDK_ROOT_PARENT" + external set_back_pixmap : window -> pixmap -> int -> unit = + "ml_gdk_window_set_back_pixmap" + external clear : window -> unit = "ml_gdk_window_clear" + external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW" + + let set_back_pixmap w pix = + let null_pixmap = (Obj.magic Gpointer.boxed_null : pixmap) in + match pix with + `NONE -> set_back_pixmap w null_pixmap 0 + | `PARENT_RELATIVE -> set_back_pixmap w null_pixmap 1 + | `PIXMAP(pixmap) -> set_back_pixmap w pixmap 0 + (* anything OK, Maybe... *) +end + +module PointArray = struct + type t = { len: int} + external create : len:int -> t = "ml_point_array_new" + external set : t -> pos:int -> x:int -> y:int -> unit = "ml_point_array_set" + let set arr ~pos = + if pos < 0 || pos >= arr.len then invalid_arg "PointArray.set"; + set arr ~pos +end + +module Region = struct + type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ] + type gdkOverlapType = [ `IN|`OUT|`PART ] + external create : unit -> region = "ml_gdk_region_new" + external destroy : region -> unit = "ml_gdk_region_destroy" + external polygon : PointArray.t -> gdkFillRule -> region + = "ml_gdk_region_polygon" + let polygon l = + let len = List.length l in + let arr = PointArray.create ~len in + List.fold_left l ~init:0 + ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1); + polygon arr + external intersect : region -> region -> region + = "ml_gdk_regions_intersect" + external union : region -> region -> region + = "ml_gdk_regions_union" + external subtract : region -> region -> region + = "ml_gdk_regions_subtract" + external xor : region -> region -> region + = "ml_gdk_regions_xor" + external union_with_rect : region -> Rectangle.t -> region + = "ml_gdk_region_union_with_rect" + external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset" + external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink" + external empty : region -> bool = "ml_gdk_region_empty" + external equal : region -> region -> bool = "ml_gdk_region_equal" + external point_in : region -> x:int -> y:int -> bool + = "ml_gdk_region_point_in" + external rect_in : region -> Rectangle.t -> gdkOverlapType + = "ml_gdk_region_rect_in" + external get_clipbox : region -> Rectangle.t -> unit + = "ml_gdk_region_get_clipbox" +end + + +module GC = struct + type gdkFunction = [ `COPY|`INVERT|`XOR ] + type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ] + type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ] + type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ] + type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ] + type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ] + external create : 'a drawable -> gc = "ml_gdk_gc_new" + external set_foreground : gc -> Color.t -> unit = "ml_gdk_gc_set_foreground" + external set_background : gc -> Color.t -> unit = "ml_gdk_gc_set_background" + external set_font : gc -> font -> unit = "ml_gdk_gc_set_font" + external set_function : gc -> gdkFunction -> unit = "ml_gdk_gc_set_function" + external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill" + external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile" + external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple" + external set_ts_origin : gc -> x:int -> y:int -> unit + = "ml_gdk_gc_set_ts_origin" + external set_clip_origin : gc -> x:int -> y:int -> unit + = "ml_gdk_gc_set_clip_origin" + external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask" + external set_clip_rectangle : gc -> Rectangle.t -> unit + = "ml_gdk_gc_set_clip_rectangle" + external set_clip_region : gc -> region -> unit = "ml_gdk_gc_set_clip_region" + external set_subwindow : gc -> gdkSubwindowMode -> unit + = "ml_gdk_gc_set_subwindow" + external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures" + external set_line_attributes : + gc -> width:int -> style:gdkLineStyle -> cap:gdkCapStyle -> + join:gdkJoinStyle -> unit + = "ml_gdk_gc_set_line_attributes" + external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy" + type values = { + foreground : Color.t; + background : Color.t; + font : font option; + fonction : gdkFunction; + fill : gdkFill; + tile : pixmap option; + stipple : pixmap option; + clip_mask : bitmap option; + subwindow_mode : gdkSubwindowMode; + ts_x_origin : int; + ts_y_origin : int; + clip_x_origin : int; + clip_y_origin : int; + graphics_exposures : bool; + line_width : int; + line_style : gdkLineStyle; + cap_style : gdkCapStyle; + join_style : gdkJoinStyle; + } + external get_values : gc -> values = "ml_gdk_gc_get_values" +end + +module Pixmap = struct + external create : window -> width:int -> height:int -> depth:int -> pixmap + = "ml_gdk_pixmap_new" + external create_from_data : + window -> string -> width:int -> height:int -> depth:int -> + fg:Color.t -> bg:Color.t -> pixmap + = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data" + external create_from_xpm : + window -> ?colormap:colormap -> ?transparent:Color.t -> + file:string -> pixmap * bitmap + = "ml_gdk_pixmap_colormap_create_from_xpm" + external create_from_xpm_d : + window -> ?colormap:colormap -> ?transparent:Color.t -> + data:string array -> pixmap * bitmap + = "ml_gdk_pixmap_colormap_create_from_xpm_d" +end + +module Bitmap = struct + let create : window -> width:int -> height:int -> bitmap = + Obj.magic (Pixmap.create ~depth:1) + external create_from_data : + window -> string -> width:int -> height:int -> bitmap + = "ml_gdk_bitmap_create_from_data" +end + +module Font = struct + external load : string -> font = "ml_gdk_font_load" + external load_fontset : string -> font = "ml_gdk_fontset_load" + external string_width : font -> string -> int = "ml_gdk_string_width" + external char_width : font -> char -> int = "ml_gdk_char_width" + external string_height : font -> string -> int = "ml_gdk_string_height" + external char_height : font -> char -> int = "ml_gdk_char_height" + external string_measure : font -> string -> int = "ml_gdk_string_measure" + external char_measure : font -> char -> int = "ml_gdk_char_measure" + external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type" + external ascent : font -> int = "ml_GdkFont_ascent" + external descent : font -> int = "ml_GdkFont_descent" +end + +module Draw = struct + external point : 'a drawable -> gc -> x:int -> y:int -> unit + = "ml_gdk_draw_point" + external line : 'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit + = "ml_gdk_draw_line_bc" "ml_gdk_draw_line" + external rectangle : + 'a drawable -> gc -> + filled:bool -> x:int -> y:int -> width:int -> height:int -> unit + = "ml_gdk_draw_rectangle_bc" "ml_gdk_draw_rectangle" + let rectangle w gc ~x ~y ~width ~height ?(filled=false) () = + rectangle w gc ~x ~y ~width ~height ~filled + external arc : + 'a drawable -> gc -> filled:bool -> x:int -> y:int -> + width:int -> height:int -> start:int -> angle:int -> unit + = "ml_gdk_draw_arc_bc" "ml_gdk_draw_arc" + let arc w gc ~x ~y ~width ~height ?(filled=false) ?(start=0.) + ?(angle=360.) () = + arc w gc ~x ~y ~width ~height ~filled + ~start:(truncate(start *. 64.)) + ~angle:(truncate(angle *. 64.)) + external polygon : 'a drawable -> gc -> filled:bool -> PointArray.t -> unit + = "ml_gdk_draw_polygon" + let polygon w gc ?(filled=false) l = + let len = List.length l in + let arr = PointArray.create ~len in + List.fold_left l ~init:0 + ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1); + polygon w gc ~filled arr + external string : 'a drawable -> font: font -> gc -> x: int -> y: int -> + string: string -> unit + = "ml_gdk_draw_string_bc" "ml_gdk_draw_string" + external image : 'a drawable -> gc -> image: image -> + xsrc: int -> ysrc: int -> xdest: int -> ydest: int -> + width: int -> height: int -> unit + = "ml_gdk_draw_image_bc" "ml_gdk_draw_image" +end + +module Rgb = struct + external init : unit -> unit = "ml_gdk_rgb_init" + external get_visual : unit -> visual = "ml_gdk_rgb_get_visual" + external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap" +end + +module DnD = struct + external drag_status : drag_context -> drag_action list -> time:int -> unit + = "ml_gdk_drag_status" + external drag_context_suggested_action : drag_context -> drag_action + = "ml_GdkDragContext_suggested_action" + external drag_context_targets : drag_context -> atom list + = "ml_GdkDragContext_targets" +end + +module Truecolor = struct + (* Truecolor quick color query *) + + type visual_shift_prec = { + red_shift : int; + red_prec : int; + green_shift : int; + green_prec : int; + blue_shift : int; + blue_prec : int + } + + let shift_prec visual = { + red_shift = Visual.red_shift visual; + red_prec = Visual.red_prec visual; + green_shift = Visual.green_shift visual; + green_prec = Visual.green_prec visual; + blue_shift = Visual.blue_shift visual; + blue_prec = Visual.blue_prec visual; + } + + let color_creator visual = + match Visual.get_type visual with + `TRUE_COLOR | `DIRECT_COLOR -> + let shift_prec = shift_prec visual in + Format.eprintf "red : %d %d, " + shift_prec.red_shift shift_prec.red_prec; + Format.eprintf "green : %d %d, " + shift_prec.green_shift shift_prec.green_prec; + Format.eprintf "blue : %d %d" + shift_prec.blue_shift shift_prec.blue_prec; + Format.pp_print_newline Format.err_formatter (); + let red_lsr = 16 - shift_prec.red_prec + and green_lsr = 16 - shift_prec.green_prec + and blue_lsr = 16 - shift_prec.blue_prec in + fun ~red: red ~green: green ~blue: blue -> + (((red lsr red_lsr) lsl shift_prec.red_shift) lor + ((green lsr green_lsr) lsl shift_prec.green_shift) lor + ((blue lsr blue_lsr) lsl shift_prec.blue_shift)) + | _ -> raise (Invalid_argument "Gdk.Truecolor.color_creator") + + let color_parser visual = + match Visual.get_type visual with + `TRUE_COLOR | `DIRECT_COLOR -> + let shift_prec = shift_prec visual in + let red_lsr = 16 - shift_prec.red_prec + and green_lsr = 16 - shift_prec.green_prec + and blue_lsr = 16 - shift_prec.blue_prec in + let mask = 1 lsl 16 - 1 in + fun pixel -> + ((pixel lsr shift_prec.red_shift) lsl red_lsr) land mask, + ((pixel lsr shift_prec.green_shift) lsl green_lsr) land mask, + ((pixel lsr shift_prec.blue_shift) lsl blue_lsr) land mask + | _ -> raise (Invalid_argument "Gdk.Truecolor.color_parser") +end + +module X = struct + (* X related functions *) + external flush : unit -> unit + = "ml_gdk_flush" + external beep : unit -> unit + = "ml_gdk_beep" +end + +module Cursor = struct + type cursor_type = [ + | `X_CURSOR + | `ARROW + | `BASED_ARROW_DOWN + | `BASED_ARROW_UP + | `BOAT + | `BOGOSITY + | `BOTTOM_LEFT_CORNER + | `BOTTOM_RIGHT_CORNER + | `BOTTOM_SIDE + | `BOTTOM_TEE + | `BOX_SPIRAL + | `CENTER_PTR + | `CIRCLE + | `CLOCK + | `COFFEE_MUG + | `CROSS + | `CROSS_REVERSE + | `CROSSHAIR + | `DIAMOND_CROSS + | `DOT + | `DOTBOX + | `DOUBLE_ARROW + | `DRAFT_LARGE + | `DRAFT_SMALL + | `DRAPED_BOX + | `EXCHANGE + | `FLEUR + | `GOBBLER + | `GUMBY + | `HAND1 + | `HAND2 + | `HEART + | `ICON + | `IRON_CROSS + | `LEFT_PTR + | `LEFT_SIDE + | `LEFT_TEE + | `LEFTBUTTON + | `LL_ANGLE + | `LR_ANGLE + | `MAN + | `MIDDLEBUTTON + | `MOUSE + | `PENCIL + | `PIRATE + | `PLUS + | `QUESTION_ARROW + | `RIGHT_PTR + | `RIGHT_SIDE + | `RIGHT_TEE + | `RIGHTBUTTON + | `RTL_LOGO + | `SAILBOAT + | `SB_DOWN_ARROW + | `SB_H_DOUBLE_ARROW + | `SB_LEFT_ARROW + | `SB_RIGHT_ARROW + | `SB_UP_ARROW + | `SB_V_DOUBLE_ARROW + | `SHUTTLE + | `SIZING + | `SPIDER + | `SPRAYCAN + | `STAR + | `TARGET + | `TCROSS + | `TOP_LEFT_ARROW + | `TOP_LEFT_CORNER + | `TOP_RIGHT_CORNER + | `TOP_SIDE + | `TOP_TEE + | `TREK + | `UL_ANGLE + | `UMBRELLA + | `UR_ANGLE + | `WATCH + | `XTERM + ] + external create : cursor_type -> cursor = "ml_gdk_cursor_new" + external create_from_pixmap : + pixmap -> mask:bitmap -> + fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor + = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap" + external destroy : cursor -> unit = "ml_gdk_cursor_destroy" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli new file mode 100644 index 000000000..2914b60ce --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli @@ -0,0 +1,447 @@ +(* $Id$ *) + +type colormap +type visual +type region +type gc +type 'a drawable +type window = [`window] drawable +type pixmap = [`pixmap] drawable +type bitmap = [`bitmap] drawable +type font +type image +type atom = int +type keysym = int +type 'a event +type drag_context +type cursor +type xid = int32 + +exception Error of string + +module Tags : sig + type event_type = + [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS + |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS + |`BUTTON_RELEASE|`KEY_PRESS + |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE + |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR + |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN + |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS + |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY + |`NO_EXPOSE ] + type event_mask = + [ `EXPOSURE + |`POINTER_MOTION|`POINTER_MOTION_HINT + |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION + |`BUTTON_PRESS|`BUTTON_RELEASE + |`KEY_PRESS|`KEY_RELEASE + |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE + |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY + |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE + |`ALL_EVENTS ] + type extension_events = [ `NONE|`ALL|`CURSOR ] + type visibility_state = [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ] + type input_source = [ `MOUSE|`PEN|`ERASER|`CURSOR ] + type notify_type = + [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] + type crossing_mode = [ `NORMAL|`GRAB|`UNGRAB ] + type modifier = + [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1 + |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ] + type drag_action = [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ] +end + +module Convert : + sig + val modifier : int -> Tags.modifier list + end + +module Screen : + sig + external width : unit -> int = "ml_gdk_screen_width" + external height : unit -> int = "ml_gdk_screen_height" + end + +module Visual : + sig + type visual_type = + [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR + |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ] + external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual + = "ml_gdk_visual_get_best" + external get_type : visual -> visual_type = "ml_GdkVisual_type" + external depth : visual -> int = "ml_GdkVisual_depth" + external red_mask : visual -> int = "ml_GdkVisual_red_mask" + external red_shift : visual -> int = "ml_GdkVisual_red_shift" + external red_prec : visual -> int = "ml_GdkVisual_red_prec" + external green_mask : visual -> int = "ml_GdkVisual_green_mask" + external green_shift : visual -> int = "ml_GdkVisual_green_shift" + external green_prec : visual -> int = "ml_GdkVisual_green_prec" + external blue_mask : visual -> int = "ml_GdkVisual_blue_mask" + external blue_shift : visual -> int = "ml_GdkVisual_blue_shift" + external blue_prec : visual -> int = "ml_GdkVisual_blue_prec" + end + +module Image : + sig + type image_type = [ `FASTEST|`NORMAL|`SHARED ] + external create_bitmap : + visual:visual -> data:string -> width:int -> height:int -> image + = "ml_gdk_image_new_bitmap" + external create : + kind:image_type -> + visual:visual -> width:int -> height:int -> image = "ml_gdk_image_new" + external get : + 'a drawable -> x:int -> y:int -> width:int -> height:int -> image + = "ml_gdk_image_get" + external put_pixel : image -> x:int -> y:int -> pixel:int -> unit + = "ml_gdk_image_put_pixel" + external get_pixel : image -> x:int -> y:int -> int + = "ml_gdk_image_get_pixel" + external destroy : image -> unit = "ml_gdk_image_destroy" + end + +module Color : + sig + external get_system_colormap : unit -> colormap + = "ml_gdk_colormap_get_system" + val get_colormap : ?privat:bool -> visual -> colormap + + type t + type spec = [ + | `BLACK + | `NAME of string + | `RGB of int * int * int + | `WHITE + ] + val alloc : colormap:colormap -> spec -> t + external red : t -> int = "ml_GdkColor_red" + external blue : t -> int = "ml_GdkColor_blue" + external green : t -> int = "ml_GdkColor_green" + external pixel : t -> int = "ml_GdkColor_pixel" + end + +module Rectangle : + sig + type t + external create : x:int -> y:int -> width:int -> height:int -> t + = "ml_GdkRectangle" + external x : t -> int = "ml_GdkRectangle_x" + external y : t -> int = "ml_GdkRectangle_y" + external width : t -> int = "ml_GdkRectangle_width" + external height : t -> int = "ml_GdkRectangle_height" + end + +module Window : + sig + type background_pixmap = [ `NONE|`PARENT_RELATIVE|`PIXMAP of pixmap ] + external visual_depth : visual -> int = "ml_gdk_visual_get_depth" + external get_visual : window -> visual = "ml_gdk_window_get_visual" + external get_parent : window -> window = "ml_gdk_window_get_parent" + external get_size : window -> int * int = "ml_gdk_window_get_size" + external get_position : window -> int * int + = "ml_gdk_window_get_position" + external root_parent : unit -> window = "ml_GDK_ROOT_PARENT" + external clear : window -> unit = "ml_gdk_window_clear" + external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW" + val set_back_pixmap : window -> background_pixmap -> unit + end + +module PointArray : + sig + type t = { len: int } + external create : len:int -> t = "ml_point_array_new" + val set : t -> pos:int -> x:int -> y:int -> unit + end + +module Region : + sig + type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ] + type gdkOverlapType = [ `IN|`OUT|`PART ] + external create : unit -> region = "ml_gdk_region_new" + external destroy : region -> unit = "ml_gdk_region_destroy" + val polygon : (int * int) list -> gdkFillRule -> region + external intersect : region -> region -> region + = "ml_gdk_regions_intersect" + external union : region -> region -> region + = "ml_gdk_regions_union" + external subtract : region -> region -> region + = "ml_gdk_regions_subtract" + external xor : region -> region -> region + = "ml_gdk_regions_xor" + external union_with_rect : region -> Rectangle.t -> region + = "ml_gdk_region_union_with_rect" + external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset" + external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink" + external empty : region -> bool = "ml_gdk_region_empty" + external equal : region -> region -> bool = "ml_gdk_region_equal" + external point_in : region -> x:int -> y:int -> bool + = "ml_gdk_region_point_in" + external rect_in : region -> Rectangle.t -> gdkOverlapType + = "ml_gdk_region_rect_in" + external get_clipbox : region -> Rectangle.t -> unit + = "ml_gdk_region_get_clipbox" + end + +module GC : + sig + type gdkFunction = [ `COPY|`INVERT|`XOR ] + type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ] + type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ] + type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ] + type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ] + type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ] + external create : 'a drawable -> gc = "ml_gdk_gc_new" + external set_foreground : gc -> Color.t -> unit + = "ml_gdk_gc_set_foreground" + external set_background : gc -> Color.t -> unit + = "ml_gdk_gc_set_background" + external set_font : gc -> font -> unit = "ml_gdk_gc_set_font" + external set_function : gc -> gdkFunction -> unit + = "ml_gdk_gc_set_function" + external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill" + external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile" + external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple" + external set_ts_origin : gc -> x:int -> y:int -> unit + = "ml_gdk_gc_set_ts_origin" + external set_clip_origin : gc -> x:int -> y:int -> unit + = "ml_gdk_gc_set_clip_origin" + external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask" + external set_clip_rectangle : gc -> Rectangle.t -> unit + = "ml_gdk_gc_set_clip_rectangle" + external set_clip_region : gc -> region -> unit + = "ml_gdk_gc_set_clip_region" + external set_subwindow : gc -> gdkSubwindowMode -> unit + = "ml_gdk_gc_set_subwindow" + external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures" + external set_line_attributes : + gc -> + width:int -> + style:gdkLineStyle -> cap:gdkCapStyle -> join:gdkJoinStyle -> unit + = "ml_gdk_gc_set_line_attributes" + external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy" + type values = { + foreground : Color.t; + background : Color.t; + font : font option; + fonction : gdkFunction; + fill : gdkFill; + tile : pixmap option; + stipple : pixmap option; + clip_mask : bitmap option; + subwindow_mode : gdkSubwindowMode; + ts_x_origin : int; + ts_y_origin : int; + clip_x_origin : int; + clip_y_origin : int; + graphics_exposures : bool; + line_width : int; + line_style : gdkLineStyle; + cap_style : gdkCapStyle; + join_style : gdkJoinStyle; + } + external get_values : gc -> values = "ml_gdk_gc_get_values" + end + +module Pixmap : + sig + external create : + window -> width:int -> height:int -> depth:int -> pixmap + = "ml_gdk_pixmap_new" + external create_from_data : + window -> + string -> + width:int -> + height:int -> depth:int -> fg:Color.t -> bg:Color.t -> pixmap + = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data" + external create_from_xpm : + window -> + ?colormap:colormap -> + ?transparent:Color.t -> file:string -> pixmap * bitmap + = "ml_gdk_pixmap_colormap_create_from_xpm" + external create_from_xpm_d : + window -> + ?colormap:colormap -> + ?transparent:Color.t -> data:string array -> pixmap * bitmap + = "ml_gdk_pixmap_colormap_create_from_xpm_d" + end + +module Bitmap : + sig + val create : window -> width:int -> height:int -> bitmap + external create_from_data : + window -> string -> width:int -> height:int -> bitmap + = "ml_gdk_bitmap_create_from_data" + end + +module Font : + sig + external load : string -> font = "ml_gdk_font_load" + external load_fontset : string -> font = "ml_gdk_fontset_load" + external string_width : font -> string -> int = "ml_gdk_string_width" + external char_width : font -> char -> int = "ml_gdk_char_width" + external string_height : font -> string -> int = "ml_gdk_string_height" + external char_height : font -> char -> int = "ml_gdk_char_height" + external string_measure : font -> string -> int = "ml_gdk_string_measure" + external char_measure : font -> char -> int = "ml_gdk_char_measure" + external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type" + external ascent : font -> int = "ml_GdkFont_ascent" + external descent : font -> int = "ml_GdkFont_descent" + end + +module Draw : + sig + external point : 'a drawable -> gc -> x:int -> y:int -> unit + = "ml_gdk_draw_point" + external line : + 'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit + = "ml_gdk_draw_line_bc" "ml_gdk_draw_line" + val rectangle : + 'a drawable -> gc -> + x:int -> y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit + val arc : + 'a drawable -> gc -> + x:int -> y:int -> width:int -> height:int -> + ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit + val polygon : + 'a drawable -> gc -> ?filled:bool ->(int * int) list -> unit + external string : + 'a drawable -> + font:font -> gc -> x:int -> y:int -> string:string -> unit + = "ml_gdk_draw_string_bc" "ml_gdk_draw_string" + external image : + 'a drawable -> + gc -> + image:image -> + xsrc:int -> + ysrc:int -> xdest:int -> ydest:int -> width:int -> height:int -> unit + = "ml_gdk_draw_image_bc" "ml_gdk_draw_image" + end + +module Rgb : + sig + external init : unit -> unit = "ml_gdk_rgb_init" + external get_visual : unit -> visual = "ml_gdk_rgb_get_visual" + external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap" + end + +module DnD : + sig + external drag_status : + drag_context -> Tags.drag_action list -> time:int -> unit + = "ml_gdk_drag_status" + external drag_context_suggested_action : drag_context -> Tags.drag_action + = "ml_GdkDragContext_suggested_action" + external drag_context_targets : drag_context -> atom list + = "ml_GdkDragContext_targets" + end + +module Truecolor : + sig + val color_creator : visual -> (red: int -> green: int -> blue: int -> int) + (* [color_creator visual] creates a function to calculate + the pixel color id for given red, green and blue component + value ([0..65535]) at the client side. [visual] must have + `TRUE_COLOR or `DIRECT_COLOR type. This function improves + the speed of the color query of true color visual greatly. *) + (* WARN: this approach is not theoretically correct for true color + visual, because we need gamma correction. *) + + val color_parser : visual -> int -> int * int * int + end + +module X : + (* X related functions *) + sig + val flush : unit -> unit (* also in GtkMain *) + val beep : unit -> unit + end + +module Cursor : sig + type cursor_type = [ + | `X_CURSOR + | `ARROW + | `BASED_ARROW_DOWN + | `BASED_ARROW_UP + | `BOAT + | `BOGOSITY + | `BOTTOM_LEFT_CORNER + | `BOTTOM_RIGHT_CORNER + | `BOTTOM_SIDE + | `BOTTOM_TEE + | `BOX_SPIRAL + | `CENTER_PTR + | `CIRCLE + | `CLOCK + | `COFFEE_MUG + | `CROSS + | `CROSS_REVERSE + | `CROSSHAIR + | `DIAMOND_CROSS + | `DOT + | `DOTBOX + | `DOUBLE_ARROW + | `DRAFT_LARGE + | `DRAFT_SMALL + | `DRAPED_BOX + | `EXCHANGE + | `FLEUR + | `GOBBLER + | `GUMBY + | `HAND1 + | `HAND2 + | `HEART + | `ICON + | `IRON_CROSS + | `LEFT_PTR + | `LEFT_SIDE + | `LEFT_TEE + | `LEFTBUTTON + | `LL_ANGLE + | `LR_ANGLE + | `MAN + | `MIDDLEBUTTON + | `MOUSE + | `PENCIL + | `PIRATE + | `PLUS + | `QUESTION_ARROW + | `RIGHT_PTR + | `RIGHT_SIDE + | `RIGHT_TEE + | `RIGHTBUTTON + | `RTL_LOGO + | `SAILBOAT + | `SB_DOWN_ARROW + | `SB_H_DOUBLE_ARROW + | `SB_LEFT_ARROW + | `SB_RIGHT_ARROW + | `SB_UP_ARROW + | `SB_V_DOUBLE_ARROW + | `SHUTTLE + | `SIZING + | `SPIDER + | `SPRAYCAN + | `STAR + | `TARGET + | `TCROSS + | `TOP_LEFT_ARROW + | `TOP_LEFT_CORNER + | `TOP_RIGHT_CORNER + | `TOP_SIDE + | `TOP_TEE + | `TREK + | `UL_ANGLE + | `UMBRELLA + | `UR_ANGLE + | `WATCH + | `XTERM + ] + external create : cursor_type -> cursor = "ml_gdk_cursor_new" + external create_from_pixmap : + pixmap -> mask:bitmap -> + fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor + = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap" + external destroy : cursor -> unit = "ml_gdk_cursor_destroy" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml new file mode 100644 index 000000000..87c0e888f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml @@ -0,0 +1,159 @@ +(* $Id$ *) + +open Gaux +open Gdk +open Tags + +external coerce : 'a event -> event_type event = "%identity" +external unsafe_copy : Gpointer.boxed -> #event_type event + = "ml_gdk_event_copy" +external copy : (#event_type as 'a) event -> 'a event + = "ml_gdk_event_copy" +external get_type : 'a event -> 'a = "ml_GdkEventAny_type" +external get_window : 'a event -> window = "ml_GdkEventAny_window" +external get_send_event : 'a event -> bool = "ml_GdkEventAny_send_event" + +external create : (#event_type as 'a) -> 'a event + = "ml_gdk_event_new" +external set_window : 'a event -> window -> unit + = "ml_gdk_event_set_window" + +module Expose = struct + type t = [ `EXPOSE ] event + let cast (ev : event_type event) : t = + match get_type ev with `EXPOSE -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Expose.cast" + external area : t -> Rectangle.t = "ml_GdkEventExpose_area" + external count : t -> int = "ml_GdkEventExpose_count" +end + +module Visibility = struct + type t = [ `VISIBILITY_NOTIFY ] event + let cast (ev : event_type event) : t = + match get_type ev with `VISIBILITY_NOTIFY -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Visibility.cast" + external visibility : t -> visibility_state + = "ml_GdkEventVisibility_state" +end + +module Motion = struct + type t = [ `MOTION_NOTIFY ] event + let cast (ev : event_type event) : t = + match get_type ev with `MOTION_NOTIFY -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Motion.cast" + external time : t -> int = "ml_GdkEventMotion_time" + external x : t -> float = "ml_GdkEventMotion_x" + external y : t -> float = "ml_GdkEventMotion_y" + external pressure : t -> float = "ml_GdkEventMotion_pressure" + external xtilt : t -> float = "ml_GdkEventMotion_xtilt" + external ytilt : t -> float = "ml_GdkEventMotion_ytilt" + external state : t -> int = "ml_GdkEventMotion_state" + external is_hint : t -> bool = "ml_GdkEventMotion_is_hint" + external source : t -> input_source = "ml_GdkEventMotion_source" + external deviceid : t -> int = "ml_GdkEventMotion_deviceid" + external x_root : t -> float = "ml_GdkEventMotion_x_root" + external y_root : t -> float = "ml_GdkEventMotion_y_root" +end + +module Button = struct + type types = + [ `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE ] + type t = types event + let cast (ev : event_type event) : t = + match get_type ev with + `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE + -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Button.cast" + external time : t -> int = "ml_GdkEventButton_time" + external x : t -> float = "ml_GdkEventButton_x" + external y : t -> float = "ml_GdkEventButton_y" + external pressure : t -> float = "ml_GdkEventButton_pressure" + external xtilt : t -> float = "ml_GdkEventButton_xtilt" + external ytilt : t -> float = "ml_GdkEventButton_ytilt" + external state : t -> int = "ml_GdkEventButton_state" + external button : t -> int = "ml_GdkEventButton_button" + external source : t -> input_source = "ml_GdkEventButton_source" + external deviceid : t -> int = "ml_GdkEventButton_deviceid" + external x_root : t -> float = "ml_GdkEventButton_x_root" + external y_root : t -> float = "ml_GdkEventButton_y_root" + external set_type : t -> #types -> unit + = "ml_gdk_event_set_type" + external set_button : t -> int -> unit + = "ml_gdk_event_button_set_button" +end + +module Key = struct + type t = [ `KEY_PRESS|`KEY_RELEASE ] event + let cast (ev : event_type event) : t = + match get_type ev with + `KEY_PRESS|`KEY_RELEASE -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Key.cast" + external time : t -> int = "ml_GdkEventKey_time" + external state : t -> int = "ml_GdkEventKey_state" + external keyval : t -> keysym = "ml_GdkEventKey_keyval" + external string : t -> string = "ml_GdkEventKey_string" + let state ev = Convert.modifier (state ev) +end + +module Crossing = struct + type t = [ `ENTER_NOTIFY|`LEAVE_NOTIFY ] event + let cast (ev : event_type event) : t = + match get_type ev with + `ENTER_NOTIFY|`LEAVE_NOTIFY -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Crossing.cast" + external subwindow : t -> window = "ml_GdkEventCrossing_subwindow" + external detail : t -> notify_type = "ml_GdkEventCrossing_detail" +end + +module Focus = struct + type t = [ `FOCUS_CHANGE ] event + let cast (ev : event_type event) : t = + match get_type ev with `FOCUS_CHANGE -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Focus.cast" + external focus_in : t -> bool = "ml_GdkEventFocus_in" +end + +module Configure = struct + type t = [ `CONFIGURE ] event + let cast (ev : event_type event) : t = + match get_type ev with `CONFIGURE -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Configure.cast" + external x : t -> int = "ml_GdkEventConfigure_x" + external y : t -> int = "ml_GdkEventConfigure_y" + external width : t -> int = "ml_GdkEventConfigure_width" + external height : t -> int = "ml_GdkEventConfigure_height" +end + +module Property = struct + type t = [ `PROPERTY_NOTIFY ] event + let cast (ev : event_type event) : t = + match get_type ev with `PROPERTY_NOTIFY -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Property.cast" + external atom : t -> atom = "ml_GdkEventProperty_atom" + external time : t -> int = "ml_GdkEventProperty_time" + external state : t -> int = "ml_GdkEventProperty_state" +end + +module Selection = struct + type t = [ `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY ] event + let cast (ev : event_type event) : t = + match get_type ev with + `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Selection.cast" + external selection : t -> atom = "ml_GdkEventSelection_selection" + external target : t -> atom = "ml_GdkEventSelection_target" + external property : t -> atom = "ml_GdkEventSelection_property" + external requestor : t -> int = "ml_GdkEventSelection_requestor" + external time : t -> int = "ml_GdkEventSelection_time" +end + +module Proximity = struct + type t = [ `PROXIMITY_IN|`PROXIMITY_OUT ] event + let cast (ev : event_type event) : t = + match get_type ev with + `PROXIMITY_IN|`PROXIMITY_OUT -> Obj.magic ev + | _ -> invalid_arg "GdkEvent.Proximity.cast" + external time : t -> int = "ml_GdkEventProximity_time" + external source : t -> input_source = "ml_GdkEventProximity_source" + external deviceid : t -> int = "ml_GdkEventProximity_deviceid" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml new file mode 100644 index 000000000..b0257b439 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml @@ -0,0 +1,1320 @@ +(* $Id$ *) + +open Gdk +let _VoidSymbol : keysym = 0xFFFFFF +let _BackSpace : keysym = 0xFF08 +let _Tab : keysym = 0xFF09 +let _Linefeed : keysym = 0xFF0A +let _Clear : keysym = 0xFF0B +let _Return : keysym = 0xFF0D +let _Pause : keysym = 0xFF13 +let _Scroll_Lock : keysym = 0xFF14 +let _Sys_Req : keysym = 0xFF15 +let _Escape : keysym = 0xFF1B +let _Delete : keysym = 0xFFFF +let _Multi_key : keysym = 0xFF20 +let _SingleCandidate : keysym = 0xFF3C +let _MultipleCandidate : keysym = 0xFF3D +let _PreviousCandidate : keysym = 0xFF3E +let _Kanji : keysym = 0xFF21 +let _Muhenkan : keysym = 0xFF22 +let _Henkan_Mode : keysym = 0xFF23 +let _Henkan : keysym = 0xFF23 +let _Romaji : keysym = 0xFF24 +let _Hiragana : keysym = 0xFF25 +let _Katakana : keysym = 0xFF26 +let _Hiragana_Katakana : keysym = 0xFF27 +let _Zenkaku : keysym = 0xFF28 +let _Hankaku : keysym = 0xFF29 +let _Zenkaku_Hankaku : keysym = 0xFF2A +let _Touroku : keysym = 0xFF2B +let _Massyo : keysym = 0xFF2C +let _Kana_Lock : keysym = 0xFF2D +let _Kana_Shift : keysym = 0xFF2E +let _Eisu_Shift : keysym = 0xFF2F +let _Eisu_toggle : keysym = 0xFF30 +let _Zen_Koho : keysym = 0xFF3D +let _Mae_Koho : keysym = 0xFF3E +let _Home : keysym = 0xFF50 +let _Left : keysym = 0xFF51 +let _Up : keysym = 0xFF52 +let _Right : keysym = 0xFF53 +let _Down : keysym = 0xFF54 +let _Prior : keysym = 0xFF55 +let _Page_Up : keysym = 0xFF55 +let _Next : keysym = 0xFF56 +let _Page_Down : keysym = 0xFF56 +let _End : keysym = 0xFF57 +let _Begin : keysym = 0xFF58 +let _Select : keysym = 0xFF60 +let _Print : keysym = 0xFF61 +let _Execute : keysym = 0xFF62 +let _Insert : keysym = 0xFF63 +let _Undo : keysym = 0xFF65 +let _Redo : keysym = 0xFF66 +let _Menu : keysym = 0xFF67 +let _Find : keysym = 0xFF68 +let _Cancel : keysym = 0xFF69 +let _Help : keysym = 0xFF6A +let _Break : keysym = 0xFF6B +let _Mode_switch : keysym = 0xFF7E +let _script_switch : keysym = 0xFF7E +let _Num_Lock : keysym = 0xFF7F +let _KP_Space : keysym = 0xFF80 +let _KP_Tab : keysym = 0xFF89 +let _KP_Enter : keysym = 0xFF8D +let _KP_F1 : keysym = 0xFF91 +let _KP_F2 : keysym = 0xFF92 +let _KP_F3 : keysym = 0xFF93 +let _KP_F4 : keysym = 0xFF94 +let _KP_Home : keysym = 0xFF95 +let _KP_Left : keysym = 0xFF96 +let _KP_Up : keysym = 0xFF97 +let _KP_Right : keysym = 0xFF98 +let _KP_Down : keysym = 0xFF99 +let _KP_Prior : keysym = 0xFF9A +let _KP_Page_Up : keysym = 0xFF9A +let _KP_Next : keysym = 0xFF9B +let _KP_Page_Down : keysym = 0xFF9B +let _KP_End : keysym = 0xFF9C +let _KP_Begin : keysym = 0xFF9D +let _KP_Insert : keysym = 0xFF9E +let _KP_Delete : keysym = 0xFF9F +let _KP_Equal : keysym = 0xFFBD +let _KP_Multiply : keysym = 0xFFAA +let _KP_Add : keysym = 0xFFAB +let _KP_Separator : keysym = 0xFFAC +let _KP_Subtract : keysym = 0xFFAD +let _KP_Decimal : keysym = 0xFFAE +let _KP_Divide : keysym = 0xFFAF +let _KP_0 : keysym = 0xFFB0 +let _KP_1 : keysym = 0xFFB1 +let _KP_2 : keysym = 0xFFB2 +let _KP_3 : keysym = 0xFFB3 +let _KP_4 : keysym = 0xFFB4 +let _KP_5 : keysym = 0xFFB5 +let _KP_6 : keysym = 0xFFB6 +let _KP_7 : keysym = 0xFFB7 +let _KP_8 : keysym = 0xFFB8 +let _KP_9 : keysym = 0xFFB9 +let _F1 : keysym = 0xFFBE +let _F2 : keysym = 0xFFBF +let _F3 : keysym = 0xFFC0 +let _F4 : keysym = 0xFFC1 +let _F5 : keysym = 0xFFC2 +let _F6 : keysym = 0xFFC3 +let _F7 : keysym = 0xFFC4 +let _F8 : keysym = 0xFFC5 +let _F9 : keysym = 0xFFC6 +let _F10 : keysym = 0xFFC7 +let _F11 : keysym = 0xFFC8 +let _L1 : keysym = 0xFFC8 +let _F12 : keysym = 0xFFC9 +let _L2 : keysym = 0xFFC9 +let _F13 : keysym = 0xFFCA +let _L3 : keysym = 0xFFCA +let _F14 : keysym = 0xFFCB +let _L4 : keysym = 0xFFCB +let _F15 : keysym = 0xFFCC +let _L5 : keysym = 0xFFCC +let _F16 : keysym = 0xFFCD +let _L6 : keysym = 0xFFCD +let _F17 : keysym = 0xFFCE +let _L7 : keysym = 0xFFCE +let _F18 : keysym = 0xFFCF +let _L8 : keysym = 0xFFCF +let _F19 : keysym = 0xFFD0 +let _L9 : keysym = 0xFFD0 +let _F20 : keysym = 0xFFD1 +let _L10 : keysym = 0xFFD1 +let _F21 : keysym = 0xFFD2 +let _R1 : keysym = 0xFFD2 +let _F22 : keysym = 0xFFD3 +let _R2 : keysym = 0xFFD3 +let _F23 : keysym = 0xFFD4 +let _R3 : keysym = 0xFFD4 +let _F24 : keysym = 0xFFD5 +let _R4 : keysym = 0xFFD5 +let _F25 : keysym = 0xFFD6 +let _R5 : keysym = 0xFFD6 +let _F26 : keysym = 0xFFD7 +let _R6 : keysym = 0xFFD7 +let _F27 : keysym = 0xFFD8 +let _R7 : keysym = 0xFFD8 +let _F28 : keysym = 0xFFD9 +let _R8 : keysym = 0xFFD9 +let _F29 : keysym = 0xFFDA +let _R9 : keysym = 0xFFDA +let _F30 : keysym = 0xFFDB +let _R10 : keysym = 0xFFDB +let _F31 : keysym = 0xFFDC +let _R11 : keysym = 0xFFDC +let _F32 : keysym = 0xFFDD +let _R12 : keysym = 0xFFDD +let _F33 : keysym = 0xFFDE +let _R13 : keysym = 0xFFDE +let _F34 : keysym = 0xFFDF +let _R14 : keysym = 0xFFDF +let _F35 : keysym = 0xFFE0 +let _R15 : keysym = 0xFFE0 +let _Shift_L : keysym = 0xFFE1 +let _Shift_R : keysym = 0xFFE2 +let _Control_L : keysym = 0xFFE3 +let _Control_R : keysym = 0xFFE4 +let _Caps_Lock : keysym = 0xFFE5 +let _Shift_Lock : keysym = 0xFFE6 +let _Meta_L : keysym = 0xFFE7 +let _Meta_R : keysym = 0xFFE8 +let _Alt_L : keysym = 0xFFE9 +let _Alt_R : keysym = 0xFFEA +let _Super_L : keysym = 0xFFEB +let _Super_R : keysym = 0xFFEC +let _Hyper_L : keysym = 0xFFED +let _Hyper_R : keysym = 0xFFEE +let _ISO_Lock : keysym = 0xFE01 +let _ISO_Level2_Latch : keysym = 0xFE02 +let _ISO_Level3_Shift : keysym = 0xFE03 +let _ISO_Level3_Latch : keysym = 0xFE04 +let _ISO_Level3_Lock : keysym = 0xFE05 +let _ISO_Group_Shift : keysym = 0xFF7E +let _ISO_Group_Latch : keysym = 0xFE06 +let _ISO_Group_Lock : keysym = 0xFE07 +let _ISO_Next_Group : keysym = 0xFE08 +let _ISO_Next_Group_Lock : keysym = 0xFE09 +let _ISO_Prev_Group : keysym = 0xFE0A +let _ISO_Prev_Group_Lock : keysym = 0xFE0B +let _ISO_First_Group : keysym = 0xFE0C +let _ISO_First_Group_Lock : keysym = 0xFE0D +let _ISO_Last_Group : keysym = 0xFE0E +let _ISO_Last_Group_Lock : keysym = 0xFE0F +let _ISO_Left_Tab : keysym = 0xFE20 +let _ISO_Move_Line_Up : keysym = 0xFE21 +let _ISO_Move_Line_Down : keysym = 0xFE22 +let _ISO_Partial_Line_Up : keysym = 0xFE23 +let _ISO_Partial_Line_Down : keysym = 0xFE24 +let _ISO_Partial_Space_Left : keysym = 0xFE25 +let _ISO_Partial_Space_Right : keysym = 0xFE26 +let _ISO_Set_Margin_Left : keysym = 0xFE27 +let _ISO_Set_Margin_Right : keysym = 0xFE28 +let _ISO_Release_Margin_Left : keysym = 0xFE29 +let _ISO_Release_Margin_Right : keysym = 0xFE2A +let _ISO_Release_Both_Margins : keysym = 0xFE2B +let _ISO_Fast_Cursor_Left : keysym = 0xFE2C +let _ISO_Fast_Cursor_Right : keysym = 0xFE2D +let _ISO_Fast_Cursor_Up : keysym = 0xFE2E +let _ISO_Fast_Cursor_Down : keysym = 0xFE2F +let _ISO_Continuous_Underline : keysym = 0xFE30 +let _ISO_Discontinuous_Underline : keysym = 0xFE31 +let _ISO_Emphasize : keysym = 0xFE32 +let _ISO_Center_Object : keysym = 0xFE33 +let _ISO_Enter : keysym = 0xFE34 +let _dead_grave : keysym = 0xFE50 +let _dead_acute : keysym = 0xFE51 +let _dead_circumflex : keysym = 0xFE52 +let _dead_tilde : keysym = 0xFE53 +let _dead_macron : keysym = 0xFE54 +let _dead_breve : keysym = 0xFE55 +let _dead_abovedot : keysym = 0xFE56 +let _dead_diaeresis : keysym = 0xFE57 +let _dead_abovering : keysym = 0xFE58 +let _dead_doubleacute : keysym = 0xFE59 +let _dead_caron : keysym = 0xFE5A +let _dead_cedilla : keysym = 0xFE5B +let _dead_ogonek : keysym = 0xFE5C +let _dead_iota : keysym = 0xFE5D +let _dead_voiced_sound : keysym = 0xFE5E +let _dead_semivoiced_sound : keysym = 0xFE5F +let _dead_belowdot : keysym = 0xFE60 +let _First_Virtual_Screen : keysym = 0xFED0 +let _Prev_Virtual_Screen : keysym = 0xFED1 +let _Next_Virtual_Screen : keysym = 0xFED2 +let _Last_Virtual_Screen : keysym = 0xFED4 +let _Terminate_Server : keysym = 0xFED5 +let _AccessX_Enable : keysym = 0xFE70 +let _AccessX_Feedback_Enable : keysym = 0xFE71 +let _RepeatKeys_Enable : keysym = 0xFE72 +let _SlowKeys_Enable : keysym = 0xFE73 +let _BounceKeys_Enable : keysym = 0xFE74 +let _StickyKeys_Enable : keysym = 0xFE75 +let _MouseKeys_Enable : keysym = 0xFE76 +let _MouseKeys_Accel_Enable : keysym = 0xFE77 +let _Overlay1_Enable : keysym = 0xFE78 +let _Overlay2_Enable : keysym = 0xFE79 +let _AudibleBell_Enable : keysym = 0xFE7A +let _Pointer_Left : keysym = 0xFEE0 +let _Pointer_Right : keysym = 0xFEE1 +let _Pointer_Up : keysym = 0xFEE2 +let _Pointer_Down : keysym = 0xFEE3 +let _Pointer_UpLeft : keysym = 0xFEE4 +let _Pointer_UpRight : keysym = 0xFEE5 +let _Pointer_DownLeft : keysym = 0xFEE6 +let _Pointer_DownRight : keysym = 0xFEE7 +let _Pointer_Button_Dflt : keysym = 0xFEE8 +let _Pointer_Button1 : keysym = 0xFEE9 +let _Pointer_Button2 : keysym = 0xFEEA +let _Pointer_Button3 : keysym = 0xFEEB +let _Pointer_Button4 : keysym = 0xFEEC +let _Pointer_Button5 : keysym = 0xFEED +let _Pointer_DblClick_Dflt : keysym = 0xFEEE +let _Pointer_DblClick1 : keysym = 0xFEEF +let _Pointer_DblClick2 : keysym = 0xFEF0 +let _Pointer_DblClick3 : keysym = 0xFEF1 +let _Pointer_DblClick4 : keysym = 0xFEF2 +let _Pointer_DblClick5 : keysym = 0xFEF3 +let _Pointer_Drag_Dflt : keysym = 0xFEF4 +let _Pointer_Drag1 : keysym = 0xFEF5 +let _Pointer_Drag2 : keysym = 0xFEF6 +let _Pointer_Drag3 : keysym = 0xFEF7 +let _Pointer_Drag4 : keysym = 0xFEF8 +let _Pointer_Drag5 : keysym = 0xFEFD +let _Pointer_EnableKeys : keysym = 0xFEF9 +let _Pointer_Accelerate : keysym = 0xFEFA +let _Pointer_DfltBtnNext : keysym = 0xFEFB +let _Pointer_DfltBtnPrev : keysym = 0xFEFC +let _3270_Duplicate : keysym = 0xFD01 +let _3270_FieldMark : keysym = 0xFD02 +let _3270_Right2 : keysym = 0xFD03 +let _3270_Left2 : keysym = 0xFD04 +let _3270_BackTab : keysym = 0xFD05 +let _3270_EraseEOF : keysym = 0xFD06 +let _3270_EraseInput : keysym = 0xFD07 +let _3270_Reset : keysym = 0xFD08 +let _3270_Quit : keysym = 0xFD09 +let _3270_PA1 : keysym = 0xFD0A +let _3270_PA2 : keysym = 0xFD0B +let _3270_PA3 : keysym = 0xFD0C +let _3270_Test : keysym = 0xFD0D +let _3270_Attn : keysym = 0xFD0E +let _3270_CursorBlink : keysym = 0xFD0F +let _3270_AltCursor : keysym = 0xFD10 +let _3270_KeyClick : keysym = 0xFD11 +let _3270_Jump : keysym = 0xFD12 +let _3270_Ident : keysym = 0xFD13 +let _3270_Rule : keysym = 0xFD14 +let _3270_Copy : keysym = 0xFD15 +let _3270_Play : keysym = 0xFD16 +let _3270_Setup : keysym = 0xFD17 +let _3270_Record : keysym = 0xFD18 +let _3270_ChangeScreen : keysym = 0xFD19 +let _3270_DeleteWord : keysym = 0xFD1A +let _3270_ExSelect : keysym = 0xFD1B +let _3270_CursorSelect : keysym = 0xFD1C +let _3270_PrintScreen : keysym = 0xFD1D +let _3270_Enter : keysym = 0xFD1E +let _space : keysym = 0x020 +let _exclam : keysym = 0x021 +let _quotedbl : keysym = 0x022 +let _numbersign : keysym = 0x023 +let _dollar : keysym = 0x024 +let _percent : keysym = 0x025 +let _ampersand : keysym = 0x026 +let _apostrophe : keysym = 0x027 +let _quoteright : keysym = 0x027 +let _parenleft : keysym = 0x028 +let _parenright : keysym = 0x029 +let _asterisk : keysym = 0x02a +let _plus : keysym = 0x02b +let _comma : keysym = 0x02c +let _minus : keysym = 0x02d +let _period : keysym = 0x02e +let _slash : keysym = 0x02f +let _0 : keysym = 0x030 +let _1 : keysym = 0x031 +let _2 : keysym = 0x032 +let _3 : keysym = 0x033 +let _4 : keysym = 0x034 +let _5 : keysym = 0x035 +let _6 : keysym = 0x036 +let _7 : keysym = 0x037 +let _8 : keysym = 0x038 +let _9 : keysym = 0x039 +let _colon : keysym = 0x03a +let _semicolon : keysym = 0x03b +let _less : keysym = 0x03c +let _equal : keysym = 0x03d +let _greater : keysym = 0x03e +let _question : keysym = 0x03f +let _at : keysym = 0x040 +let _A : keysym = 0x041 +let _B : keysym = 0x042 +let _C : keysym = 0x043 +let _D : keysym = 0x044 +let _E : keysym = 0x045 +let _F : keysym = 0x046 +let _G : keysym = 0x047 +let _H : keysym = 0x048 +let _I : keysym = 0x049 +let _J : keysym = 0x04a +let _K : keysym = 0x04b +let _L : keysym = 0x04c +let _M : keysym = 0x04d +let _N : keysym = 0x04e +let _O : keysym = 0x04f +let _P : keysym = 0x050 +let _Q : keysym = 0x051 +let _R : keysym = 0x052 +let _S : keysym = 0x053 +let _T : keysym = 0x054 +let _U : keysym = 0x055 +let _V : keysym = 0x056 +let _W : keysym = 0x057 +let _X : keysym = 0x058 +let _Y : keysym = 0x059 +let _Z : keysym = 0x05a +let _bracketleft : keysym = 0x05b +let _backslash : keysym = 0x05c +let _bracketright : keysym = 0x05d +let _asciicircum : keysym = 0x05e +let _underscore : keysym = 0x05f +let _grave : keysym = 0x060 +let _quoteleft : keysym = 0x060 +let _a : keysym = 0x061 +let _b : keysym = 0x062 +let _c : keysym = 0x063 +let _d : keysym = 0x064 +let _e : keysym = 0x065 +let _f : keysym = 0x066 +let _g : keysym = 0x067 +let _h : keysym = 0x068 +let _i : keysym = 0x069 +let _j : keysym = 0x06a +let _k : keysym = 0x06b +let _l : keysym = 0x06c +let _m : keysym = 0x06d +let _n : keysym = 0x06e +let _o : keysym = 0x06f +let _p : keysym = 0x070 +let _q : keysym = 0x071 +let _r : keysym = 0x072 +let _s : keysym = 0x073 +let _t : keysym = 0x074 +let _u : keysym = 0x075 +let _v : keysym = 0x076 +let _w : keysym = 0x077 +let _x : keysym = 0x078 +let _y : keysym = 0x079 +let _z : keysym = 0x07a +let _braceleft : keysym = 0x07b +let _bar : keysym = 0x07c +let _braceright : keysym = 0x07d +let _asciitilde : keysym = 0x07e +let _nobreakspace : keysym = 0x0a0 +let _exclamdown : keysym = 0x0a1 +let _cent : keysym = 0x0a2 +let _sterling : keysym = 0x0a3 +let _currency : keysym = 0x0a4 +let _yen : keysym = 0x0a5 +let _brokenbar : keysym = 0x0a6 +let _section : keysym = 0x0a7 +let _diaeresis : keysym = 0x0a8 +let _copyright : keysym = 0x0a9 +let _ordfeminine : keysym = 0x0aa +let _guillemotleft : keysym = 0x0ab +let _notsign : keysym = 0x0ac +let _hyphen : keysym = 0x0ad +let _registered : keysym = 0x0ae +let _macron : keysym = 0x0af +let _degree : keysym = 0x0b0 +let _plusminus : keysym = 0x0b1 +let _twosuperior : keysym = 0x0b2 +let _threesuperior : keysym = 0x0b3 +let _acute : keysym = 0x0b4 +let _mu : keysym = 0x0b5 +let _paragraph : keysym = 0x0b6 +let _periodcentered : keysym = 0x0b7 +let _cedilla : keysym = 0x0b8 +let _onesuperior : keysym = 0x0b9 +let _masculine : keysym = 0x0ba +let _guillemotright : keysym = 0x0bb +let _onequarter : keysym = 0x0bc +let _onehalf : keysym = 0x0bd +let _threequarters : keysym = 0x0be +let _questiondown : keysym = 0x0bf +let _Agrave : keysym = 0x0c0 +let _Aacute : keysym = 0x0c1 +let _Acircumflex : keysym = 0x0c2 +let _Atilde : keysym = 0x0c3 +let _Adiaeresis : keysym = 0x0c4 +let _Aring : keysym = 0x0c5 +let _AE : keysym = 0x0c6 +let _Ccedilla : keysym = 0x0c7 +let _Egrave : keysym = 0x0c8 +let _Eacute : keysym = 0x0c9 +let _Ecircumflex : keysym = 0x0ca +let _Ediaeresis : keysym = 0x0cb +let _Igrave : keysym = 0x0cc +let _Iacute : keysym = 0x0cd +let _Icircumflex : keysym = 0x0ce +let _Idiaeresis : keysym = 0x0cf +let _ETH : keysym = 0x0d0 +let _Eth : keysym = 0x0d0 +let _Ntilde : keysym = 0x0d1 +let _Ograve : keysym = 0x0d2 +let _Oacute : keysym = 0x0d3 +let _Ocircumflex : keysym = 0x0d4 +let _Otilde : keysym = 0x0d5 +let _Odiaeresis : keysym = 0x0d6 +let _multiply : keysym = 0x0d7 +let _Ooblique : keysym = 0x0d8 +let _Ugrave : keysym = 0x0d9 +let _Uacute : keysym = 0x0da +let _Ucircumflex : keysym = 0x0db +let _Udiaeresis : keysym = 0x0dc +let _Yacute : keysym = 0x0dd +let _THORN : keysym = 0x0de +let _Thorn : keysym = 0x0de +let _ssharp : keysym = 0x0df +let _agrave : keysym = 0x0e0 +let _aacute : keysym = 0x0e1 +let _acircumflex : keysym = 0x0e2 +let _atilde : keysym = 0x0e3 +let _adiaeresis : keysym = 0x0e4 +let _aring : keysym = 0x0e5 +let _ae : keysym = 0x0e6 +let _ccedilla : keysym = 0x0e7 +let _egrave : keysym = 0x0e8 +let _eacute : keysym = 0x0e9 +let _ecircumflex : keysym = 0x0ea +let _ediaeresis : keysym = 0x0eb +let _igrave : keysym = 0x0ec +let _iacute : keysym = 0x0ed +let _icircumflex : keysym = 0x0ee +let _idiaeresis : keysym = 0x0ef +let _eth : keysym = 0x0f0 +let _ntilde : keysym = 0x0f1 +let _ograve : keysym = 0x0f2 +let _oacute : keysym = 0x0f3 +let _ocircumflex : keysym = 0x0f4 +let _otilde : keysym = 0x0f5 +let _odiaeresis : keysym = 0x0f6 +let _division : keysym = 0x0f7 +let _oslash : keysym = 0x0f8 +let _ugrave : keysym = 0x0f9 +let _uacute : keysym = 0x0fa +let _ucircumflex : keysym = 0x0fb +let _udiaeresis : keysym = 0x0fc +let _yacute : keysym = 0x0fd +let _thorn : keysym = 0x0fe +let _ydiaeresis : keysym = 0x0ff +let _Aogonek : keysym = 0x1a1 +let _breve : keysym = 0x1a2 +let _Lstroke : keysym = 0x1a3 +let _Lcaron : keysym = 0x1a5 +let _Sacute : keysym = 0x1a6 +let _Scaron : keysym = 0x1a9 +let _Scedilla : keysym = 0x1aa +let _Tcaron : keysym = 0x1ab +let _Zacute : keysym = 0x1ac +let _Zcaron : keysym = 0x1ae +let _Zabovedot : keysym = 0x1af +let _aogonek : keysym = 0x1b1 +let _ogonek : keysym = 0x1b2 +let _lstroke : keysym = 0x1b3 +let _lcaron : keysym = 0x1b5 +let _sacute : keysym = 0x1b6 +let _caron : keysym = 0x1b7 +let _scaron : keysym = 0x1b9 +let _scedilla : keysym = 0x1ba +let _tcaron : keysym = 0x1bb +let _zacute : keysym = 0x1bc +let _doubleacute : keysym = 0x1bd +let _zcaron : keysym = 0x1be +let _zabovedot : keysym = 0x1bf +let _Racute : keysym = 0x1c0 +let _Abreve : keysym = 0x1c3 +let _Lacute : keysym = 0x1c5 +let _Cacute : keysym = 0x1c6 +let _Ccaron : keysym = 0x1c8 +let _Eogonek : keysym = 0x1ca +let _Ecaron : keysym = 0x1cc +let _Dcaron : keysym = 0x1cf +let _Dstroke : keysym = 0x1d0 +let _Nacute : keysym = 0x1d1 +let _Ncaron : keysym = 0x1d2 +let _Odoubleacute : keysym = 0x1d5 +let _Rcaron : keysym = 0x1d8 +let _Uring : keysym = 0x1d9 +let _Udoubleacute : keysym = 0x1db +let _Tcedilla : keysym = 0x1de +let _racute : keysym = 0x1e0 +let _abreve : keysym = 0x1e3 +let _lacute : keysym = 0x1e5 +let _cacute : keysym = 0x1e6 +let _ccaron : keysym = 0x1e8 +let _eogonek : keysym = 0x1ea +let _ecaron : keysym = 0x1ec +let _dcaron : keysym = 0x1ef +let _dstroke : keysym = 0x1f0 +let _nacute : keysym = 0x1f1 +let _ncaron : keysym = 0x1f2 +let _odoubleacute : keysym = 0x1f5 +let _udoubleacute : keysym = 0x1fb +let _rcaron : keysym = 0x1f8 +let _uring : keysym = 0x1f9 +let _tcedilla : keysym = 0x1fe +let _abovedot : keysym = 0x1ff +let _Hstroke : keysym = 0x2a1 +let _Hcircumflex : keysym = 0x2a6 +let _Iabovedot : keysym = 0x2a9 +let _Gbreve : keysym = 0x2ab +let _Jcircumflex : keysym = 0x2ac +let _hstroke : keysym = 0x2b1 +let _hcircumflex : keysym = 0x2b6 +let _idotless : keysym = 0x2b9 +let _gbreve : keysym = 0x2bb +let _jcircumflex : keysym = 0x2bc +let _Cabovedot : keysym = 0x2c5 +let _Ccircumflex : keysym = 0x2c6 +let _Gabovedot : keysym = 0x2d5 +let _Gcircumflex : keysym = 0x2d8 +let _Ubreve : keysym = 0x2dd +let _Scircumflex : keysym = 0x2de +let _cabovedot : keysym = 0x2e5 +let _ccircumflex : keysym = 0x2e6 +let _gabovedot : keysym = 0x2f5 +let _gcircumflex : keysym = 0x2f8 +let _ubreve : keysym = 0x2fd +let _scircumflex : keysym = 0x2fe +let _kra : keysym = 0x3a2 +let _kappa : keysym = 0x3a2 +let _Rcedilla : keysym = 0x3a3 +let _Itilde : keysym = 0x3a5 +let _Lcedilla : keysym = 0x3a6 +let _Emacron : keysym = 0x3aa +let _Gcedilla : keysym = 0x3ab +let _Tslash : keysym = 0x3ac +let _rcedilla : keysym = 0x3b3 +let _itilde : keysym = 0x3b5 +let _lcedilla : keysym = 0x3b6 +let _emacron : keysym = 0x3ba +let _gcedilla : keysym = 0x3bb +let _tslash : keysym = 0x3bc +let _ENG : keysym = 0x3bd +let _eng : keysym = 0x3bf +let _Amacron : keysym = 0x3c0 +let _Iogonek : keysym = 0x3c7 +let _Eabovedot : keysym = 0x3cc +let _Imacron : keysym = 0x3cf +let _Ncedilla : keysym = 0x3d1 +let _Omacron : keysym = 0x3d2 +let _Kcedilla : keysym = 0x3d3 +let _Uogonek : keysym = 0x3d9 +let _Utilde : keysym = 0x3dd +let _Umacron : keysym = 0x3de +let _amacron : keysym = 0x3e0 +let _iogonek : keysym = 0x3e7 +let _eabovedot : keysym = 0x3ec +let _imacron : keysym = 0x3ef +let _ncedilla : keysym = 0x3f1 +let _omacron : keysym = 0x3f2 +let _kcedilla : keysym = 0x3f3 +let _uogonek : keysym = 0x3f9 +let _utilde : keysym = 0x3fd +let _umacron : keysym = 0x3fe +let _overline : keysym = 0x47e +let _kana_fullstop : keysym = 0x4a1 +let _kana_openingbracket : keysym = 0x4a2 +let _kana_closingbracket : keysym = 0x4a3 +let _kana_comma : keysym = 0x4a4 +let _kana_conjunctive : keysym = 0x4a5 +let _kana_middledot : keysym = 0x4a5 +let _kana_WO : keysym = 0x4a6 +let _kana_a : keysym = 0x4a7 +let _kana_i : keysym = 0x4a8 +let _kana_u : keysym = 0x4a9 +let _kana_e : keysym = 0x4aa +let _kana_o : keysym = 0x4ab +let _kana_ya : keysym = 0x4ac +let _kana_yu : keysym = 0x4ad +let _kana_yo : keysym = 0x4ae +let _kana_tsu : keysym = 0x4af +let _kana_tu : keysym = 0x4af +let _prolongedsound : keysym = 0x4b0 +let _kana_A : keysym = 0x4b1 +let _kana_I : keysym = 0x4b2 +let _kana_U : keysym = 0x4b3 +let _kana_E : keysym = 0x4b4 +let _kana_O : keysym = 0x4b5 +let _kana_KA : keysym = 0x4b6 +let _kana_KI : keysym = 0x4b7 +let _kana_KU : keysym = 0x4b8 +let _kana_KE : keysym = 0x4b9 +let _kana_KO : keysym = 0x4ba +let _kana_SA : keysym = 0x4bb +let _kana_SHI : keysym = 0x4bc +let _kana_SU : keysym = 0x4bd +let _kana_SE : keysym = 0x4be +let _kana_SO : keysym = 0x4bf +let _kana_TA : keysym = 0x4c0 +let _kana_CHI : keysym = 0x4c1 +let _kana_TI : keysym = 0x4c1 +let _kana_TSU : keysym = 0x4c2 +let _kana_TU : keysym = 0x4c2 +let _kana_TE : keysym = 0x4c3 +let _kana_TO : keysym = 0x4c4 +let _kana_NA : keysym = 0x4c5 +let _kana_NI : keysym = 0x4c6 +let _kana_NU : keysym = 0x4c7 +let _kana_NE : keysym = 0x4c8 +let _kana_NO : keysym = 0x4c9 +let _kana_HA : keysym = 0x4ca +let _kana_HI : keysym = 0x4cb +let _kana_FU : keysym = 0x4cc +let _kana_HU : keysym = 0x4cc +let _kana_HE : keysym = 0x4cd +let _kana_HO : keysym = 0x4ce +let _kana_MA : keysym = 0x4cf +let _kana_MI : keysym = 0x4d0 +let _kana_MU : keysym = 0x4d1 +let _kana_ME : keysym = 0x4d2 +let _kana_MO : keysym = 0x4d3 +let _kana_YA : keysym = 0x4d4 +let _kana_YU : keysym = 0x4d5 +let _kana_YO : keysym = 0x4d6 +let _kana_RA : keysym = 0x4d7 +let _kana_RI : keysym = 0x4d8 +let _kana_RU : keysym = 0x4d9 +let _kana_RE : keysym = 0x4da +let _kana_RO : keysym = 0x4db +let _kana_WA : keysym = 0x4dc +let _kana_N : keysym = 0x4dd +let _voicedsound : keysym = 0x4de +let _semivoicedsound : keysym = 0x4df +let _kana_switch : keysym = 0xFF7E +let _Arabic_comma : keysym = 0x5ac +let _Arabic_semicolon : keysym = 0x5bb +let _Arabic_question_mark : keysym = 0x5bf +let _Arabic_hamza : keysym = 0x5c1 +let _Arabic_maddaonalef : keysym = 0x5c2 +let _Arabic_hamzaonalef : keysym = 0x5c3 +let _Arabic_hamzaonwaw : keysym = 0x5c4 +let _Arabic_hamzaunderalef : keysym = 0x5c5 +let _Arabic_hamzaonyeh : keysym = 0x5c6 +let _Arabic_alef : keysym = 0x5c7 +let _Arabic_beh : keysym = 0x5c8 +let _Arabic_tehmarbuta : keysym = 0x5c9 +let _Arabic_teh : keysym = 0x5ca +let _Arabic_theh : keysym = 0x5cb +let _Arabic_jeem : keysym = 0x5cc +let _Arabic_hah : keysym = 0x5cd +let _Arabic_khah : keysym = 0x5ce +let _Arabic_dal : keysym = 0x5cf +let _Arabic_thal : keysym = 0x5d0 +let _Arabic_ra : keysym = 0x5d1 +let _Arabic_zain : keysym = 0x5d2 +let _Arabic_seen : keysym = 0x5d3 +let _Arabic_sheen : keysym = 0x5d4 +let _Arabic_sad : keysym = 0x5d5 +let _Arabic_dad : keysym = 0x5d6 +let _Arabic_tah : keysym = 0x5d7 +let _Arabic_zah : keysym = 0x5d8 +let _Arabic_ain : keysym = 0x5d9 +let _Arabic_ghain : keysym = 0x5da +let _Arabic_tatweel : keysym = 0x5e0 +let _Arabic_feh : keysym = 0x5e1 +let _Arabic_qaf : keysym = 0x5e2 +let _Arabic_kaf : keysym = 0x5e3 +let _Arabic_lam : keysym = 0x5e4 +let _Arabic_meem : keysym = 0x5e5 +let _Arabic_noon : keysym = 0x5e6 +let _Arabic_ha : keysym = 0x5e7 +let _Arabic_heh : keysym = 0x5e7 +let _Arabic_waw : keysym = 0x5e8 +let _Arabic_alefmaksura : keysym = 0x5e9 +let _Arabic_yeh : keysym = 0x5ea +let _Arabic_fathatan : keysym = 0x5eb +let _Arabic_dammatan : keysym = 0x5ec +let _Arabic_kasratan : keysym = 0x5ed +let _Arabic_fatha : keysym = 0x5ee +let _Arabic_damma : keysym = 0x5ef +let _Arabic_kasra : keysym = 0x5f0 +let _Arabic_shadda : keysym = 0x5f1 +let _Arabic_sukun : keysym = 0x5f2 +let _Arabic_switch : keysym = 0xFF7E +let _Serbian_dje : keysym = 0x6a1 +let _Macedonia_gje : keysym = 0x6a2 +let _Cyrillic_io : keysym = 0x6a3 +let _Ukrainian_ie : keysym = 0x6a4 +let _Ukranian_je : keysym = 0x6a4 +let _Macedonia_dse : keysym = 0x6a5 +let _Ukrainian_i : keysym = 0x6a6 +let _Ukranian_i : keysym = 0x6a6 +let _Ukrainian_yi : keysym = 0x6a7 +let _Ukranian_yi : keysym = 0x6a7 +let _Cyrillic_je : keysym = 0x6a8 +let _Serbian_je : keysym = 0x6a8 +let _Cyrillic_lje : keysym = 0x6a9 +let _Serbian_lje : keysym = 0x6a9 +let _Cyrillic_nje : keysym = 0x6aa +let _Serbian_nje : keysym = 0x6aa +let _Serbian_tshe : keysym = 0x6ab +let _Macedonia_kje : keysym = 0x6ac +let _Byelorussian_shortu : keysym = 0x6ae +let _Cyrillic_dzhe : keysym = 0x6af +let _Serbian_dze : keysym = 0x6af +let _numerosign : keysym = 0x6b0 +let _Serbian_DJE : keysym = 0x6b1 +let _Macedonia_GJE : keysym = 0x6b2 +let _Cyrillic_IO : keysym = 0x6b3 +let _Ukrainian_IE : keysym = 0x6b4 +let _Ukranian_JE : keysym = 0x6b4 +let _Macedonia_DSE : keysym = 0x6b5 +let _Ukrainian_I : keysym = 0x6b6 +let _Ukranian_I : keysym = 0x6b6 +let _Ukrainian_YI : keysym = 0x6b7 +let _Ukranian_YI : keysym = 0x6b7 +let _Cyrillic_JE : keysym = 0x6b8 +let _Serbian_JE : keysym = 0x6b8 +let _Cyrillic_LJE : keysym = 0x6b9 +let _Serbian_LJE : keysym = 0x6b9 +let _Cyrillic_NJE : keysym = 0x6ba +let _Serbian_NJE : keysym = 0x6ba +let _Serbian_TSHE : keysym = 0x6bb +let _Macedonia_KJE : keysym = 0x6bc +let _Byelorussian_SHORTU : keysym = 0x6be +let _Cyrillic_DZHE : keysym = 0x6bf +let _Serbian_DZE : keysym = 0x6bf +let _Cyrillic_yu : keysym = 0x6c0 +let _Cyrillic_a : keysym = 0x6c1 +let _Cyrillic_be : keysym = 0x6c2 +let _Cyrillic_tse : keysym = 0x6c3 +let _Cyrillic_de : keysym = 0x6c4 +let _Cyrillic_ie : keysym = 0x6c5 +let _Cyrillic_ef : keysym = 0x6c6 +let _Cyrillic_ghe : keysym = 0x6c7 +let _Cyrillic_ha : keysym = 0x6c8 +let _Cyrillic_i : keysym = 0x6c9 +let _Cyrillic_shorti : keysym = 0x6ca +let _Cyrillic_ka : keysym = 0x6cb +let _Cyrillic_el : keysym = 0x6cc +let _Cyrillic_em : keysym = 0x6cd +let _Cyrillic_en : keysym = 0x6ce +let _Cyrillic_o : keysym = 0x6cf +let _Cyrillic_pe : keysym = 0x6d0 +let _Cyrillic_ya : keysym = 0x6d1 +let _Cyrillic_er : keysym = 0x6d2 +let _Cyrillic_es : keysym = 0x6d3 +let _Cyrillic_te : keysym = 0x6d4 +let _Cyrillic_u : keysym = 0x6d5 +let _Cyrillic_zhe : keysym = 0x6d6 +let _Cyrillic_ve : keysym = 0x6d7 +let _Cyrillic_softsign : keysym = 0x6d8 +let _Cyrillic_yeru : keysym = 0x6d9 +let _Cyrillic_ze : keysym = 0x6da +let _Cyrillic_sha : keysym = 0x6db +let _Cyrillic_e : keysym = 0x6dc +let _Cyrillic_shcha : keysym = 0x6dd +let _Cyrillic_che : keysym = 0x6de +let _Cyrillic_hardsign : keysym = 0x6df +let _Cyrillic_YU : keysym = 0x6e0 +let _Cyrillic_A : keysym = 0x6e1 +let _Cyrillic_BE : keysym = 0x6e2 +let _Cyrillic_TSE : keysym = 0x6e3 +let _Cyrillic_DE : keysym = 0x6e4 +let _Cyrillic_IE : keysym = 0x6e5 +let _Cyrillic_EF : keysym = 0x6e6 +let _Cyrillic_GHE : keysym = 0x6e7 +let _Cyrillic_HA : keysym = 0x6e8 +let _Cyrillic_I : keysym = 0x6e9 +let _Cyrillic_SHORTI : keysym = 0x6ea +let _Cyrillic_KA : keysym = 0x6eb +let _Cyrillic_EL : keysym = 0x6ec +let _Cyrillic_EM : keysym = 0x6ed +let _Cyrillic_EN : keysym = 0x6ee +let _Cyrillic_O : keysym = 0x6ef +let _Cyrillic_PE : keysym = 0x6f0 +let _Cyrillic_YA : keysym = 0x6f1 +let _Cyrillic_ER : keysym = 0x6f2 +let _Cyrillic_ES : keysym = 0x6f3 +let _Cyrillic_TE : keysym = 0x6f4 +let _Cyrillic_U : keysym = 0x6f5 +let _Cyrillic_ZHE : keysym = 0x6f6 +let _Cyrillic_VE : keysym = 0x6f7 +let _Cyrillic_SOFTSIGN : keysym = 0x6f8 +let _Cyrillic_YERU : keysym = 0x6f9 +let _Cyrillic_ZE : keysym = 0x6fa +let _Cyrillic_SHA : keysym = 0x6fb +let _Cyrillic_E : keysym = 0x6fc +let _Cyrillic_SHCHA : keysym = 0x6fd +let _Cyrillic_CHE : keysym = 0x6fe +let _Cyrillic_HARDSIGN : keysym = 0x6ff +let _Greek_ALPHAaccent : keysym = 0x7a1 +let _Greek_EPSILONaccent : keysym = 0x7a2 +let _Greek_ETAaccent : keysym = 0x7a3 +let _Greek_IOTAaccent : keysym = 0x7a4 +let _Greek_IOTAdiaeresis : keysym = 0x7a5 +let _Greek_OMICRONaccent : keysym = 0x7a7 +let _Greek_UPSILONaccent : keysym = 0x7a8 +let _Greek_UPSILONdieresis : keysym = 0x7a9 +let _Greek_OMEGAaccent : keysym = 0x7ab +let _Greek_accentdieresis : keysym = 0x7ae +let _Greek_horizbar : keysym = 0x7af +let _Greek_alphaaccent : keysym = 0x7b1 +let _Greek_epsilonaccent : keysym = 0x7b2 +let _Greek_etaaccent : keysym = 0x7b3 +let _Greek_iotaaccent : keysym = 0x7b4 +let _Greek_iotadieresis : keysym = 0x7b5 +let _Greek_iotaaccentdieresis : keysym = 0x7b6 +let _Greek_omicronaccent : keysym = 0x7b7 +let _Greek_upsilonaccent : keysym = 0x7b8 +let _Greek_upsilondieresis : keysym = 0x7b9 +let _Greek_upsilonaccentdieresis : keysym = 0x7ba +let _Greek_omegaaccent : keysym = 0x7bb +let _Greek_ALPHA : keysym = 0x7c1 +let _Greek_BETA : keysym = 0x7c2 +let _Greek_GAMMA : keysym = 0x7c3 +let _Greek_DELTA : keysym = 0x7c4 +let _Greek_EPSILON : keysym = 0x7c5 +let _Greek_ZETA : keysym = 0x7c6 +let _Greek_ETA : keysym = 0x7c7 +let _Greek_THETA : keysym = 0x7c8 +let _Greek_IOTA : keysym = 0x7c9 +let _Greek_KAPPA : keysym = 0x7ca +let _Greek_LAMDA : keysym = 0x7cb +let _Greek_LAMBDA : keysym = 0x7cb +let _Greek_MU : keysym = 0x7cc +let _Greek_NU : keysym = 0x7cd +let _Greek_XI : keysym = 0x7ce +let _Greek_OMICRON : keysym = 0x7cf +let _Greek_PI : keysym = 0x7d0 +let _Greek_RHO : keysym = 0x7d1 +let _Greek_SIGMA : keysym = 0x7d2 +let _Greek_TAU : keysym = 0x7d4 +let _Greek_UPSILON : keysym = 0x7d5 +let _Greek_PHI : keysym = 0x7d6 +let _Greek_CHI : keysym = 0x7d7 +let _Greek_PSI : keysym = 0x7d8 +let _Greek_OMEGA : keysym = 0x7d9 +let _Greek_alpha : keysym = 0x7e1 +let _Greek_beta : keysym = 0x7e2 +let _Greek_gamma : keysym = 0x7e3 +let _Greek_delta : keysym = 0x7e4 +let _Greek_epsilon : keysym = 0x7e5 +let _Greek_zeta : keysym = 0x7e6 +let _Greek_eta : keysym = 0x7e7 +let _Greek_theta : keysym = 0x7e8 +let _Greek_iota : keysym = 0x7e9 +let _Greek_kappa : keysym = 0x7ea +let _Greek_lamda : keysym = 0x7eb +let _Greek_lambda : keysym = 0x7eb +let _Greek_mu : keysym = 0x7ec +let _Greek_nu : keysym = 0x7ed +let _Greek_xi : keysym = 0x7ee +let _Greek_omicron : keysym = 0x7ef +let _Greek_pi : keysym = 0x7f0 +let _Greek_rho : keysym = 0x7f1 +let _Greek_sigma : keysym = 0x7f2 +let _Greek_finalsmallsigma : keysym = 0x7f3 +let _Greek_tau : keysym = 0x7f4 +let _Greek_upsilon : keysym = 0x7f5 +let _Greek_phi : keysym = 0x7f6 +let _Greek_chi : keysym = 0x7f7 +let _Greek_psi : keysym = 0x7f8 +let _Greek_omega : keysym = 0x7f9 +let _Greek_switch : keysym = 0xFF7E +let _leftradical : keysym = 0x8a1 +let _topleftradical : keysym = 0x8a2 +let _horizconnector : keysym = 0x8a3 +let _topintegral : keysym = 0x8a4 +let _botintegral : keysym = 0x8a5 +let _vertconnector : keysym = 0x8a6 +let _topleftsqbracket : keysym = 0x8a7 +let _botleftsqbracket : keysym = 0x8a8 +let _toprightsqbracket : keysym = 0x8a9 +let _botrightsqbracket : keysym = 0x8aa +let _topleftparens : keysym = 0x8ab +let _botleftparens : keysym = 0x8ac +let _toprightparens : keysym = 0x8ad +let _botrightparens : keysym = 0x8ae +let _leftmiddlecurlybrace : keysym = 0x8af +let _rightmiddlecurlybrace : keysym = 0x8b0 +let _topleftsummation : keysym = 0x8b1 +let _botleftsummation : keysym = 0x8b2 +let _topvertsummationconnector : keysym = 0x8b3 +let _botvertsummationconnector : keysym = 0x8b4 +let _toprightsummation : keysym = 0x8b5 +let _botrightsummation : keysym = 0x8b6 +let _rightmiddlesummation : keysym = 0x8b7 +let _lessthanequal : keysym = 0x8bc +let _notequal : keysym = 0x8bd +let _greaterthanequal : keysym = 0x8be +let _integral : keysym = 0x8bf +let _therefore : keysym = 0x8c0 +let _variation : keysym = 0x8c1 +let _infinity : keysym = 0x8c2 +let _nabla : keysym = 0x8c5 +let _approximate : keysym = 0x8c8 +let _similarequal : keysym = 0x8c9 +let _ifonlyif : keysym = 0x8cd +let _implies : keysym = 0x8ce +let _identical : keysym = 0x8cf +let _radical : keysym = 0x8d6 +let _includedin : keysym = 0x8da +let _includes : keysym = 0x8db +let _intersection : keysym = 0x8dc +let _union : keysym = 0x8dd +let _logicaland : keysym = 0x8de +let _logicalor : keysym = 0x8df +let _partialderivative : keysym = 0x8ef +let _function : keysym = 0x8f6 +let _leftarrow : keysym = 0x8fb +let _uparrow : keysym = 0x8fc +let _rightarrow : keysym = 0x8fd +let _downarrow : keysym = 0x8fe +let _blank : keysym = 0x9df +let _soliddiamond : keysym = 0x9e0 +let _checkerboard : keysym = 0x9e1 +let _ht : keysym = 0x9e2 +let _ff : keysym = 0x9e3 +let _cr : keysym = 0x9e4 +let _lf : keysym = 0x9e5 +let _nl : keysym = 0x9e8 +let _vt : keysym = 0x9e9 +let _lowrightcorner : keysym = 0x9ea +let _uprightcorner : keysym = 0x9eb +let _upleftcorner : keysym = 0x9ec +let _lowleftcorner : keysym = 0x9ed +let _crossinglines : keysym = 0x9ee +let _horizlinescan1 : keysym = 0x9ef +let _horizlinescan3 : keysym = 0x9f0 +let _horizlinescan5 : keysym = 0x9f1 +let _horizlinescan7 : keysym = 0x9f2 +let _horizlinescan9 : keysym = 0x9f3 +let _leftt : keysym = 0x9f4 +let _rightt : keysym = 0x9f5 +let _bott : keysym = 0x9f6 +let _topt : keysym = 0x9f7 +let _vertbar : keysym = 0x9f8 +let _emspace : keysym = 0xaa1 +let _enspace : keysym = 0xaa2 +let _em3space : keysym = 0xaa3 +let _em4space : keysym = 0xaa4 +let _digitspace : keysym = 0xaa5 +let _punctspace : keysym = 0xaa6 +let _thinspace : keysym = 0xaa7 +let _hairspace : keysym = 0xaa8 +let _emdash : keysym = 0xaa9 +let _endash : keysym = 0xaaa +let _signifblank : keysym = 0xaac +let _ellipsis : keysym = 0xaae +let _doubbaselinedot : keysym = 0xaaf +let _onethird : keysym = 0xab0 +let _twothirds : keysym = 0xab1 +let _onefifth : keysym = 0xab2 +let _twofifths : keysym = 0xab3 +let _threefifths : keysym = 0xab4 +let _fourfifths : keysym = 0xab5 +let _onesixth : keysym = 0xab6 +let _fivesixths : keysym = 0xab7 +let _careof : keysym = 0xab8 +let _figdash : keysym = 0xabb +let _leftanglebracket : keysym = 0xabc +let _decimalpoint : keysym = 0xabd +let _rightanglebracket : keysym = 0xabe +let _marker : keysym = 0xabf +let _oneeighth : keysym = 0xac3 +let _threeeighths : keysym = 0xac4 +let _fiveeighths : keysym = 0xac5 +let _seveneighths : keysym = 0xac6 +let _trademark : keysym = 0xac9 +let _signaturemark : keysym = 0xaca +let _trademarkincircle : keysym = 0xacb +let _leftopentriangle : keysym = 0xacc +let _rightopentriangle : keysym = 0xacd +let _emopencircle : keysym = 0xace +let _emopenrectangle : keysym = 0xacf +let _leftsinglequotemark : keysym = 0xad0 +let _rightsinglequotemark : keysym = 0xad1 +let _leftdoublequotemark : keysym = 0xad2 +let _rightdoublequotemark : keysym = 0xad3 +let _prescription : keysym = 0xad4 +let _minutes : keysym = 0xad6 +let _seconds : keysym = 0xad7 +let _latincross : keysym = 0xad9 +let _hexagram : keysym = 0xada +let _filledrectbullet : keysym = 0xadb +let _filledlefttribullet : keysym = 0xadc +let _filledrighttribullet : keysym = 0xadd +let _emfilledcircle : keysym = 0xade +let _emfilledrect : keysym = 0xadf +let _enopencircbullet : keysym = 0xae0 +let _enopensquarebullet : keysym = 0xae1 +let _openrectbullet : keysym = 0xae2 +let _opentribulletup : keysym = 0xae3 +let _opentribulletdown : keysym = 0xae4 +let _openstar : keysym = 0xae5 +let _enfilledcircbullet : keysym = 0xae6 +let _enfilledsqbullet : keysym = 0xae7 +let _filledtribulletup : keysym = 0xae8 +let _filledtribulletdown : keysym = 0xae9 +let _leftpointer : keysym = 0xaea +let _rightpointer : keysym = 0xaeb +let _club : keysym = 0xaec +let _diamond : keysym = 0xaed +let _heart : keysym = 0xaee +let _maltesecross : keysym = 0xaf0 +let _dagger : keysym = 0xaf1 +let _doubledagger : keysym = 0xaf2 +let _checkmark : keysym = 0xaf3 +let _ballotcross : keysym = 0xaf4 +let _musicalsharp : keysym = 0xaf5 +let _musicalflat : keysym = 0xaf6 +let _malesymbol : keysym = 0xaf7 +let _femalesymbol : keysym = 0xaf8 +let _telephone : keysym = 0xaf9 +let _telephonerecorder : keysym = 0xafa +let _phonographcopyright : keysym = 0xafb +let _caret : keysym = 0xafc +let _singlelowquotemark : keysym = 0xafd +let _doublelowquotemark : keysym = 0xafe +let _cursor : keysym = 0xaff +let _leftcaret : keysym = 0xba3 +let _rightcaret : keysym = 0xba6 +let _downcaret : keysym = 0xba8 +let _upcaret : keysym = 0xba9 +let _overbar : keysym = 0xbc0 +let _downtack : keysym = 0xbc2 +let _upshoe : keysym = 0xbc3 +let _downstile : keysym = 0xbc4 +let _underbar : keysym = 0xbc6 +let _jot : keysym = 0xbca +let _quad : keysym = 0xbcc +let _uptack : keysym = 0xbce +let _circle : keysym = 0xbcf +let _upstile : keysym = 0xbd3 +let _downshoe : keysym = 0xbd6 +let _rightshoe : keysym = 0xbd8 +let _leftshoe : keysym = 0xbda +let _lefttack : keysym = 0xbdc +let _righttack : keysym = 0xbfc +let _hebrew_doublelowline : keysym = 0xcdf +let _hebrew_aleph : keysym = 0xce0 +let _hebrew_bet : keysym = 0xce1 +let _hebrew_beth : keysym = 0xce1 +let _hebrew_gimel : keysym = 0xce2 +let _hebrew_gimmel : keysym = 0xce2 +let _hebrew_dalet : keysym = 0xce3 +let _hebrew_daleth : keysym = 0xce3 +let _hebrew_he : keysym = 0xce4 +let _hebrew_waw : keysym = 0xce5 +let _hebrew_zain : keysym = 0xce6 +let _hebrew_zayin : keysym = 0xce6 +let _hebrew_chet : keysym = 0xce7 +let _hebrew_het : keysym = 0xce7 +let _hebrew_tet : keysym = 0xce8 +let _hebrew_teth : keysym = 0xce8 +let _hebrew_yod : keysym = 0xce9 +let _hebrew_finalkaph : keysym = 0xcea +let _hebrew_kaph : keysym = 0xceb +let _hebrew_lamed : keysym = 0xcec +let _hebrew_finalmem : keysym = 0xced +let _hebrew_mem : keysym = 0xcee +let _hebrew_finalnun : keysym = 0xcef +let _hebrew_nun : keysym = 0xcf0 +let _hebrew_samech : keysym = 0xcf1 +let _hebrew_samekh : keysym = 0xcf1 +let _hebrew_ayin : keysym = 0xcf2 +let _hebrew_finalpe : keysym = 0xcf3 +let _hebrew_pe : keysym = 0xcf4 +let _hebrew_finalzade : keysym = 0xcf5 +let _hebrew_finalzadi : keysym = 0xcf5 +let _hebrew_zade : keysym = 0xcf6 +let _hebrew_zadi : keysym = 0xcf6 +let _hebrew_qoph : keysym = 0xcf7 +let _hebrew_kuf : keysym = 0xcf7 +let _hebrew_resh : keysym = 0xcf8 +let _hebrew_shin : keysym = 0xcf9 +let _hebrew_taw : keysym = 0xcfa +let _hebrew_taf : keysym = 0xcfa +let _Hebrew_switch : keysym = 0xFF7E +let _Thai_kokai : keysym = 0xda1 +let _Thai_khokhai : keysym = 0xda2 +let _Thai_khokhuat : keysym = 0xda3 +let _Thai_khokhwai : keysym = 0xda4 +let _Thai_khokhon : keysym = 0xda5 +let _Thai_khorakhang : keysym = 0xda6 +let _Thai_ngongu : keysym = 0xda7 +let _Thai_chochan : keysym = 0xda8 +let _Thai_choching : keysym = 0xda9 +let _Thai_chochang : keysym = 0xdaa +let _Thai_soso : keysym = 0xdab +let _Thai_chochoe : keysym = 0xdac +let _Thai_yoying : keysym = 0xdad +let _Thai_dochada : keysym = 0xdae +let _Thai_topatak : keysym = 0xdaf +let _Thai_thothan : keysym = 0xdb0 +let _Thai_thonangmontho : keysym = 0xdb1 +let _Thai_thophuthao : keysym = 0xdb2 +let _Thai_nonen : keysym = 0xdb3 +let _Thai_dodek : keysym = 0xdb4 +let _Thai_totao : keysym = 0xdb5 +let _Thai_thothung : keysym = 0xdb6 +let _Thai_thothahan : keysym = 0xdb7 +let _Thai_thothong : keysym = 0xdb8 +let _Thai_nonu : keysym = 0xdb9 +let _Thai_bobaimai : keysym = 0xdba +let _Thai_popla : keysym = 0xdbb +let _Thai_phophung : keysym = 0xdbc +let _Thai_fofa : keysym = 0xdbd +let _Thai_phophan : keysym = 0xdbe +let _Thai_fofan : keysym = 0xdbf +let _Thai_phosamphao : keysym = 0xdc0 +let _Thai_moma : keysym = 0xdc1 +let _Thai_yoyak : keysym = 0xdc2 +let _Thai_rorua : keysym = 0xdc3 +let _Thai_ru : keysym = 0xdc4 +let _Thai_loling : keysym = 0xdc5 +let _Thai_lu : keysym = 0xdc6 +let _Thai_wowaen : keysym = 0xdc7 +let _Thai_sosala : keysym = 0xdc8 +let _Thai_sorusi : keysym = 0xdc9 +let _Thai_sosua : keysym = 0xdca +let _Thai_hohip : keysym = 0xdcb +let _Thai_lochula : keysym = 0xdcc +let _Thai_oang : keysym = 0xdcd +let _Thai_honokhuk : keysym = 0xdce +let _Thai_paiyannoi : keysym = 0xdcf +let _Thai_saraa : keysym = 0xdd0 +let _Thai_maihanakat : keysym = 0xdd1 +let _Thai_saraaa : keysym = 0xdd2 +let _Thai_saraam : keysym = 0xdd3 +let _Thai_sarai : keysym = 0xdd4 +let _Thai_saraii : keysym = 0xdd5 +let _Thai_saraue : keysym = 0xdd6 +let _Thai_sarauee : keysym = 0xdd7 +let _Thai_sarau : keysym = 0xdd8 +let _Thai_sarauu : keysym = 0xdd9 +let _Thai_phinthu : keysym = 0xdda +let _Thai_maihanakat_maitho : keysym = 0xdde +let _Thai_baht : keysym = 0xddf +let _Thai_sarae : keysym = 0xde0 +let _Thai_saraae : keysym = 0xde1 +let _Thai_sarao : keysym = 0xde2 +let _Thai_saraaimaimuan : keysym = 0xde3 +let _Thai_saraaimaimalai : keysym = 0xde4 +let _Thai_lakkhangyao : keysym = 0xde5 +let _Thai_maiyamok : keysym = 0xde6 +let _Thai_maitaikhu : keysym = 0xde7 +let _Thai_maiek : keysym = 0xde8 +let _Thai_maitho : keysym = 0xde9 +let _Thai_maitri : keysym = 0xdea +let _Thai_maichattawa : keysym = 0xdeb +let _Thai_thanthakhat : keysym = 0xdec +let _Thai_nikhahit : keysym = 0xded +let _Thai_leksun : keysym = 0xdf0 +let _Thai_leknung : keysym = 0xdf1 +let _Thai_leksong : keysym = 0xdf2 +let _Thai_leksam : keysym = 0xdf3 +let _Thai_leksi : keysym = 0xdf4 +let _Thai_lekha : keysym = 0xdf5 +let _Thai_lekhok : keysym = 0xdf6 +let _Thai_lekchet : keysym = 0xdf7 +let _Thai_lekpaet : keysym = 0xdf8 +let _Thai_lekkao : keysym = 0xdf9 +let _Hangul : keysym = 0xff31 +let _Hangul_Start : keysym = 0xff32 +let _Hangul_End : keysym = 0xff33 +let _Hangul_Hanja : keysym = 0xff34 +let _Hangul_Jamo : keysym = 0xff35 +let _Hangul_Romaja : keysym = 0xff36 +let _Hangul_Codeinput : keysym = 0xff37 +let _Hangul_Jeonja : keysym = 0xff38 +let _Hangul_Banja : keysym = 0xff39 +let _Hangul_PreHanja : keysym = 0xff3a +let _Hangul_PostHanja : keysym = 0xff3b +let _Hangul_SingleCandidate : keysym = 0xff3c +let _Hangul_MultipleCandidate : keysym = 0xff3d +let _Hangul_PreviousCandidate : keysym = 0xff3e +let _Hangul_Special : keysym = 0xff3f +let _Hangul_switch : keysym = 0xFF7E +let _Hangul_Kiyeog : keysym = 0xea1 +let _Hangul_SsangKiyeog : keysym = 0xea2 +let _Hangul_KiyeogSios : keysym = 0xea3 +let _Hangul_Nieun : keysym = 0xea4 +let _Hangul_NieunJieuj : keysym = 0xea5 +let _Hangul_NieunHieuh : keysym = 0xea6 +let _Hangul_Dikeud : keysym = 0xea7 +let _Hangul_SsangDikeud : keysym = 0xea8 +let _Hangul_Rieul : keysym = 0xea9 +let _Hangul_RieulKiyeog : keysym = 0xeaa +let _Hangul_RieulMieum : keysym = 0xeab +let _Hangul_RieulPieub : keysym = 0xeac +let _Hangul_RieulSios : keysym = 0xead +let _Hangul_RieulTieut : keysym = 0xeae +let _Hangul_RieulPhieuf : keysym = 0xeaf +let _Hangul_RieulHieuh : keysym = 0xeb0 +let _Hangul_Mieum : keysym = 0xeb1 +let _Hangul_Pieub : keysym = 0xeb2 +let _Hangul_SsangPieub : keysym = 0xeb3 +let _Hangul_PieubSios : keysym = 0xeb4 +let _Hangul_Sios : keysym = 0xeb5 +let _Hangul_SsangSios : keysym = 0xeb6 +let _Hangul_Ieung : keysym = 0xeb7 +let _Hangul_Jieuj : keysym = 0xeb8 +let _Hangul_SsangJieuj : keysym = 0xeb9 +let _Hangul_Cieuc : keysym = 0xeba +let _Hangul_Khieuq : keysym = 0xebb +let _Hangul_Tieut : keysym = 0xebc +let _Hangul_Phieuf : keysym = 0xebd +let _Hangul_Hieuh : keysym = 0xebe +let _Hangul_A : keysym = 0xebf +let _Hangul_AE : keysym = 0xec0 +let _Hangul_YA : keysym = 0xec1 +let _Hangul_YAE : keysym = 0xec2 +let _Hangul_EO : keysym = 0xec3 +let _Hangul_E : keysym = 0xec4 +let _Hangul_YEO : keysym = 0xec5 +let _Hangul_YE : keysym = 0xec6 +let _Hangul_O : keysym = 0xec7 +let _Hangul_WA : keysym = 0xec8 +let _Hangul_WAE : keysym = 0xec9 +let _Hangul_OE : keysym = 0xeca +let _Hangul_YO : keysym = 0xecb +let _Hangul_U : keysym = 0xecc +let _Hangul_WEO : keysym = 0xecd +let _Hangul_WE : keysym = 0xece +let _Hangul_WI : keysym = 0xecf +let _Hangul_YU : keysym = 0xed0 +let _Hangul_EU : keysym = 0xed1 +let _Hangul_YI : keysym = 0xed2 +let _Hangul_I : keysym = 0xed3 +let _Hangul_J_Kiyeog : keysym = 0xed4 +let _Hangul_J_SsangKiyeog : keysym = 0xed5 +let _Hangul_J_KiyeogSios : keysym = 0xed6 +let _Hangul_J_Nieun : keysym = 0xed7 +let _Hangul_J_NieunJieuj : keysym = 0xed8 +let _Hangul_J_NieunHieuh : keysym = 0xed9 +let _Hangul_J_Dikeud : keysym = 0xeda +let _Hangul_J_Rieul : keysym = 0xedb +let _Hangul_J_RieulKiyeog : keysym = 0xedc +let _Hangul_J_RieulMieum : keysym = 0xedd +let _Hangul_J_RieulPieub : keysym = 0xede +let _Hangul_J_RieulSios : keysym = 0xedf +let _Hangul_J_RieulTieut : keysym = 0xee0 +let _Hangul_J_RieulPhieuf : keysym = 0xee1 +let _Hangul_J_RieulHieuh : keysym = 0xee2 +let _Hangul_J_Mieum : keysym = 0xee3 +let _Hangul_J_Pieub : keysym = 0xee4 +let _Hangul_J_PieubSios : keysym = 0xee5 +let _Hangul_J_Sios : keysym = 0xee6 +let _Hangul_J_SsangSios : keysym = 0xee7 +let _Hangul_J_Ieung : keysym = 0xee8 +let _Hangul_J_Jieuj : keysym = 0xee9 +let _Hangul_J_Cieuc : keysym = 0xeea +let _Hangul_J_Khieuq : keysym = 0xeeb +let _Hangul_J_Tieut : keysym = 0xeec +let _Hangul_J_Phieuf : keysym = 0xeed +let _Hangul_J_Hieuh : keysym = 0xeee +let _Hangul_RieulYeorinHieuh : keysym = 0xeef +let _Hangul_SunkyeongeumMieum : keysym = 0xef0 +let _Hangul_SunkyeongeumPieub : keysym = 0xef1 +let _Hangul_PanSios : keysym = 0xef2 +let _Hangul_KkogjiDalrinIeung : keysym = 0xef3 +let _Hangul_SunkyeongeumPhieuf : keysym = 0xef4 +let _Hangul_YeorinHieuh : keysym = 0xef5 +let _Hangul_AraeA : keysym = 0xef6 +let _Hangul_AraeAE : keysym = 0xef7 +let _Hangul_J_PanSios : keysym = 0xef8 +let _Hangul_J_KkogjiDalrinIeung : keysym = 0xef9 +let _Hangul_J_YeorinHieuh : keysym = 0xefa +let _Korean_Won : keysym = 0xeff diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var new file mode 100644 index 000000000..2c244a79c --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var @@ -0,0 +1,163 @@ +(* $Id$ *) + +type gdkEventType = "GDK_" + [ `NOTHING | `DELETE | `DESTROY | `EXPOSE | `MOTION_NOTIFY | `BUTTON_PRESS + | `TWO_BUTTON_PRESS "GDK_2BUTTON_PRESS" + | `THREE_BUTTON_PRESS "GDK_3BUTTON_PRESS" + | `BUTTON_RELEASE | `KEY_PRESS + | `KEY_RELEASE | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE + | `CONFIGURE | `MAP | `UNMAP | `PROPERTY_NOTIFY | `SELECTION_CLEAR + | `SELECTION_REQUEST | `SELECTION_NOTIFY | `PROXIMITY_IN + | `PROXIMITY_OUT + | `DRAG_ENTER | `DRAG_LEAVE | `DRAG_MOTION | `DRAG_STATUS + | `DROP_START | `DROP_FINISHED | `CLIENT_EVENT | `VISIBILITY_NOTIFY + | `NO_EXPOSE ] + +type event_mask = "GDK_" + [ `EXPOSURE + | `POINTER_MOTION | `POINTER_MOTION_HINT + | `BUTTON_MOTION | `BUTTON1_MOTION | `BUTTON2_MOTION | `BUTTON3_MOTION + | `BUTTON_PRESS | `BUTTON_RELEASE + | `KEY_PRESS | `KEY_RELEASE + | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE + | `STRUCTURE | `PROPERTY_CHANGE | `VISIBILITY_NOTIFY + | `PROXIMITY_IN | `PROXIMITY_OUT | `SUBSTRUCTURE + | `ALL_EVENTS ] "_MASK" + +type extension_events = "GDK_EXTENSION_EVENTS_" + [ `NONE | `ALL | `CURSOR ] + +type gdkVisibilityState = "GDK_VISIBILITY_" + [ `UNOBSCURED | `PARTIAL | `FULLY_OBSCURED ] + +type gdkInputSource = "GDK_SOURCE_" + [ `MOUSE | `PEN | `ERASER | `CURSOR ] + +type gdkCrossingMode = "GDK_CROSSING_" + [ `NORMAL | `GRAB | `UNGRAB ] + +type gdkNotifyType = "GDK_NOTIFY_" + [ `ANCESTOR | `VIRTUAL | `INFERIOR | `NONLINEAR | `NONLINEAR_VIRTUAL + | `UNKNOWN ] + +type gdkFillRule = "GDK_" + [ `EVEN_ODD_RULE | `WINDING_RULE ] + +type gdkOverlapType = "GDK_OVERLAP_RECTANGLE_" + [ `IN | `OUT | `PART ] + +type gdkFunction = "GDK_" + [ `COPY | `INVERT | `XOR ] + +type gdkFill = "GDK_" + [ `SOLID | `TILED | `STIPPLED | `OPAQUE_STIPPLED ] + +type gdkSubwindowMode = "GDK_" + [ `CLIP_BY_CHILDREN | `INCLUDE_INFERIORS ] + +type gdkLineStyle = "GDK_LINE_" + [ `SOLID | `ON_OFF_DASH | `DOUBLE_DASH ] + +type gdkCapStyle = "GDK_CAP_" + [ `NOT_LAST | `BUTT | `ROUND | `PROJECTING ] + +type gdkJoinStyle = "GDK_JOIN_" + [ `MITER | `ROUND | `BEVEL ] + +type gdkModifier = "GDK_" + [ `SHIFT | `LOCK | `CONTROL | `MOD1 | `MOD2 | `MOD3 | `MOD4 | `MOD5 + | `BUTTON1 | `BUTTON2 | `BUTTON3 | `BUTTON4 | `BUTTON5 ] "_MASK" + +type gdkImageType = "GDK_IMAGE_" + [ `NORMAL | `SHARED | `FASTEST ] + +type gdkVisualType = "GDK_VISUAL_" + [ `STATIC_GRAY | `GRAYSCALE | `STATIC_COLOR | `PSEUDO_COLOR + | `TRUE_COLOR | `DIRECT_COLOR ] + +type gdkFontType = "GDK_FONT_" + [ `FONT | `FONTSET ] + +type gdkDragAction = "GDK_ACTION_" + [ `DEFAULT | `COPY | `MOVE | `LINK | `PRIVATE | `ASK ] + +type gdkCursorType = "GDK_" [ + | `NUM_GLYPHS + | `X_CURSOR + | `ARROW + | `BASED_ARROW_DOWN + | `BASED_ARROW_UP + | `BOAT + | `BOGOSITY + | `BOTTOM_LEFT_CORNER + | `BOTTOM_RIGHT_CORNER + | `BOTTOM_SIDE + | `BOTTOM_TEE + | `BOX_SPIRAL + | `CENTER_PTR + | `CIRCLE + | `CLOCK + | `COFFEE_MUG + | `CROSS + | `CROSS_REVERSE + | `CROSSHAIR + | `DIAMOND_CROSS + | `DOT + | `DOTBOX + | `DOUBLE_ARROW + | `DRAFT_LARGE + | `DRAFT_SMALL + | `DRAPED_BOX + | `EXCHANGE + | `FLEUR + | `GOBBLER + | `GUMBY + | `HAND1 + | `HAND2 + | `HEART + | `ICON + | `IRON_CROSS + | `LEFT_PTR + | `LEFT_SIDE + | `LEFT_TEE + | `LEFTBUTTON + | `LL_ANGLE + | `LR_ANGLE + | `MAN + | `MIDDLEBUTTON + | `MOUSE + | `PENCIL + | `PIRATE + | `PLUS + | `QUESTION_ARROW + | `RIGHT_PTR + | `RIGHT_SIDE + | `RIGHT_TEE + | `RIGHTBUTTON + | `RTL_LOGO + | `SAILBOAT + | `SB_DOWN_ARROW + | `SB_H_DOUBLE_ARROW + | `SB_LEFT_ARROW + | `SB_RIGHT_ARROW + | `SB_UP_ARROW + | `SB_V_DOUBLE_ARROW + | `SHUTTLE + | `SIZING + | `SPIDER + | `SPRAYCAN + | `STAR + | `TARGET + | `TCROSS + | `TOP_LEFT_ARROW + | `TOP_LEFT_CORNER + | `TOP_RIGHT_CORNER + | `TOP_SIDE + | `TOP_TEE + | `TREK + | `UL_ANGLE + | `UMBRELLA + | `UR_ANGLE + | `WATCH + | `XTERM + ] diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml new file mode 100644 index 000000000..c7020a4fd --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml @@ -0,0 +1,86 @@ +(* $Id$ *) + +open Gaux +open Gtk + +type visual_options = [ + | `USE_GL + | `BUFFER_SIZE of int + | `LEVEL of int + | `RGBA + | `DOUBLEBUFFER + | `STEREO + | `AUX_BUFFERS of int + | `RED_SIZE of int + | `GREEN_SIZE of int + | `BLUE_SIZE of int + | `ALPHA_SIZE of int + | `DEPTH_SIZE of int + | `STENCIL_SIZE of int + | `ACCUM_GREEN_SIZE of int + | `ACCUM_ALPHA_SIZE of int +] + +type gl_area = [`widget|`drawing|`glarea] + +module Raw = struct + external create : + visual_options list -> share:[>`glarea] optobj -> gl_area obj + = "ml_gtk_gl_area_new" + + external swap_buffers : [>`glarea] obj -> unit + = "ml_gtk_gl_area_swapbuffers" + + external make_current : [>`glarea] obj -> bool + = "ml_gtk_gl_area_make_current" +end + +class area_signals obj = +object (connect) + inherit GObj.widget_signals obj + method display ~callback = + (new GObj.event_signals ~after obj)#expose ~callback: + begin fun ev -> + if GdkEvent.Expose.count ev = 0 then + if Raw.make_current obj then callback () + else prerr_endline "GlGtk-WARNING **: could not make current"; + true + end + method reshape ~callback = + (new GObj.event_signals ~after obj)#configure ~callback: + begin fun ev -> + if Raw.make_current obj then begin + callback ~width:(GdkEvent.Configure.width ev) + ~height:(GdkEvent.Configure.height ev) + end + else prerr_endline "GlGtk-WARNING **: could not make current"; + true + end + method realize ~callback = + let connect = new GObj.misc_signals ~after (GtkBase.Widget.coerce obj) in + connect#realize ~callback: + begin fun ev -> + if Raw.make_current obj then callback () + else prerr_endline "GlGtk-WARNING **: could not make current" + end +end + +class area obj = object (self) + inherit GObj.widget (obj : gl_area obj) + method as_area = obj + method event = new GObj.event_ops obj + method connect = new area_signals obj + method set_size = GtkMisc.DrawingArea.size obj + method swap_buffers () = Raw.swap_buffers obj + method make_current () = + if not (Raw.make_current obj) then + raise (Gl.GLerror "make_current") +end + +let area options ?share ?(width=0) ?(height=0) ?packing ?show () = + let share = + match share with Some (x : area) -> Some x#as_area | None -> None in + let w = Raw.create options ~share:(Gpointer.optboxed share) in + if width <> 0 || height <> 0 then GtkMisc.DrawingArea.size w ~width ~height; + GtkBase.Widget.add_events w [`EXPOSURE]; + GObj.pack_return (new area w) ~packing ~show diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli new file mode 100644 index 000000000..599f24a09 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli @@ -0,0 +1,63 @@ +(* $Id$ *) + +open Gtk +open GObj + +type visual_options = [ + `USE_GL + | `BUFFER_SIZE of int + | `LEVEL of int + | `RGBA + | `DOUBLEBUFFER + | `STEREO + | `AUX_BUFFERS of int + | `RED_SIZE of int + | `GREEN_SIZE of int + | `BLUE_SIZE of int + | `ALPHA_SIZE of int + | `DEPTH_SIZE of int + | `STENCIL_SIZE of int + | `ACCUM_GREEN_SIZE of int + | `ACCUM_ALPHA_SIZE of int +] +type gl_area = [`widget|`drawing|`glarea] + +module Raw : + sig + external create : + visual_options list -> share:[>`glarea] optobj -> gl_area obj + = "ml_gtk_gl_area_new" + external swap_buffers : [>`glarea] obj -> unit + = "ml_gtk_gl_area_swapbuffers" + external make_current : [>`glarea] obj -> bool + = "ml_gtk_gl_area_make_current" + end + +class area_signals : 'a obj -> + object + inherit widget_signals + constraint 'a = [>`glarea|`widget] + val obj : 'a obj + method display : callback:(unit -> unit) -> GtkSignal.id + method realize : callback:(unit -> unit) -> GtkSignal.id + method reshape : + callback:(width:int -> height:int -> unit) -> GtkSignal.id + end + +class area : gl_area obj -> + object + inherit widget + val obj : gl_area obj + method event : event_ops + method as_area : gl_area obj + method connect : area_signals + method make_current : unit -> unit + method set_size : width:int -> height:int -> unit + method swap_buffers : unit -> unit + end + +val area : + visual_options list -> + ?share:area -> + ?width:int -> + ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> area diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml new file mode 100644 index 000000000..2fd014099 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml @@ -0,0 +1,21 @@ +(* $Id$ *) + +type warning_func = string -> unit + +external set_warning_handler : (string -> unit) -> warning_func + = "ml_g_set_warning_handler" + +type print_func = string -> unit + +external set_print_handler : (string -> unit) -> print_func + = "ml_g_set_print_handler" + +module Main = struct + type t + external create : bool -> t = "ml_g_main_new" + external iteration : bool -> bool = "ml_g_main_iteration" + external pending : unit -> bool = "ml_g_main_pending" + external is_running : t -> bool = "ml_g_main_is_running" + external quit : t -> unit = "ml_g_main_quit" + external destroy : t -> unit = "ml_g_main_destroy" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml new file mode 100644 index 000000000..7d28a1f9d --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml @@ -0,0 +1,41 @@ +(* $Id$ *) + +(* marked pointers *) +type 'a optaddr + +let optaddr : 'a option -> 'a optaddr = + function + None -> Obj.magic 0 + | Some x -> Obj.magic x + +(* naked pointers *) +type optstring + +external get_null : unit -> optstring = "ml_get_null" +let raw_null = get_null () + +let optstring : string option -> optstring = + function + None -> raw_null + | Some x -> Obj.magic x + +(* boxed pointers *) +type boxed +let boxed_null : boxed = Obj.magic (0, raw_null) + +type 'a optboxed + +let optboxed : 'a option -> 'a optboxed = + function + None -> Obj.magic boxed_null + | Some obj -> Obj.magic obj + +let may_box ~f obj : 'a optboxed = + match obj with + None -> Obj.magic boxed_null + | Some obj -> Obj.magic (f obj : 'a) + +(* Exceptions *) + +exception Null +let _ = Callback.register_exception "null_pointer" Null diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml new file mode 100644 index 000000000..0c7892e6f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml @@ -0,0 +1,158 @@ +(* $Id$ *) + +exception Error of string +exception Warning of string +exception Cannot_cast of string * string +type 'a obj +type 'a optobj = 'a obj Gpointer.optboxed +type clampf = float + +module Tags = struct + type arrow_type = [ `UP|`DOWN|`LEFT|`RIGHT ] + type attach_options = [ `EXPAND|`SHRINK|`FILL ] + type direction_type = [ `TAB_FORWARD|`TAB_BACKWARD|`UP|`DOWN|`LEFT|`RIGHT ] + type justification = [ `LEFT|`RIGHT|`CENTER|`FILL ] + type match_type = [ `ALL|`ALL_TAIL|`HEAD|`TAIL|`EXACT|`LAST ] + type metric_type = [ `PIXELS|`INCHES|`CENTIMETERS ] + type orientation = [ `HORIZONTAL|`VERTICAL ] + type corner_type = [ `TOP_LEFT|`BOTTOM_LEFT|`TOP_RIGHT|`BOTTOM_RIGHT ] + type pack_type = [ `START|`END ] + type path_type = [ `WIDGET|`WIDGET_CLASS|`CLASS ] + type policy_type = [ `ALWAYS|`AUTOMATIC|`NEVER ] + type position = [ `LEFT|`RIGHT|`TOP|`BOTTOM ] + type preview_type = [ `COLOR|`GRAYSCALE ] + type relief_style = [ `NORMAL|`HALF|`NONE ] + type resize_mode = [ `PARENT|`QUEUE|`IMMEDIATE ] + type signal_run_type = [ `FIRST|`LAST|`BOTH|`NO_RECURSE|`ACTION|`NO_HOOKS ] + type scroll_type = + [ `NONE|`STEP_FORWARD|`STEP_BACKWARD|`PAGE_BACKWARD|`PAGE_FORWARD|`JUMP ] + type selection_mode = [ `SINGLE|`BROWSE|`MULTIPLE|`EXTENDED ] + type shadow_type = [ `NONE|`IN|`OUT|`ETCHED_IN|`ETCHED_OUT ] + type state_type = [ `NORMAL|`ACTIVE|`PRELIGHT|`SELECTED|`INSENSITIVE ] + type submenu_direction = [ `LEFT|`RIGHT ] + type submenu_placement = [ `TOP_BOTTOM|`LEFT_RIGHT ] + type toolbar_style = [ `ICONS|`TEXT|`BOTH ] + type trough_type = [ `NONE|`START|`END|`JUMP ] + type update_type = [ `CONTINUOUS|`DISCONTINUOUS|`DELAYED ] + type visibility = [ `NONE|`PARTIAL|`FULL ] + type window_position = [ `NONE|`CENTER|`MOUSE|`CENTER_ALWAYS ] + type window_type = [ `TOPLEVEL|`DIALOG|`POPUP ] + type sort_type = [ `ASCENDING|`DESCENDING ] + type fundamental_type = + [ `INVALID|`NONE|`CHAR|`BOOL|`INT|`UINT|`LONG|`ULONG|`FLOAT|`DOUBLE + |`STRING|`ENUM|`FLAGS|`BOXED|`FOREIGN|`CALLBACK|`ARGS|`POINTER + |`SIGNAL|`C_CALLBACK|`OBJECT ] + + type accel_flag = [ `VISIBLE|`SIGNAL_VISIBLE|`LOCKED ] + type button_box_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ] + type expand_type = [ `X|`Y|`BOTH|`NONE ] + type packer_options = [ `PACK_EXPAND|`FILL_X|`FILL_Y ] + type side_type = [ `TOP|`BOTTOM|`LEFT|`RIGHT ] + type anchor_type = [ `CENTER|`NORTH|`NW|`NE|`SOUTH|`SW|`SE|`WEST|`EAST ] + type update_policy = [ `ALWAYS|`IF_VALID|`SNAP_TO_TICKS ] + type cell_type = [ `EMPTY|`TEXT|`PIXMAP|`PIXTEXT|`WIDGET ] + type button_action = [ `SELECTS|`DRAGS|`EXPANDS ] + type calendar_display_options = + [ `SHOW_HEADING|`SHOW_DAY_NAMES|`NO_MONTH_CHANGE|`SHOW_WEEK_NUMBERS + |`WEEK_START_MONDAY ] + type spin_button_update_policy = [ `ALWAYS|`IF_VALID ] + type spin_type = + [ `STEP_FORWARD|`STEP_BACKWARD|`PAGE_FORWARD|`PAGE_BACKWARD + |`HOME|`END|`USER_DEFINED of float ] + type progress_bar_style = [ `CONTINUOUS|`DISCRETE ] + type progress_bar_orientation = + [ `LEFT_TO_RIGHT|`RIGHT_TO_LEFT|`BOTTOM_TO_TOP|`TOP_TO_BOTTOM ] + type dest_defaults = [ `MOTION|`HIGHLIGHT|`DROP|`ALL ] + type target_flags = [ `SAME_APP|`SAME_WIDGET ] + type font_metric_type = [ `PIXELS|`POINTS ] + type font_type = [ `BITMAP|`SCALABLE|`SCALABLE_BITMAP|`ALL ] + type font_filter_type = [ `BASE|`USER ] +end +open Tags + +type gtk_type +type gtk_class + +type accel_group + +type style +type 'a group = 'a obj option + +type statusbar_message +type statusbar_context + +type color = { red: float; green: float; blue: float; opacity: float } +type rectangle = { x: int; y: int; width: int; height: int } +type target_entry = { target: string; flags: target_flags list; info: int } + +type data = [`data] +type adjustment = [`data|`adjustment] +type tooltips = [`data|`tooltips] +type widget = [`widget] +type container = [`widget|`container] +type alignment = [`widget|`container|`bin|`alignment] +type event_box = [`widget|`container|`bin|`eventbox] +type frame = [`widget|`container|`bin|`frame] +type aspect_frame = [`widget|`container|`bin|`frame|`aspect] +type handle_box = [`widget|`container|`bin|`handlebox] +type invisible = [`widget|`container|`bin|`invisible] +type item = [`widget|`container|`bin|`item] +type list_item = [`widget|`container|`bin|`item|`listitem] +type menu_item = [`widget|`container|`bin|`item|`menuitem] +type check_menu_item = [`widget|`container|`bin|`item|`menuitem|`checkmenuitem] +type radio_menu_item = + [`widget|`container|`bin|`item|`menuitem|`checkmenuitem|`radiomenuitem] +type tree_item = [`widget|`container|`bin|`item|`treeitem] +type viewport = [`widget|`container|`bin|`viewport] +type window = [`widget|`container|`bin|`window] +type color_selection_dialog = [`widget|`container|`window|`colorseldialog] +type dialog = [`widget|`container|`bin|`window|`dialog] +type input_dialog = [`widget|`container|`bin|`window|`dialog|`inputdialog] +type file_selection = [`widget|`container|`bin|`window|`filesel] +type font_selection_dialog = [`widget|`container|`bin|`window|`fontseldialog] +type plug = [`widget|`container|`bin|`window|`plug] +type box = [`widget|`container|`box] +type button_box = [`widget|`container|`box|`bbox] +type gamma_curve = [`widget|`container|`bbox|`gamma] +type color_selection = [`widget|`container|`box|`colorsel] +type combo = [`widget|`container|`box|`combo] +type statusbar = [`widget|`container|`box|`statusbar] +type button = [`widget|`container|`button] +type toggle_button = [`widget|`container|`button|`toggle] +type radio_button = [`widget|`container|`button|`toggle|`radio] +type option_menu = [`widget|`container|`button|`optionmenu] +type clist = [`widget|`container|`clist] +type fixed = [`widget|`container|`fixed] +type layout = [`widget|`container|`layout] +type liste = [`widget|`container|`list] +type menu_shell = [`widget|`container|`menushell] +type menu = [`widget|`container|`menushell|`menu] +type menu_bar = [`widget|`container|`menushell|`menubar] +type notebook = [`widget|`container|`notebook] +type font_selection = [`widget|`container|`notebook|`fontsel] +type packer = [`widget|`container|`packer] +type paned = [`widget|`container|`paned] +type scrolled_window = [`widget|`container|`scrolled] +type socket = [`widget|`container|`socket] +type table = [`widget|`container|`table] +type toolbar = [`widget|`container|`toolbar] +type tree = [`widget|`container|`tree] +type calendar = [`widget|`calendar] +type drawing_area = [`widget|`drawing] +type editable = [`widget|`editable] +type entry = [`widget|`editable|`entry] +type spin_button = [`widget|`editable|`entry|`spinbutton] +type text = [`widget|`editable|`text] +type misc = [`widget|`misc] +type arrow = [`widget|`misc|`arrow] +type image = [`widget|`misc|`image] +type label = [`widget|`misc|`label] +type tips_query = [`widget|`misc|`label|`tipsquery] +type pixmap = [`widget|`misc|`pixmap] +type progress = [`widget|`progress] +type progress_bar = [`widget|`progress|`progressbar] +type range = [`widget|`range] +type scale = [`widget|`range|`scale] +type scrollbar = [`widget|`range|`scrollbar] +type ruler = [`widget|`ruler] +type separator = [`widget|`separator] diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml new file mode 100644 index 000000000..5e60c8d5e --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml @@ -0,0 +1,106 @@ +(* $Id$ *) + +open Gaux +open Gtk + +type data = + | NONE + | CHAR of char + | BOOL of bool + | INT of int + | FLOAT of float + | STRING of string option + | OBJECT of unit obj option + | POINTER of Gpointer.boxed option + +type 'a result = + [ `NONE + | `CHAR of char | `BOOL of bool | `INT of int + | `UINT of int32 | `LONG of nativeint | `ULONG of nativeint + | `FLOAT of float | `DOUBLE of float + | `STRING of string option | `ENUM of int | `FLAGS of int32 + | `BOXED of Gpointer.boxed option + | `POINTER of Gpointer.boxed option + | `OBJECT of 'a obj option ] + +module Arg = struct + type t + external shift : t -> pos:int -> t = "ml_gtk_arg_shift" + external get_type : t -> gtk_type = "ml_gtk_arg_get_type" + external get : t -> data = "ml_gtk_arg_get" + external set_retloc : t -> 'a result -> unit = "ml_gtk_arg_set_retloc" + external get_pointer : t -> Gpointer.boxed = "ml_gtk_arg_get_pointer" + external get_nativeint : t -> nativeint = "ml_gtk_arg_get_nativeint" + + (* Safely get an argument *) + (* + external get_char : t -> char = "ml_gtk_arg_get_char" + external get_bool : t -> bool = "ml_gtk_arg_get_bool" + external get_int : t -> int = "ml_gtk_arg_get_int" + external get_float : t -> float = "ml_gtk_arg_get_float" + external get_string : t -> string option = "ml_gtk_arg_get_string" + external get_object : t -> unit obj option = "ml_gtk_arg_get_object" + *) + (* Safely set a result + Beware: this is not the opposite of get, arguments and results + are two different ways to use GtkArg. *) + (* + external set_char : t -> char -> unit = "ml_gtk_arg_set_char" + external set_bool : t -> bool -> unit = "ml_gtk_arg_set_bool" + external set_int : t -> int -> unit = "ml_gtk_arg_set_int" + external set_nativeint : t -> nativeint -> unit = "ml_gtk_arg_set_nativeint" + external set_float : t -> float -> unit = "ml_gtk_arg_set_float" + external set_string : t -> string -> unit = "ml_gtk_arg_set_string" + external set_pointer : t -> Gpointer.boxed -> unit = "ml_gtk_arg_set_pointer" + external set_object : t -> 'a obj -> unit = "ml_gtk_arg_set_object" + *) +end + +open Arg +type raw_obj +type t = { referent: raw_obj; nargs: int; args: Arg.t } +let nth arg ~pos = + if pos < 0 || pos >= arg.nargs then invalid_arg "GtkArg.Vect.nth"; + shift arg.args ~pos +let result arg = + if arg.nargs < 0 then invalid_arg "GtkArgv.result"; + shift arg.args ~pos:arg.nargs +external wrap_object : raw_obj -> unit obj = "Val_GtkObject" +let referent arg = + if arg.referent == Obj.magic (-1) then invalid_arg "GtkArgv.referent"; + wrap_object arg.referent +let get_result_type arg = get_type (result arg) +let get_type arg ~pos = get_type (nth arg ~pos) +let get arg ~pos = get (nth arg ~pos) +let set_result arg = set_retloc (result arg) + +let get_args arg = + let rec loop args ~pos = + if pos < 0 then args + else loop (get arg ~pos :: args) ~pos:(pos-1) + in loop [] ~pos:(arg.nargs - 1) + +let get_pointer arg ~pos = get_pointer (nth arg ~pos) +let get_nativeint arg ~pos = get_nativeint (nth arg ~pos) + +(* +let get_char arg ~pos = get_char (nth arg ~pos) +let get_bool arg ~pos = get_bool (nth arg ~pos) +let get_int arg ~pos = get_int (nth arg ~pos) +let get_float arg ~pos = get_float (nth arg ~pos) +let get_string arg ~pos = get_string (nth arg ~pos) +let get_object arg ~pos = get_object (nth arg ~pos) +let set_result_char arg = set_char (result arg) +let set_result_bool arg = set_bool (result arg) +let set_result_int arg = set_int (result arg) +let set_result_nativeint arg = set_nativeint (result arg) +let set_result_float arg = set_float (result arg) +let set_result_string arg = set_string (result arg) +let set_result_pointer arg = set_pointer (result arg) +let set_result_object arg = set_object (result arg) +*) + +external string_at_pointer : ?pos:int -> ?len:int -> Gpointer.boxed -> string + = "ml_string_at_pointer" +external int_at_pointer : Gpointer.boxed -> int + = "ml_int_at_pointer" diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml new file mode 100644 index 000000000..3b1a00fdf --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml @@ -0,0 +1,414 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags + +module Type = struct + external name : gtk_type -> string = "ml_gtk_type_name" + external from_name : string -> gtk_type = "ml_gtk_type_from_name" + external parent : gtk_type -> gtk_type = "ml_gtk_type_parent" + external get_class : gtk_type -> gtk_class = "ml_gtk_type_class" + external parent_class : gtk_type -> gtk_class = "ml_gtk_type_parent_class" + external is_a : gtk_type -> gtk_type -> bool = "ml_gtk_type_is_a" + external fundamental : gtk_type -> fundamental_type + = "ml_gtk_type_fundamental" +end + +module Object = struct + external get_type : 'a obj -> gtk_type = "ml_gtk_object_type" + let is_a obj name = + Type.is_a (get_type obj) (Type.from_name name) + external destroy : 'a obj -> unit = "ml_gtk_object_destroy" + external coerce : 'a obj -> unit obj = "%identity" + external unsafe_cast : 'a obj -> 'b obj = "%identity" + let try_cast w name = + if is_a w name then unsafe_cast w + else raise (Cannot_cast(Type.name(get_type w), name)) + let get_id (obj : 'a obj) : int = (snd (Obj.magic obj) lor 0) + module Signals = struct + open GtkSignal + let destroy : (_,_) t = + { name = "destroy"; marshaller = marshal_unit } + end +end + +module Widget = struct + let cast w : widget obj = Object.try_cast w "GtkWidget" + external coerce : [>`widget] obj -> widget obj = "%identity" + external unparent : [>`widget] obj -> unit = "ml_gtk_widget_unparent" + external show : [>`widget] obj -> unit = "ml_gtk_widget_show" + external show_now : [>`widget] obj -> unit = "ml_gtk_widget_show_now" + external show_all : [>`widget] obj -> unit = "ml_gtk_widget_show_all" + external hide : [>`widget] obj -> unit = "ml_gtk_widget_hide" + external hide_all : [>`widget] obj -> unit = "ml_gtk_widget_hide_all" + external map : [>`widget] obj -> unit = "ml_gtk_widget_map" + external unmap : [>`widget] obj -> unit = "ml_gtk_widget_unmap" + external realize : [>`widget] obj -> unit = "ml_gtk_widget_realize" + external unrealize : [>`widget] obj -> unit = "ml_gtk_widget_unrealize" + external queue_draw : [>`widget] obj -> unit = "ml_gtk_widget_queue_draw" + external queue_resize : [>`widget] obj -> unit = "ml_gtk_widget_queue_resize" + external draw : [>`widget] obj -> Gdk.Rectangle.t option -> unit + = "ml_gtk_widget_draw" + external draw_focus : [>`widget] obj -> unit + = "ml_gtk_widget_draw_focus" + external draw_default : [>`widget] obj -> unit + = "ml_gtk_widget_draw_default" + external event : [>`widget] obj -> 'a Gdk.event -> bool + = "ml_gtk_widget_event" + external activate : [>`widget] obj -> bool + = "ml_gtk_widget_activate" + external reparent : [>`widget] obj -> [>`widget] obj -> unit + = "ml_gtk_widget_reparent" + external popup : [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_widget_popup" + external intersect : + [>`widget] obj -> Gdk.Rectangle.t -> Gdk.Rectangle.t option + = "ml_gtk_widget_intersect" + external set_can_default : [>`widget] obj -> bool -> unit + = "ml_gtk_widget_set_can_default" + external set_can_focus : [>`widget] obj -> bool -> unit + = "ml_gtk_widget_set_can_focus" + external grab_focus : [>`widget] obj -> unit + = "ml_gtk_widget_grab_focus" + external grab_default : [>`widget] obj -> unit + = "ml_gtk_widget_grab_default" + external set_name : [>`widget] obj -> string -> unit + = "ml_gtk_widget_set_name" + external get_name : [>`widget] obj -> string + = "ml_gtk_widget_get_name" + external set_state : [>`widget] obj -> state_type -> unit + = "ml_gtk_widget_set_state" + external set_sensitive : [>`widget] obj -> bool -> unit + = "ml_gtk_widget_set_sensitive" + external set_uposition : [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_widget_set_uposition" + external set_usize : [>`widget] obj -> width:int -> height:int -> unit + = "ml_gtk_widget_set_usize" + external add_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit + = "ml_gtk_widget_add_events" + external set_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit + = "ml_gtk_widget_set_events" + external set_extension_events : + [>`widget] obj -> Gdk.Tags.extension_events -> unit + = "ml_gtk_widget_set_extension_events" + external get_toplevel : [>`widget] obj -> widget obj + = "ml_gtk_widget_get_toplevel" + external get_ancestor : [>`widget] obj -> gtk_type -> widget obj + = "ml_gtk_widget_get_ancestor" + external get_colormap : [>`widget] obj -> Gdk.colormap + = "ml_gtk_widget_get_colormap" + external get_visual : [>`widget] obj -> Gdk.visual + = "ml_gtk_widget_get_visual" + external get_pointer : [>`widget] obj -> int * int + = "ml_gtk_widget_get_pointer" + external is_ancestor : [>`widget] obj -> [>`widget] obj -> bool + = "ml_gtk_widget_is_ancestor" + external set_style : [>`widget] obj -> style -> unit + = "ml_gtk_widget_set_style" + external set_rc_style : [>`widget] obj -> unit + = "ml_gtk_widget_set_rc_style" + external ensure_style : [>`widget] obj -> unit + = "ml_gtk_widget_ensure_style" + external get_style : [>`widget] obj -> style + = "ml_gtk_widget_get_style" + external restore_default_style : [>`widget] obj -> unit + = "ml_gtk_widget_restore_default_style" + external add_accelerator : + ([>`widget] as 'a) obj -> sgn:('a,unit->unit) GtkSignal.t -> + accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> + ?flags:accel_flag list -> unit + = "ml_gtk_widget_add_accelerator_bc" "ml_gtk_widget_add_accelerator" + external remove_accelerator : + [>`widget] obj -> accel_group -> + key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> unit + = "ml_gtk_widget_remove_accelerator" + external lock_accelerators : [>`widget] obj -> unit + = "ml_gtk_widget_lock_accelerators" + external unlock_accelerators : [>`widget] obj -> unit + = "ml_gtk_widget_unlock_accelerators" + external accelerators_locked : [>`widget] obj -> bool + = "ml_gtk_widget_accelerators_locked" + external window : [>`widget] obj -> Gdk.window + = "ml_GtkWidget_window" + external visible : [>`widget] obj -> bool + = "ml_GTK_WIDGET_VISIBLE" + external has_focus : [>`widget] obj -> bool + = "ml_GTK_WIDGET_HAS_FOCUS" + external parent : [>`widget] obj -> widget obj + = "ml_gtk_widget_parent" + external set_app_paintable : [>`widget] obj -> bool -> unit + = "ml_gtk_widget_set_app_paintable" + external allocation : [>`widget] obj -> rectangle + = "ml_gtk_widget_allocation" + external set_colormap : [>`widget] obj -> Gdk.colormap -> unit + = "ml_gtk_widget_set_colormap" + external set_visual : [>`widget] obj -> Gdk.visual -> unit + = "ml_gtk_widget_set_visual" + external set_default_colormap : Gdk.colormap -> unit + = "ml_gtk_widget_set_default_colormap" + external set_default_visual : Gdk.visual -> unit + = "ml_gtk_widget_set_default_visual" + external get_default_colormap : unit -> Gdk.colormap + = "ml_gtk_widget_get_default_colormap" + external get_default_visual : unit -> Gdk.visual + = "ml_gtk_widget_get_default_visual" + external push_colormap : Gdk.colormap -> unit + = "ml_gtk_widget_push_colormap" + external push_visual : Gdk.visual -> unit + = "ml_gtk_widget_push_visual" + external pop_colormap : unit -> unit + = "ml_gtk_widget_pop_colormap" + external pop_visual : unit -> unit + = "ml_gtk_widget_pop_visual" + module Signals = struct + open GtkArgv + open GtkSignal + let marshal f _ = function + | OBJECT(Some p) :: _ -> f (cast p) + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal" + let marshal_opt f _ = function + | OBJECT(Some obj) :: _ -> f (Some (cast obj)) + | OBJECT None :: _ -> f None + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt" + let marshal_style f _ = function + | POINTER p :: _ -> f (Obj.magic p : Gtk.style option) + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt" + let marshal_drag1 f _ = function + | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.drag_context) + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag1" + let marshal_drag2 f _ = function + | POINTER(Some p) :: INT time :: _ -> + f (Obj.magic p : Gdk.drag_context) ~time + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag2" + let marshal_drag3 f argv = function + | POINTER(Some p) :: INT x :: INT y :: INT time :: _ -> + let res = f (Obj.magic p : Gdk.drag_context) ~x ~y ~time + in GtkArgv.set_result argv (`BOOL res) + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag3" + let show : ([>`widget],_) t = + { name = "show"; marshaller = marshal_unit } + let hide : ([>`widget],_) t = + { name = "hide"; marshaller = marshal_unit } + let map : ([>`widget],_) t = + { name = "map"; marshaller = marshal_unit } + let unmap : ([>`widget],_) t = + { name = "unmap"; marshaller = marshal_unit } + let realize : ([>`widget],_) t = + { name = "realize"; marshaller = marshal_unit } + let draw : ([>`widget],_) t = + let marshal f _ = function + | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.Rectangle.t) + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_draw" + in { name = "draw"; marshaller = marshal } + let draw_focus : ([>`widget],_) t = + { name = "draw_focus"; marshaller = marshal_unit } + let draw_default : ([>`widget],_) t = + { name = "draw_default"; marshaller = marshal_unit } + external val_state : int -> state_type = "ml_Val_state_type" + let state_changed : ([>`widget],_) t = + let marshal f = marshal_int (fun x -> f (val_state x)) in + { name = "state_changed"; marshaller = marshal } + let parent_set : ([>`widget],_) t = + { name = "parent_set"; marshaller = marshal_opt } + let style_set : ([>`widget],_) t = + { name = "style_set"; marshaller = marshal_style } + let drag_begin : ([>`widget],_) t = + { name = "drag_begin"; marshaller = marshal_drag1 } + let drag_end : ([>`widget],_) t = + { name = "drag_end"; marshaller = marshal_drag1 } + let drag_data_delete : ([>`widget],_) t = + { name = "drag_data_delete"; marshaller = marshal_drag1 } + let drag_leave : ([>`widget],_) t = + { name = "drag_leave"; marshaller = marshal_drag2 } + let drag_motion : ([>`widget],_) t = + { name = "drag_motion"; marshaller = marshal_drag3 } + let drag_drop : ([>`widget],_) t = + { name = "drag_drop"; marshaller = marshal_drag3 } + let drag_data_get : ([>`widget],_) t = + let marshal f argv = function + | POINTER(Some p) :: POINTER(Some q) :: INT info :: INT time :: _ -> + f (Obj.magic p : Gdk.drag_context) + (Obj.magic q : GtkData.Selection.t) + ~info + ~time + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_get" + in + { name = "drag_data_get"; marshaller = marshal } + let drag_data_received : ([>`widget],_) t = + let marshal f _ = function + | POINTER(Some p) :: INT x :: INT y :: POINTER(Some q) :: + INT info :: INT time :: _ -> + f (Obj.magic p : Gdk.drag_context) ~x ~y + (Obj.magic q : GtkData.Selection.t) + ~info ~time + | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_received" + in + { name = "drag_data_received"; marshaller = marshal } + + module Event = struct + let marshal f argv = function + | [POINTER(Some p)] -> + let ev = GdkEvent.unsafe_copy p in + GtkArgv.set_result argv (`BOOL(f ev)) + | _ -> invalid_arg "GtkBase.Widget.Event.marshal" + let any : ([>`widget], Gdk.Tags.event_type Gdk.event -> bool) t = + { name = "event"; marshaller = marshal } + let button_press : ([>`widget], GdkEvent.Button.t -> bool) t = + { name = "button_press_event"; marshaller = marshal } + let button_release : ([>`widget], GdkEvent.Button.t -> bool) t = + { name = "button_release_event"; marshaller = marshal } + let motion_notify : ([>`widget], GdkEvent.Motion.t -> bool) t = + { name = "motion_notify_event"; marshaller = marshal } + let delete : ([>`widget], [`DELETE] Gdk.event -> bool) t = + { name = "delete_event"; marshaller = marshal } + let destroy : ([>`widget], [`DESTROY] Gdk.event -> bool) t = + { name = "destroy_event"; marshaller = marshal } + let expose : ([>`widget], GdkEvent.Expose.t -> bool) t = + { name = "expose_event"; marshaller = marshal } + let key_press : ([>`widget], GdkEvent.Key.t -> bool) t = + { name = "key_press_event"; marshaller = marshal } + let key_release : ([>`widget], GdkEvent.Key.t -> bool) t = + { name = "key_release_event"; marshaller = marshal } + let enter_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t = + { name = "enter_notify_event"; marshaller = marshal } + let leave_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t = + { name = "leave_notify_event"; marshaller = marshal } + let configure : ([>`widget], GdkEvent.Configure.t -> bool) t = + { name = "configure_event"; marshaller = marshal } + let focus_in : ([>`widget], GdkEvent.Focus.t -> bool) t = + { name = "focus_in_event"; marshaller = marshal } + let focus_out : ([>`widget], GdkEvent.Focus.t -> bool) t = + { name = "focus_out_event"; marshaller = marshal } + let map : ([>`widget], [`MAP] Gdk.event -> bool) t = + { name = "map_event"; marshaller = marshal } + let unmap : ([>`widget], [`UNMAP] Gdk.event -> bool) t = + { name = "unmap_event"; marshaller = marshal } + let property_notify : ([>`widget], GdkEvent.Property.t -> bool) t = + { name = "property_notify_event"; marshaller = marshal } + let selection_clear : ([>`widget], GdkEvent.Selection.t -> bool) t = + { name = "selection_clear_event"; marshaller = marshal } + let selection_request : ([>`widget], GdkEvent.Selection.t -> bool) t = + { name = "selection_request_event"; marshaller = marshal } + let selection_notify : ([>`widget], GdkEvent.Selection.t -> bool) t = + { name = "selection_notify_event"; marshaller = marshal } + let proximity_in : ([>`widget], GdkEvent.Proximity.t -> bool) t = + { name = "proximity_in_event"; marshaller = marshal } + let proximity_out : ([>`widget], GdkEvent.Proximity.t -> bool) t = + { name = "proximity_out_event"; marshaller = marshal } + end + end +end + +module Container = struct + let cast w : container obj = Object.try_cast w "GtkContainer" + external coerce : [>`container] obj -> container obj = "%identity" + external set_border_width : [>`container] obj -> int -> unit + = "ml_gtk_container_set_border_width" + external set_resize_mode : [>`container] obj -> resize_mode -> unit + = "ml_gtk_container_set_resize_mode" + external add : [>`container] obj -> [>`widget] obj -> unit + = "ml_gtk_container_add" + external remove : [>`container] obj -> [>`widget] obj -> unit + = "ml_gtk_container_remove" + let set ?border_width ?(width = -2) ?(height = -2) w = + may border_width ~f:(set_border_width w); + if width <> -2 || height <> -2 then + Widget.set_usize w ?width ?height + external foreach : [>`container] obj -> f:(widget obj-> unit) -> unit + = "ml_gtk_container_foreach" + let children w = + let l = ref [] in + foreach w ~f:(fun c -> l := c :: !l); + List.rev !l + external focus : [>`container] obj -> direction_type -> bool + = "ml_gtk_container_focus" + (* Called by Widget.grab_focus *) + external set_focus_child : [>`container] obj -> [>`widget] optobj -> unit + = "ml_gtk_container_set_focus_child" + external set_focus_vadjustment : + [>`container] obj -> [>`adjustment] optobj -> unit + = "ml_gtk_container_set_focus_vadjustment" + external set_focus_hadjustment : + [>`container] obj -> [>`adjustment] optobj -> unit + = "ml_gtk_container_set_focus_hadjustment" + module Signals = struct + open GtkSignal + let add : ([>`container],_) t = + { name = "add"; marshaller = Widget.Signals.marshal } + let remove : ([>`container],_) t = + { name = "remove"; marshaller = Widget.Signals.marshal } + let need_resize : ([>`container],_) t = + let marshal f argv _ = GtkArgv.set_result argv (`BOOL(f ())) in + { name = "need_resize"; marshaller = marshal } + external val_direction : int -> direction_type = "ml_Val_direction_type" + let focus : ([>`container],_) t = + let marshal f argv = function + | GtkArgv.INT dir :: _ -> + GtkArgv.set_result argv (`BOOL(f (val_direction dir))) + | _ -> invalid_arg "GtkBase.Container.Signals.marshal_focus" + in { name = "focus"; marshaller = marshal } + end +end + +module Item = struct + let cast w : item obj = Object.try_cast w "GtkItem" + external coerce : [>`item] obj -> item obj = "%identity" + external select : [>`item] obj -> unit = "ml_gtk_item_select" + external deselect : [>`item] obj -> unit = "ml_gtk_item_deselect" + external toggle : [>`item] obj -> unit = "ml_gtk_item_toggle" + module Signals = struct + open GtkSignal + let select : ([>`item],_) t = + { name = "select"; marshaller = marshal_unit } + let deselect : ([>`item],_) t = + { name = "deselect"; marshaller = marshal_unit } + let toggle : ([>`item],_) t = + { name = "toggle"; marshaller = marshal_unit } + end +end + + +module DnD = struct + external dest_set : + [>`widget] obj -> flags:dest_defaults list -> + targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit + = "ml_gtk_drag_dest_set" + external dest_unset : [>`widget] obj -> unit + = "ml_gtk_drag_dest_unset" + external finish : + Gdk.drag_context -> success:bool -> del:bool -> time:int -> unit + = "ml_gtk_drag_finish" + external get_data : + [>`widget] obj -> Gdk.drag_context -> target:Gdk.atom -> time:int -> unit + = "ml_gtk_drag_get_data" + external get_source_widget : Gdk.drag_context -> widget obj + = "ml_gtk_drag_get_source_widget" + external highlight : [>`widget] obj -> unit = "ml_gtk_drag_highlight" + external unhighlight : [>`widget] obj -> unit = "ml_gtk_drag_unhighlight" + external set_icon_widget : + Gdk.drag_context -> [>`widget] obj -> hot_x:int -> hot_y:int -> unit + = "ml_gtk_drag_set_icon_widget" + external set_icon_pixmap : + Gdk.drag_context -> colormap:Gdk.colormap -> + Gdk.pixmap -> ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit + = "ml_gtk_drag_set_icon_pixmap_bc" "ml_gtk_drag_set_icon_pixmap" + external set_icon_default : Gdk.drag_context -> unit + = "ml_gtk_drag_set_icon_default" + external set_default_icon : + colormap:Gdk.colormap -> Gdk.pixmap -> + ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit + = "ml_gtk_drag_set_default_icon" + external source_set : + [>`widget] obj -> ?modi:Gdk.Tags.modifier list -> + targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit + = "ml_gtk_drag_source_set" + external source_set_icon : + [>`widget] obj -> colormap:Gdk.colormap -> + Gdk.pixmap -> ?mask:Gdk.bitmap -> unit + = "ml_gtk_drag_source_set_icon" + external source_unset : [>`widget] obj -> unit + = "ml_gtk_drag_source_unset" +(* external dest_handle_event : [>`widget] -> *) +end + diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml new file mode 100644 index 000000000..ab4cc7e85 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml @@ -0,0 +1,170 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Alignment = struct + let cast w : alignment obj = Object.try_cast w "GtkAlignment" + external create : + x:clampf -> y:clampf -> xscale:clampf -> yscale:clampf -> alignment obj + = "ml_gtk_alignment_new" + let create ?(x=0.5) ?(y=0.5) ?(xscale=1.) ?(yscale=1.) () = + create ~x ~y ~xscale ~yscale + external set : + ?x:clampf -> ?y:clampf -> ?xscale:clampf -> ?yscale:clampf -> + [>`alignment] obj -> unit + = "ml_gtk_alignment_set" +end + +module EventBox = struct + let cast w : event_box obj = Object.try_cast w "GtkEventBox" + external create : unit -> event_box obj = "ml_gtk_event_box_new" +end + +module Frame = struct + let cast w : frame obj = Object.try_cast w "GtkFrame" + external coerce : [>`frame] obj -> frame obj = "%identity" + external create : string -> frame obj = "ml_gtk_frame_new" + external set_label : [>`frame] obj -> string -> unit + = "ml_gtk_frame_set_label" + external set_label_align : [>`frame] obj -> x:clampf -> y:clampf -> unit + = "ml_gtk_frame_set_label_align" + external set_shadow_type : [>`frame] obj -> shadow_type -> unit + = "ml_gtk_frame_set_shadow_type" + external get_label_xalign : [>`frame] obj -> float + = "ml_gtk_frame_get_label_xalign" + external get_label_yalign : [>`frame] obj -> float + = "ml_gtk_frame_get_label_yalign" + let set_label_align' ?x ?y w = + set_label_align w + ~x:(may_default get_label_xalign w ~opt:x) + ~y:(may_default get_label_yalign w ~opt:y) + let set ?label ?label_xalign ?label_yalign ?shadow_type w = + may label ~f:(set_label w); + if label_xalign <> None || label_yalign <> None then + set_label_align' w ?x:label_xalign ?y:label_yalign; + may shadow_type ~f:(set_shadow_type w) +end + +module AspectFrame = struct + let cast w : aspect_frame obj = Object.try_cast w "GtkAspectFrame" + external create : + label:string -> xalign:clampf -> + yalign:clampf -> ratio:float -> obey_child:bool -> aspect_frame obj + = "ml_gtk_aspect_frame_new" + let create ?(label="") ?(xalign=0.5) ?(yalign=0.5) + ?(ratio=1.0) ?(obey_child=true) () = + create ~label ~xalign ~yalign ~ratio ~obey_child + external set : + [>`aspect] obj -> + xalign:clampf -> yalign:clampf -> ratio:float -> obey_child:bool -> unit + = "ml_gtk_aspect_frame_set" + external get_xalign : [>`aspect] obj -> clampf + = "ml_gtk_aspect_frame_get_xalign" + external get_yalign : [>`aspect] obj -> clampf + = "ml_gtk_aspect_frame_get_yalign" + external get_ratio : [>`aspect] obj -> clampf + = "ml_gtk_aspect_frame_get_ratio" + external get_obey_child : [>`aspect] obj -> bool + = "ml_gtk_aspect_frame_get_obey_child" + let set ?xalign ?yalign ?ratio ?obey_child w = + if xalign <> None || yalign <> None || ratio <> None || obey_child <> None + then set w + ~xalign:(may_default get_xalign w ~opt:xalign) + ~yalign:(may_default get_yalign w ~opt:yalign) + ~ratio:(may_default get_ratio w ~opt:ratio) + ~obey_child:(may_default get_obey_child w ~opt:obey_child) +end + +module HandleBox = struct + let cast w : handle_box obj = Object.try_cast w "GtkHandleBox" + external create : unit -> handle_box obj = "ml_gtk_handle_box_new" + external set_shadow_type : [>`handlebox] obj -> shadow_type -> unit = + "ml_gtk_handle_box_set_shadow_type" + external set_handle_position : [>`handlebox] obj -> position -> unit = + "ml_gtk_handle_box_set_handle_position" + external set_snap_edge : [>`handlebox] obj -> position -> unit = + "ml_gtk_handle_box_set_snap_edge" + module Signals = struct + open GtkSignal + let child_attached : ([>`handlebox],_) t = + { name = "child_attached"; marshaller = Widget.Signals.marshal } + let child_detached : ([>`handlebox],_) t = + { name = "child_detached"; marshaller = Widget.Signals.marshal } + end +end + +module Viewport = struct + let cast w : viewport obj = Object.try_cast w "GtkViewport" + external create : + [>`adjustment] optobj -> [>`adjustment] optobj -> viewport obj + = "ml_gtk_viewport_new" + let create ?hadjustment ?vadjustment () = + create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment) + external get_hadjustment : [>`viewport] obj -> adjustment obj + = "ml_gtk_viewport_get_hadjustment" + external get_vadjustment : [>`viewport] obj -> adjustment obj + = "ml_gtk_viewport_get_vadjustment" + external set_hadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit + = "ml_gtk_viewport_set_hadjustment" + external set_vadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit + = "ml_gtk_viewport_set_vadjustment" + external set_shadow_type : [>`viewport] obj -> shadow_type -> unit + = "ml_gtk_viewport_set_shadow_type" + let set ?hadjustment ?vadjustment ?shadow_type w = + may hadjustment ~f:(set_hadjustment w); + may vadjustment ~f:(set_vadjustment w); + may shadow_type ~f:(set_shadow_type w) +end + +module ScrolledWindow = struct + let cast w : scrolled_window obj = Object.try_cast w "GtkScrolledWindow" + external create : + [>`adjustment] optobj -> [>`adjustment] optobj -> scrolled_window obj + = "ml_gtk_scrolled_window_new" + let create ?hadjustment ?vadjustment () = + create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment) + external set_hadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit + = "ml_gtk_scrolled_window_set_hadjustment" + external set_vadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit + = "ml_gtk_scrolled_window_set_vadjustment" + external get_hadjustment : [>`scrolled] obj -> adjustment obj + = "ml_gtk_scrolled_window_get_hadjustment" + external get_vadjustment : [>`scrolled] obj -> adjustment obj + = "ml_gtk_scrolled_window_get_vadjustment" + external set_policy : [>`scrolled] obj -> policy_type -> policy_type -> unit + = "ml_gtk_scrolled_window_set_policy" + external add_with_viewport : [>`scrolled] obj -> [>`widget] obj -> unit + = "ml_gtk_scrolled_window_add_with_viewport" + external get_hscrollbar_policy : [>`scrolled] obj -> policy_type + = "ml_gtk_scrolled_window_get_hscrollbar_policy" + external get_vscrollbar_policy : [>`scrolled] obj -> policy_type + = "ml_gtk_scrolled_window_get_vscrollbar_policy" + external set_placement : [>`scrolled] obj -> corner_type -> unit + = "ml_gtk_scrolled_window_set_placement" + let set_policy' ?hpolicy ?vpolicy w = + set_policy w + (may_default get_hscrollbar_policy w ~opt:hpolicy) + (may_default get_vscrollbar_policy w ~opt:vpolicy) + let set ?hpolicy ?vpolicy ?placement w = + if hpolicy <> None || vpolicy <> None then + set_policy' w ?hpolicy ?vpolicy; + may placement ~f:(set_placement w) +end + +module Socket = struct + let cast w : socket obj = Object.try_cast w "GtkSocket" + external coerce : [>`socket] obj -> socket obj = "%identity" + external create : unit -> socket obj = "ml_gtk_socket_new" + external steal : [>`socket] obj -> Gdk.xid -> unit = "ml_gtk_socket_steal" +end + +(* +module Invisible = struct + let cast w : socket obj = Object.try_cast w "GtkInvisible" + external coerce : [>`invisible] obj -> invisible obj = "%identity" + external create : unit -> invisible obj = "ml_gtk_invisible_new" +end +*) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml new file mode 100644 index 000000000..6d9ddf500 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml @@ -0,0 +1,148 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Button = struct + let cast w : button obj = Object.try_cast w "GtkButton" + external coerce : [>`button] obj -> button obj = "%identity" + external create : unit -> button obj = "ml_gtk_button_new" + external create_with_label : string -> button obj + = "ml_gtk_button_new_with_label" + let create ?label () = + match label with None -> create () + | Some x -> create_with_label x + external pressed : [>`button] obj -> unit = "ml_gtk_button_pressed" + external released : [>`button] obj -> unit = "ml_gtk_button_released" + external clicked : [>`button] obj -> unit = "ml_gtk_button_clicked" + external enter : [>`button] obj -> unit = "ml_gtk_button_enter" + external leave : [>`button] obj -> unit = "ml_gtk_button_leave" + module Signals = struct + open GtkSignal + let pressed : ([>`button],_) t = + { name = "pressed"; marshaller = marshal_unit } + let released : ([>`button],_) t = + { name = "released"; marshaller = marshal_unit } + let clicked : ([>`button],_) t = + { name = "clicked"; marshaller = marshal_unit } + let enter : ([>`button],_) t = + { name = "enter"; marshaller = marshal_unit } + let leave : ([>`button],_) t = + { name = "leave"; marshaller = marshal_unit } + end +end + +module ToggleButton = struct + let cast w : toggle_button obj = Object.try_cast w "GtkToggleButton" + external coerce : [>`toggle] obj -> toggle_button obj = "%identity" + external toggle_button_create : unit -> toggle_button obj + = "ml_gtk_toggle_button_new" + external toggle_button_create_with_label : string -> toggle_button obj + = "ml_gtk_toggle_button_new_with_label" + external check_button_create : unit -> toggle_button obj + = "ml_gtk_check_button_new" + external check_button_create_with_label : string -> toggle_button obj + = "ml_gtk_check_button_new_with_label" + let create_toggle ?label () = + match label with None -> toggle_button_create () + | Some label -> toggle_button_create_with_label label + let create_check ?label () = + match label with None -> check_button_create () + | Some label -> check_button_create_with_label label + external set_mode : [>`toggle] obj -> bool -> unit + = "ml_gtk_toggle_button_set_mode" + external set_active : [>`toggle] obj -> bool -> unit + = "ml_gtk_toggle_button_set_active" + let set ?active ?draw_indicator w = + may ~f:(set_mode w) draw_indicator; + may ~f:(set_active w) active + external get_active : [>`toggle] obj -> bool + = "ml_gtk_toggle_button_get_active" + external toggled : [>`toggle] obj -> unit + = "ml_gtk_toggle_button_toggled" + module Signals = struct + open GtkSignal + let toggled : ([>`toggle],_) t = + { name = "toggled"; marshaller = marshal_unit } + end +end + +module RadioButton = struct + let cast w : radio_button obj = Object.try_cast w "GtkRadioButton" + external create : radio_button group -> radio_button obj + = "ml_gtk_radio_button_new" + external create_with_label : radio_button group -> string -> radio_button obj + = "ml_gtk_radio_button_new_with_label" + external set_group : [>`radio] obj -> radio_button group -> unit + = "ml_gtk_radio_button_set_group" + let create ?(group = None) ?label () = + match label with None -> create group + | Some label -> create_with_label group label +end + +module Toolbar = struct + let cast w : toolbar obj = Object.try_cast w "GtkToolbar" + external create : orientation -> style:toolbar_style -> toolbar obj + = "ml_gtk_toolbar_new" + let create dir ?(style=`BOTH) () = create dir ~style + external insert_space : [>`toolbar] obj -> pos:int -> unit + = "ml_gtk_toolbar_insert_space" + let insert_space w ?(pos = -1) () = insert_space w ~pos + external insert_button : + [>`toolbar] obj -> kind:[`BUTTON|`TOGGLEBUTTON|`RADIOBUTTON] -> + text:string -> tooltip:string -> + tooltip_private:string -> + icon:[>`widget] optobj -> pos:int -> button obj + = "ml_gtk_toolbar_insert_element_bc" "ml_gtk_toolbar_insert_element" + let insert_button w ?(kind=`BUTTON) ?(text="") ?(tooltip="") + ?(tooltip_private="") ?icon ?(pos = -1) ?callback () = + let b =insert_button w ~kind ~text ~tooltip ~tooltip_private ~pos + ~icon:(Gpointer.optboxed icon) + in + match callback with + | None -> b + | Some c -> GtkSignal.connect b ~sgn:Button.Signals.clicked + ~callback: c; b + external insert_widget : + [>`toolbar] obj -> [>`widget] obj -> + tooltip:string -> tooltip_private:string -> pos:int -> unit + = "ml_gtk_toolbar_insert_widget" + let insert_widget w ?(tooltip="") ?(tooltip_private="") ?(pos = -1) w' = + insert_widget w w' ~tooltip ~tooltip_private ~pos + external set_orientation : [>`toolbar] obj -> orientation -> unit = + "ml_gtk_toolbar_set_orientation" + external set_style : [>`toolbar] obj -> toolbar_style -> unit = + "ml_gtk_toolbar_set_style" + external set_space_size : [>`toolbar] obj -> int -> unit = + "ml_gtk_toolbar_set_space_size" + external set_space_style : [>`toolbar] obj -> [ `EMPTY|`LINE ] -> unit = + "ml_gtk_toolbar_set_space_style" + external set_tooltips : [>`toolbar] obj -> bool -> unit = + "ml_gtk_toolbar_set_tooltips" + external set_button_relief : [>`toolbar] obj -> relief_style -> unit = + "ml_gtk_toolbar_set_button_relief" + external get_button_relief : [>`toolbar] obj -> relief_style = + "ml_gtk_toolbar_get_button_relief" + let set ?orientation ?style ?space_size + ?space_style ?tooltips ?button_relief w = + may orientation ~f:(set_orientation w); + may style ~f:(set_style w); + may space_size ~f:(set_space_size w); + may space_style ~f:(set_space_style w); + may tooltips ~f:(set_tooltips w); + may button_relief ~f:(set_button_relief w) + module Signals = struct + open GtkSignal + external val_orientation : int -> orientation = "ml_Val_orientation" + external val_toolbar_style : int -> toolbar_style + = "ml_Val_toolbar_style" + let orientation_changed : ([>`toolbar],_) t = + let marshal f = marshal_int (fun x -> f (val_orientation x)) in + { name = "orientation_changed"; marshaller = marshal } + let style_changed : ([>`toolbar],_) t = + let marshal f = marshal_int (fun x -> f (val_toolbar_style x)) in + { name = "style_changed"; marshaller = marshal } + end +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml new file mode 100644 index 000000000..5b7f90ec0 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml @@ -0,0 +1,148 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags + +module AccelGroup = struct + external create : unit -> accel_group = "ml_gtk_accel_group_new" + external activate : + accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool + = "ml_gtk_accel_group_activate" + external groups_activate : + 'a obj -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool + = "ml_gtk_accel_groups_activate" + external attach : accel_group -> 'a obj -> unit + = "ml_gtk_accel_group_attach" + external detach : accel_group -> 'a obj -> unit + = "ml_gtk_accel_group_detach" + external lock : accel_group -> unit + = "ml_gtk_accel_group_lock" + external unlock : accel_group -> unit + = "ml_gtk_accel_group_unlock" + external lock_entry : + accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool + = "ml_gtk_accel_group_lock_entry" + external add : + accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> + ?flags:accel_flag list -> + call:'a obj -> sgn:('a,unit->unit) GtkSignal.t -> unit + = "ml_gtk_accel_group_add_bc" "ml_gtk_accel_group_add" + external remove : + accel_group -> + key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> call:'a obj -> unit + = "ml_gtk_accel_group_remove" + external valid : key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool + = "ml_gtk_accelerator_valid" + external set_default_mod_mask : Gdk.Tags.modifier list option -> unit + = "ml_gtk_accelerator_set_default_mod_mask" +end + +module Style = struct + external create : unit -> style = "ml_gtk_style_new" + external copy : style -> style = "ml_gtk_style_copy" + external attach : style -> Gdk.window -> style = "ml_gtk_style_attach" + external detach : style -> unit = "ml_gtk_style_detach" + external set_background : style -> Gdk.window -> state_type -> unit + = "ml_gtk_style_set_background" + external draw_hline : + style -> Gdk.window -> state_type -> x:int -> x:int -> y:int -> unit + = "ml_gtk_draw_hline_bc" "ml_gtk_draw_hline" + external draw_vline : + style -> Gdk.window -> state_type -> y:int -> y:int -> x:int -> unit + = "ml_gtk_draw_vline_bc" "ml_gtk_draw_vline" + external get_bg : style -> state:state_type -> Gdk.Color.t + = "ml_gtk_style_get_bg" + external set_bg : style -> state:state_type -> color:Gdk.Color.t -> unit + = "ml_gtk_style_set_bg" + external get_dark_gc : style -> state:state_type -> Gdk.gc + = "ml_gtk_style_get_dark_gc" + external get_light_gc : style -> state:state_type -> Gdk.gc + = "ml_gtk_style_get_light_gc" + external get_colormap : style -> Gdk.colormap = "ml_gtk_style_get_colormap" + external get_font : style -> Gdk.font = "ml_gtk_style_get_font" + external set_font : style -> Gdk.font -> unit = "ml_gtk_style_set_font" +(* + let set st ?:background ?:font = + let may_set f = may fun:(f st) in + may_set set_background background; + may_set set_font font +*) +end + +module Data = struct + module Signals = struct + open GtkSignal + let disconnect : ([>`data],_) t = + { name = "disconnect"; marshaller = marshal_unit } + end +end + +module Adjustment = struct + external create : + value:float -> lower:float -> upper:float -> + step_incr:float -> page_incr:float -> page_size:float -> adjustment obj + = "ml_gtk_adjustment_new_bc" "ml_gtk_adjustment_new" + external set_value : [>`adjustment] obj -> float -> unit + = "ml_gtk_adjustment_set_value" + external clamp_page : + [>`adjustment] obj -> lower:float -> upper:float -> unit + = "ml_gtk_adjustment_clamp_page" + external get_lower : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_lower" + external get_upper : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_upper" + external get_value : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_value" + external get_step_increment : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_step_increment" + external get_page_increment : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_page_increment" + external get_page_size : [>`adjustment] obj -> float + = "ml_gtk_adjustment_get_page_size" + module Signals = struct + open GtkSignal + let changed : ([>`adjustment],_) t = + { name = "changed"; marshaller = marshal_unit } + let value_changed : ([>`adjustment],_) t = + { name = "value_changed"; marshaller = marshal_unit } + end +end + +module Tooltips = struct + external create : unit -> tooltips obj = "ml_gtk_tooltips_new" + external enable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_enable" + external disable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_disable" + external set_delay : [>`tooltips] obj -> int -> unit + = "ml_gtk_tooltips_set_delay" + external set_tip : + [>`tooltips] obj -> + [>`widget] obj -> ?text:string -> ?privat:string -> unit + = "ml_gtk_tooltips_set_tip" + external set_colors : + [>`tooltips] obj -> + ?foreground:Gdk.Color.t -> ?background:Gdk.Color.t -> unit -> unit + = "ml_gtk_tooltips_set_colors" + let set ?delay ?foreground ?background tt = + may ~f:(set_delay tt) delay; + if foreground <> None || background <> None then + set_colors tt ?foreground ?background () +end + + +module Selection = struct + type t + external selection : t -> Gdk.atom + = "ml_gtk_selection_data_selection" + external target : t -> Gdk.atom + = "ml_gtk_selection_data_target" + external seltype : t -> Gdk.atom + = "ml_gtk_selection_data_type" + external format : t -> int + = "ml_gtk_selection_data_format" + external get_data : t -> string + = "ml_gtk_selection_data_get_data" (* May raise Gpointer.null *) + external set : + t -> typ:Gdk.atom -> format:int -> ?data:string -> unit + = "ml_gtk_selection_data_set" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml new file mode 100644 index 000000000..bef2fedb9 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml @@ -0,0 +1,223 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Editable = struct + let cast w : editable obj = Object.try_cast w "GtkEditable" + external coerce : [>`editable] obj -> editable obj = "%identity" + external select_region : [>`editable] obj -> start:int -> stop:int -> unit + = "ml_gtk_editable_select_region" + external insert_text : [>`editable] obj -> string -> pos:int -> int + = "ml_gtk_editable_insert_text" + external delete_text : [>`editable] obj -> start:int -> stop:int -> unit + = "ml_gtk_editable_delete_text" + external get_chars : [>`editable] obj -> start:int -> stop:int -> string + = "ml_gtk_editable_get_chars" + external cut_clipboard : [>`editable] obj -> unit + = "ml_gtk_editable_cut_clipboard" + external copy_clipboard : [>`editable] obj -> unit + = "ml_gtk_editable_copy_clipboard" + external paste_clipboard : [>`editable] obj -> unit + = "ml_gtk_editable_paste_clipboard" + external claim_selection : + [>`editable] obj -> claim:bool -> time:int -> unit + = "ml_gtk_editable_claim_selection" + external delete_selection : [>`editable] obj -> unit + = "ml_gtk_editable_delete_selection" + external changed : [>`editable] obj -> unit = "ml_gtk_editable_changed" + external set_position : [>`editable] obj -> int -> unit + = "ml_gtk_editable_set_position" + external get_position : [>`editable] obj -> int + = "ml_gtk_editable_get_position" + external set_editable : [>`editable] obj -> bool -> unit + = "ml_gtk_editable_set_editable" + external selection_start_pos : [>`editable] obj -> int + = "ml_gtk_editable_selection_start_pos" + external selection_end_pos : [>`editable] obj -> int + = "ml_gtk_editable_selection_end_pos" + external has_selection : [>`editable] obj -> bool + = "ml_gtk_editable_has_selection" + module Signals = struct + open GtkArgv + open GtkSignal + let activate : ([>`editable],_) t = + { name = "activate"; marshaller = marshal_unit } + let changed : ([>`editable],_) t = + { name = "changed"; marshaller = marshal_unit } + let marshal_insert f argv = function + | STRING _ :: INT len :: POINTER(Some pos) :: _ -> + (* XXX These two accesses are implementation-dependent *) + let s = string_at_pointer (get_pointer argv ~pos:0) ~len + and pos = int_at_pointer pos in + f s ~pos + | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_insert" + let insert_text : ([>`editable],_) t = + { name = "insert_text"; marshaller = marshal_insert } + let marshal_delete f _ = function + | INT start :: INT stop :: _ -> + f ~start ~stop + | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_delete" + let delete_text : ([>`editable],_) t = + { name = "delete_text"; marshaller = marshal_delete } + end +end + +module Entry = struct + let cast w : entry obj = Object.try_cast w "GtkEntry" + external coerce : [>`entry] obj -> entry obj = "%identity" + external create : unit -> entry obj = "ml_gtk_entry_new" + external create_with_max_length : int -> entry obj + = "ml_gtk_entry_new_with_max_length" + let create ?max_length () = + match max_length with None -> create () + | Some len -> create_with_max_length len + external set_text : [>`entry] obj -> string -> unit + = "ml_gtk_entry_set_text" + external append_text : [>`entry] obj -> string -> unit + = "ml_gtk_entry_append_text" + external prepend_text : [>`entry] obj -> string -> unit + = "ml_gtk_entry_prepend_text" + external get_text : [>`entry] obj -> string = "ml_gtk_entry_get_text" + external set_visibility : [>`entry] obj -> bool -> unit + = "ml_gtk_entry_set_visibility" + external set_max_length : [>`entry] obj -> int -> unit + = "ml_gtk_entry_set_max_length" + let set ?text ?visibility ?max_length w = + let may_set f = may ~f:(f w) in + may_set set_text text; + may_set set_visibility visibility; + may_set set_max_length max_length + external text_length : [>`entry] obj -> int + = "ml_GtkEntry_text_length" +end + +module SpinButton = struct + let cast w : spin_button obj = Object.try_cast w "GtkSpinButton" + external create : + [>`adjustment] optobj -> rate:float -> digits:int -> spin_button obj + = "ml_gtk_spin_button_new" + let create ?adjustment ?(rate=0.5) ?(digits=0) () = + create (Gpointer.optboxed adjustment) ~rate ~digits + external configure : + [>`spinbutton] obj -> adjustment:[>`adjustment] obj -> + rate:float -> digits:int -> unit + = "ml_gtk_spin_button_configure" + external set_adjustment : [>`spinbutton] obj -> [>`adjustment] obj -> unit + = "ml_gtk_spin_button_set_adjustment" + external get_adjustment : [>`spinbutton] obj -> adjustment obj + = "ml_gtk_spin_button_get_adjustment" + external set_digits : [>`spinbutton] obj -> int -> unit + = "ml_gtk_spin_button_set_digits" + external get_value : [>`spinbutton] obj -> float + = "ml_gtk_spin_button_get_value_as_float" + let get_value_as_int w = truncate (get_value w +. 0.5) + external set_value : [>`spinbutton] obj -> float -> unit + = "ml_gtk_spin_button_set_value" + external set_update_policy : + [>`spinbutton] obj -> [`ALWAYS|`IF_VALID] -> unit + = "ml_gtk_spin_button_set_update_policy" + external set_numeric : [>`spinbutton] obj -> bool -> unit + = "ml_gtk_spin_button_set_numeric" + external spin : [>`spinbutton] obj -> spin_type -> unit + = "ml_gtk_spin_button_spin" + external set_wrap : [>`spinbutton] obj -> bool -> unit + = "ml_gtk_spin_button_set_wrap" + external set_shadow_type : [>`spinbutton] obj -> shadow_type -> unit + = "ml_gtk_spin_button_set_shadow_type" + external set_snap_to_ticks : [>`spinbutton] obj -> bool -> unit + = "ml_gtk_spin_button_set_snap_to_ticks" + external update : [>`spinbutton] obj -> unit + = "ml_gtk_spin_button_update" + let set ?adjustment ?digits ?value ?update_policy + ?numeric ?wrap ?shadow_type ?snap_to_ticks w = + let may_set f = may ~f:(f w) in + may_set set_adjustment adjustment; + may_set set_digits digits; + may_set set_value value; + may_set set_update_policy update_policy; + may_set set_numeric numeric; + may_set set_wrap wrap; + may_set set_shadow_type shadow_type; + may_set set_snap_to_ticks snap_to_ticks +end + +module Text = struct + let cast w : text obj = Object.try_cast w "GtkText" + external create : [>`adjustment] optobj -> [>`adjustment] optobj -> text obj + = "ml_gtk_text_new" + let create ?hadjustment ?vadjustment () = + create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment) + external set_word_wrap : [>`text] obj -> bool -> unit + = "ml_gtk_text_set_word_wrap" + external set_line_wrap : [>`text] obj -> bool -> unit + = "ml_gtk_text_set_line_wrap" + external set_adjustment : + [>`text] obj -> ?horizontal:[>`adjustment] obj -> + ?vertical:[>`adjustment] obj -> unit -> unit + = "ml_gtk_text_set_adjustments" + external get_hadjustment : [>`text] obj -> adjustment obj + = "ml_gtk_text_get_hadj" + external get_vadjustment : [>`text] obj -> adjustment obj + = "ml_gtk_text_get_vadj" + external set_point : [>`text] obj -> int -> unit + = "ml_gtk_text_set_point" + external get_point : [>`text] obj -> int = "ml_gtk_text_get_point" + external get_length : [>`text] obj -> int = "ml_gtk_text_get_length" + external freeze : [>`text] obj -> unit = "ml_gtk_text_freeze" + external thaw : [>`text] obj -> unit = "ml_gtk_text_thaw" + external insert : + [>`text] obj -> ?font:Gdk.font -> ?foreground:Gdk.Color.t -> + ?background:Gdk.Color.t -> string -> unit + = "ml_gtk_text_insert" + let set ?hadjustment ?vadjustment ?word_wrap w = + if hadjustment <> None || vadjustment <> None then + set_adjustment w ?horizontal: hadjustment ?vertical: vadjustment (); + may word_wrap ~f:(set_word_wrap w) +end + +module Combo = struct + let cast w : combo obj = Object.try_cast w "GtkCombo" + external create : unit -> combo obj = "ml_gtk_combo_new" + external set_value_in_list : + [>`combo] obj -> ?required:bool -> ?ok_if_empty:bool -> unit -> unit + = "ml_gtk_combo_set_value_in_list" + external set_use_arrows : [>`combo] obj -> bool -> unit + = "ml_gtk_combo_set_use_arrows" + external set_use_arrows_always : [>`combo] obj -> bool -> unit + = "ml_gtk_combo_set_use_arrows_always" + external set_case_sensitive : [>`combo] obj -> bool -> unit + = "ml_gtk_combo_set_case_sensitive" + external set_item_string : [>`combo] obj -> [>`item] obj -> string -> unit + = "ml_gtk_combo_set_item_string" + external entry : [>`combo] obj -> entry obj= "ml_gtk_combo_entry" + external list : [>`combo] obj -> liste obj= "ml_gtk_combo_list" + let set_popdown_strings combo strings = + GtkList.Liste.clear_items (list combo) ~start:0 ~stop:(-1); + List.iter strings ~f: + begin fun s -> + let li = GtkList.ListItem.create_with_label s in + Widget.show li; + Container.add (list combo) li + end + let set_use_arrows' w (mode : [`NEVER|`DEFAULT|`ALWAYS]) = + let def,always = + match mode with + `NEVER -> false, false + | `DEFAULT -> true, false + | `ALWAYS -> true, true + in + set_use_arrows w def; + set_use_arrows_always w always + let set ?popdown_strings ?use_arrows + ?case_sensitive ?value_in_list ?ok_if_empty w = + may popdown_strings ~f:(set_popdown_strings w); + may use_arrows ~f:(set_use_arrows' w); + may case_sensitive ~f:(set_case_sensitive w); + if value_in_list <> None || ok_if_empty <> None then + set_value_in_list w ?required:value_in_list ?ok_if_empty () + external disable_activate : [>`combo] obj -> unit + = "ml_gtk_combo_disable_activate" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml new file mode 100644 index 000000000..5ce40db5f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml @@ -0,0 +1,5 @@ +(* $Id$ *) + +(* Does the initialization for toplevels *) + +let locale = GtkMain.Main.init () diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml new file mode 100644 index 000000000..4d2ae0951 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml @@ -0,0 +1,294 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module ListItem = struct + let cast w : list_item obj = Object.try_cast w "GtkListItem" + external create : unit -> list_item obj = "ml_gtk_list_item_new" + external create_with_label : string -> list_item obj + = "ml_gtk_list_item_new_with_label" + let create ?label () = + match label with None -> create () + | Some label -> create_with_label label +end + +module Liste = struct + let cast w : liste obj = Object.try_cast w "GtkList" + external create : unit -> liste obj = "ml_gtk_list_new" + external insert_item : + [>`list] obj -> [>`listitem] obj -> pos:int -> unit + = "ml_gtk_list_insert_item" + let insert_items l wl ~pos = + let wl = if pos < 0 then wl else List.rev wl in + List.iter wl ~f:(insert_item l ~pos) + let append_items l = insert_items l ~pos:(-1) + let prepend_items l = insert_items l ~pos:0 + external clear_items : [>`list] obj -> start:int -> stop:int -> unit = + "ml_gtk_list_clear_items" + external select_item : [>`list] obj -> pos:int -> unit + = "ml_gtk_list_select_item" + external unselect_item : [>`list] obj -> pos:int -> unit + = "ml_gtk_list_unselect_item" + external select_child : [>`list] obj -> [>`listitem] obj -> unit + = "ml_gtk_list_select_child" + external unselect_child : [>`list] obj -> [>`listitem] obj -> unit + = "ml_gtk_list_unselect_child" + external child_position : [>`list] obj -> [>`listitem] obj -> int + = "ml_gtk_list_child_position" + external set_selection_mode : [>`list] obj -> selection_mode -> unit + = "ml_gtk_list_set_selection_mode" + module Signals = struct + open GtkSignal + let selection_changed : ([>`list],_) t = + { name = "selection_changed"; marshaller = marshal_unit } + let select_child : ([>`list],_) t = + { name = "select_child"; marshaller = Widget.Signals.marshal } + let unselect_child : ([>`list],_) t = + { name = "unselect_child"; marshaller = Widget.Signals.marshal } + end +end + +module CList = struct + let cast w : clist obj = Object.try_cast w "GtkCList" + external create : cols:int -> clist obj = "ml_gtk_clist_new" + external create_with_titles : string array -> clist obj + = "ml_gtk_clist_new_with_titles" + external get_rows : [>`clist] obj -> int = "ml_gtk_clist_get_rows" + external get_columns : [>`clist] obj -> int = "ml_gtk_clist_get_columns" + external get_focus_row : [>`clist] obj -> int + = "ml_gtk_clist_get_focus_row" + external set_hadjustment : [>`clist] obj -> [>`adjustment] obj -> unit + = "ml_gtk_clist_set_hadjustment" + external set_vadjustment : [>`clist] obj -> [>`adjustment] obj -> unit + = "ml_gtk_clist_set_vadjustment" + external get_hadjustment : [>`clist] obj -> adjustment obj + = "ml_gtk_clist_get_hadjustment" + external get_vadjustment : [>`clist] obj -> adjustment obj + = "ml_gtk_clist_get_vadjustment" + external set_shadow_type : [>`clist] obj -> shadow_type -> unit + = "ml_gtk_clist_set_shadow_type" + external set_selection_mode : [>`clist] obj -> selection_mode -> unit + = "ml_gtk_clist_set_selection_mode" + external set_reorderable : [>`clist] obj -> bool -> unit + = "ml_gtk_clist_set_reorderable" + external set_use_drag_icons : [>`clist] obj -> bool -> unit + = "ml_gtk_clist_set_use_drag_icons" + external set_button_actions : + [>`clist] obj -> int -> button_action list -> unit + = "ml_gtk_clist_set_button_actions" + external freeze : [>`clist] obj -> unit = "ml_gtk_clist_freeze" + external thaw : [>`clist] obj -> unit = "ml_gtk_clist_thaw" + external column_titles_show : [>`clist] obj -> unit + = "ml_gtk_clist_column_titles_show" + external column_titles_hide : [>`clist] obj -> unit + = "ml_gtk_clist_column_titles_hide" + external column_title_active : [>`clist] obj -> int -> unit + = "ml_gtk_clist_column_title_active" + external column_title_passive : [>`clist] obj -> int -> unit + = "ml_gtk_clist_column_title_passive" + external column_titles_active : [>`clist] obj -> unit + = "ml_gtk_clist_column_titles_active" + external column_titles_passive : [>`clist] obj -> unit + = "ml_gtk_clist_column_titles_passive" + external set_column_title : [>`clist] obj -> int -> string -> unit + = "ml_gtk_clist_set_column_title" + external get_column_title : [>`clist] obj -> int -> string + = "ml_gtk_clist_get_column_title" + external set_column_widget : [>`clist] obj -> int -> [>`widget] obj -> unit + = "ml_gtk_clist_set_column_widget" + external get_column_widget : [>`clist] obj -> int -> widget obj + = "ml_gtk_clist_get_column_widget" + external set_column_justification : + [>`clist] obj -> int -> justification -> unit + = "ml_gtk_clist_set_column_justification" + external set_column_visibility : [>`clist] obj -> int -> bool -> unit + = "ml_gtk_clist_set_column_visibility" + external set_column_resizeable : [>`clist] obj -> int -> bool -> unit + = "ml_gtk_clist_set_column_resizeable" + external set_column_auto_resize : [>`clist] obj -> int -> bool -> unit + = "ml_gtk_clist_set_column_auto_resize" + external columns_autosize : [>`clist] obj -> unit + = "ml_gtk_clist_columns_autosize" + external optimal_column_width : [>`clist] obj -> int -> int + = "ml_gtk_clist_optimal_column_width" + external set_column_width : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_set_column_width" + external set_column_min_width : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_set_column_min_width" + external set_column_max_width : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_set_column_max_width" + external set_row_height : [>`clist] obj -> int -> unit + = "ml_gtk_clist_set_row_height" + external moveto : + [>`clist] obj -> + int -> int -> row_align:clampf -> col_align:clampf -> unit + = "ml_gtk_clist_moveto" + external row_is_visible : [>`clist] obj -> int -> visibility + = "ml_gtk_clist_row_is_visible" + external get_cell_type : [>`clist] obj -> int -> int -> cell_type + = "ml_gtk_clist_get_cell_type" + external set_text : [>`clist] obj -> int -> int -> string -> unit + = "ml_gtk_clist_set_text" + external get_text : [>`clist] obj -> int -> int -> string + = "ml_gtk_clist_get_text" + external set_pixmap : + [>`clist] obj -> + int -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit + = "ml_gtk_clist_set_pixmap" + external get_pixmap : + [>`clist] obj -> int -> int -> Gdk.pixmap option * Gdk.bitmap option + = "ml_gtk_clist_get_pixmap" + external set_pixtext : + [>`clist] obj -> int -> int -> + string -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit + = "ml_gtk_clist_set_pixtext_bc" "ml_gtk_clist_set_pixtext" + external set_foreground : + [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit + = "ml_gtk_clist_set_foreground" + external set_background : + [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit + = "ml_gtk_clist_set_background" + external get_cell_style : [>`clist] obj -> int -> int -> Gtk.style + = "ml_gtk_clist_get_cell_style" + external set_cell_style : [>`clist] obj -> int -> int -> Gtk.style -> unit + = "ml_gtk_clist_set_cell_style" + external get_row_style : [>`clist] obj -> row:int -> Gtk.style + = "ml_gtk_clist_get_row_style" + external set_row_style : [>`clist] obj -> row:int -> Gtk.style -> unit + = "ml_gtk_clist_set_row_style" + external set_selectable : [>`clist] obj -> row:int -> bool -> unit + = "ml_gtk_clist_set_selectable" + external get_selectable : [>`clist] obj -> row:int -> bool + = "ml_gtk_clist_get_selectable" + external set_shift : + [>`clist] obj -> int -> int -> vertical:int -> horizontal:int -> unit + = "ml_gtk_clist_set_shift" + external insert : [>`clist] obj -> row:int -> Gpointer.optstring array -> int + = "ml_gtk_clist_insert" + let insert w ~row texts = + let len = get_columns w in + if List.length texts > len then invalid_arg "CList.insert"; + let arr = Array.create (get_columns w) None in + List.fold_left texts ~init:0 + ~f:(fun pos text -> arr.(pos) <- text; pos+1); + let r = insert w ~row (Array.map ~f:Gpointer.optstring arr) in + if r = -1 then invalid_arg "GtkCList::insert"; + r + external remove : [>`clist] obj -> row:int -> unit + = "ml_gtk_clist_remove" + external set_row_data : [>`clist] obj -> row:int -> Obj.t -> unit + = "ml_gtk_clist_set_row_data" + external get_row_data : [>`clist] obj -> row:int -> Obj.t + = "ml_gtk_clist_get_row_data" + external select : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_select_row" + external unselect : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_unselect_row" + external clear : [>`clist] obj -> unit = "ml_gtk_clist_clear" + external get_row_column : [>`clist] obj -> x:int -> y:int -> int * int + = "ml_gtk_clist_get_selection_info" + external select_all : [>`clist] obj -> unit = "ml_gtk_clist_select_all" + external unselect_all : [>`clist] obj -> unit = "ml_gtk_clist_unselect_all" + external swap_rows : [>`clist] obj -> int -> int -> unit + = "ml_gtk_clist_swap_rows" + external row_move : [>`clist] obj -> int -> dst:int -> unit + = "ml_gtk_clist_row_move" + external set_sort_column : [>`clist] obj -> int -> unit + = "ml_gtk_clist_set_sort_column" + external set_sort_type : [>`clist] obj -> sort_type -> unit + = "ml_gtk_clist_set_sort_type" + external sort : [>`clist] obj -> unit + = "ml_gtk_clist_sort" + external set_auto_sort : [>`clist] obj -> bool -> unit + = "ml_gtk_clist_set_auto_sort" + let set_titles_show w = function + true -> column_titles_show w + | false -> column_titles_hide w + let set_titles_active w = function + true -> column_titles_active w + | false -> column_titles_passive w + let set ?hadjustment ?vadjustment ?shadow_type + ?(button_actions=[]) ?selection_mode ?reorderable + ?use_drag_icons ?row_height ?titles_show ?titles_active w = + let may_set f param = may param ~f:(f w) in + may_set set_hadjustment hadjustment; + may_set set_vadjustment vadjustment; + may_set set_shadow_type shadow_type; + List.iter button_actions ~f:(fun (n,act) -> set_button_actions w n act); + may_set set_selection_mode selection_mode; + may_set set_reorderable reorderable; + may_set set_use_drag_icons use_drag_icons; + may_set set_row_height row_height; + may_set set_titles_show titles_show; + may_set set_titles_active titles_active + let set_sort w ?auto ?column ?dir:sort_type () = + may auto ~f:(set_auto_sort w); + may column ~f:(set_sort_column w); + may sort_type ~f:(set_sort_type w) + let set_cell w ?text ?pixmap ?mask ?(spacing=0) ?style row col = + begin match text, pixmap with + | Some text, None -> + set_text w row col text + | None, Some pm -> + set_pixmap w row col pm (Gpointer.optboxed mask) + | Some text, Some pm -> + set_pixtext w row col text spacing pm (Gpointer.optboxed mask) + | _ -> () + end; + may style ~f:(set_cell_style w row col) + let set_column w ?widget ?title ?title_active ?justification + ?visibility ?resizeable ?auto_resize ?width ?min_width ?max_width + col = + let may_set f param = may param ~f:(f w col) in + may_set set_column_widget widget; + may_set set_column_title title; + may title_active + ~f:(fun active -> if active then column_title_active w col + else column_title_passive w col); + may_set set_column_justification justification; + may_set set_column_visibility visibility; + may_set set_column_resizeable resizeable; + may_set set_column_auto_resize auto_resize; + may_set set_column_width width; + may_set set_column_min_width min_width; + may_set set_column_max_width max_width + let set_row w ?foreground ?background ?selectable ?style row = + let may_set f = may ~f:(f w ~row) in + may_set set_foreground foreground; + may_set set_background background; + may_set set_selectable selectable; + may_set set_row_style style + module Signals = struct + open GtkArgv + open GtkSignal + let marshal_select f argv = function + | INT row :: INT column :: POINTER p :: _ -> + let event : GdkEvent.Button.t option = + may_map ~f:GdkEvent.unsafe_copy p + in + f ~row ~column ~event + | _ -> invalid_arg "GtkList.CList.Signals.marshal_select" + let select_row : ([>`clist],_) t = + { name = "select_row"; marshaller = marshal_select } + let unselect_row : ([>`clist],_) t = + { name = "unselect_row"; marshaller = marshal_select } + let click_column : ([>`clist],_) t = + { name = "click_column"; marshaller = marshal_int } + external val_scroll_type : int -> scroll_type = "ml_Val_scroll_type" + let marshal_scroll f argv = function + | INT st :: FLOAT (pos : clampf) :: _ -> + f (val_scroll_type st) ~pos + | _ -> invalid_arg "GtkList.CList.Signals.marshal_scroll" + let scroll_horizontal : ([>`clist],_) t = + { name = "scroll_horizontal"; marshaller = marshal_scroll } + let scroll_vertical : ([>`clist],_) t = + { name = "scroll_vertical"; marshaller = marshal_scroll } + external emit_scroll : + 'a obj -> name:string -> Tags.scroll_type -> pos:clampf -> unit + = "ml_gtk_signal_emit_scroll" + let emit_scroll = emit ~emitter:emit_scroll + end +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml new file mode 100644 index 000000000..3c4561429 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml @@ -0,0 +1,49 @@ +(* $Id$ *) + +open Gtk + +let _ = Callback.register_exception "gtkerror" (Error"") + +module Timeout = struct + type id + external add : ms:int -> callback:(GtkArgv.t -> unit) -> id + = "ml_gtk_timeout_add" + let add ~ms ~callback = + add ~ms ~callback:(fun arg -> GtkArgv.set_result arg (`BOOL(callback ()))) + external remove : id -> unit = "ml_gtk_timeout_remove" +end + +module Main = struct + external init : string array -> string array = "ml_gtk_init" + (* external exit : int -> unit = "ml_gtk_exit" *) + external set_locale : unit -> string = "ml_gtk_set_locale" + (* external main : unit -> unit = "ml_gtk_main" *) + let init () = + let locale = set_locale () in + let argv = init Sys.argv in + Array.blit ~src:argv ~dst:Sys.argv ~len:(Array.length argv) + ~src_pos:0 ~dst_pos:0; + Obj.truncate (Obj.repr Sys.argv) ~len:(Array.length argv); + locale + open Glib + let loops = ref [] + let main () = + let loop = (Main.create true) in + loops := loop :: !loops; + while Main.is_running loop do Main.iteration true done; + loops := List.tl !loops + and quit () = Main.quit (List.hd !loops) + external get_version : unit -> int * int * int = "ml_gtk_get_version" + let version = get_version () + + let flush = Gdk.X.flush +end + +module Grab = struct + external add : [>`widget] obj -> unit = "ml_gtk_grab_add" + external remove : [>`widget] obj -> unit = "ml_gtk_grab_remove" + external get_current : unit -> widget obj= "ml_gtk_grab_get_current" +end + +let _ = Glib.set_warning_handler (fun msg -> raise (Warning msg)) +let _ = Glib.set_print_handler (fun msg -> print_string msg) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml new file mode 100644 index 000000000..2f1eb30f0 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml @@ -0,0 +1,144 @@ +(* $Id$ *) + +open Gaux +open Gtk +open GtkBase + +module MenuItem = struct + let cast w : menu_item obj = Object.try_cast w "GtkMenuItem" + external coerce : [>`menuitem] obj -> menu_item obj = "%identity" + external create : unit -> menu_item obj = "ml_gtk_menu_item_new" + external create_with_label : string -> menu_item obj + = "ml_gtk_menu_item_new_with_label" + external tearoff_create : unit -> menu_item obj + = "ml_gtk_tearoff_menu_item_new" + let create ?label () = + match label with None -> create () + | Some label -> create_with_label label + external set_submenu : [>`menuitem] obj -> [>`menu] obj -> unit + = "ml_gtk_menu_item_set_submenu" + external remove_submenu : [>`menuitem] obj -> unit + = "ml_gtk_menu_item_remove_submenu" + external configure : + [>`menuitem] obj -> show_toggle:bool -> show_indicator:bool -> unit + = "ml_gtk_menu_item_configure" + external activate : [>`menuitem] obj -> unit + = "ml_gtk_menu_item_activate" + external right_justify : [>`menuitem] obj -> unit + = "ml_gtk_menu_item_right_justify" + module Signals = struct + open GtkSignal + let activate : ([>`menuitem],_) t = + { name = "activate"; marshaller = marshal_unit } + let activate_item : ([>`menuitem],_) t = + { name = "activate_item"; marshaller = marshal_unit } + end +end + +module CheckMenuItem = struct + let cast w : check_menu_item obj = Object.try_cast w "GtkCheckMenuItem" + external coerce : [>`checkmenuitem] obj -> check_menu_item obj = "%identity" + external create : unit -> check_menu_item obj = "ml_gtk_check_menu_item_new" + external create_with_label : string -> check_menu_item obj + = "ml_gtk_check_menu_item_new_with_label" + let create ?label () = + match label with None -> create () + | Some label -> create_with_label label + external set_active : [>`checkmenuitem] obj -> bool -> unit + = "ml_gtk_check_menu_item_set_active" + external get_active : [>`checkmenuitem] obj -> bool + = "ml_gtk_check_menu_item_get_active" + external set_show_toggle : [>`checkmenuitem] obj -> bool -> unit + = "ml_gtk_check_menu_item_set_show_toggle" + let set ?active ?show_toggle w = + may active ~f:(set_active w); + may show_toggle ~f:(set_show_toggle w) + external toggled : [>`checkmenuitem] obj -> unit + = "ml_gtk_check_menu_item_toggled" + module Signals = struct + open GtkSignal + let toggled : ([>`checkmenuitem],_) t = + { name = "toggled"; marshaller = marshal_unit } + end +end + +module RadioMenuItem = struct + let cast w : radio_menu_item obj = Object.try_cast w "GtkRadioMenuItem" + external create : radio_menu_item group -> radio_menu_item obj + = "ml_gtk_radio_menu_item_new" + external create_with_label : + radio_menu_item group -> string -> radio_menu_item obj + = "ml_gtk_radio_menu_item_new_with_label" + let create ?(group = None) ?label () = + match label with None -> create group + | Some label -> create_with_label group label + external set_group : [>`radiomenuitem] obj -> radio_menu_item group -> unit + = "ml_gtk_radio_menu_item_set_group" +end + +module OptionMenu = struct + let cast w : option_menu obj = Object.try_cast w "GtkOptionMenu" + external create : unit -> option_menu obj = "ml_gtk_option_menu_new" + external get_menu : [>`optionmenu] obj -> menu obj + = "ml_gtk_option_menu_get_menu" + external set_menu : [>`optionmenu] obj -> [>`menu] obj -> unit + = "ml_gtk_option_menu_set_menu" + external remove_menu : [>`optionmenu] obj -> unit + = "ml_gtk_option_menu_remove_menu" + external set_history : [>`optionmenu] obj -> int -> unit + = "ml_gtk_option_menu_set_history" + let set ?menu ?history w = + may menu ~f:(set_menu w); + may history ~f:(set_history w) +end + +module MenuShell = struct + let cast w : menu_shell obj = Object.try_cast w "GtkMenuShell" + external coerce : [>`menushell] obj -> menu_shell obj = "%identity" + external append : [>`menushell] obj -> [>`widget] obj -> unit + = "ml_gtk_menu_shell_append" + external prepend : [>`menushell] obj -> [>`widget] obj -> unit + = "ml_gtk_menu_shell_prepend" + external insert : [>`menushell] obj -> [>`widget] obj -> pos:int -> unit + = "ml_gtk_menu_shell_insert" + external deactivate : [>`menushell] obj -> unit + = "ml_gtk_menu_shell_deactivate" + module Signals = struct + open GtkSignal + let deactivate : ([>`menushell],_) t = + { name = "deactivate"; marshaller = marshal_unit } + end +end + +module Menu = struct + let cast w : menu obj = Object.try_cast w "GtkMenu" + external create : unit -> menu obj = "ml_gtk_menu_new" + external popup : + [>`menu] obj -> [>`menushell] optobj -> + [>`menuitem] optobj -> button:int -> time:int -> unit + = "ml_gtk_menu_popup" + let popup ?parent_menu ?parent_item w = + popup w (Gpointer.optboxed parent_menu) (Gpointer.optboxed parent_item) + external popdown : [>`menu] obj -> unit = "ml_gtk_menu_popdown" + external get_active : [>`menu] obj -> widget obj= "ml_gtk_menu_get_active" + external set_active : [>`menu] obj -> int -> unit = "ml_gtk_menu_set_active" + external set_accel_group : [>`menu] obj -> accel_group -> unit + = "ml_gtk_menu_set_accel_group" + external get_accel_group : [>`menu] obj -> accel_group + = "ml_gtk_menu_get_accel_group" + external ensure_uline_accel_group : [>`menu] obj -> accel_group + = "ml_gtk_menu_ensure_uline_accel_group" + external attach_to_widget : [>`menu] obj -> [>`widget] obj -> unit + = "ml_gtk_menu_attach_to_widget" + external get_attach_widget : [>`menu] obj -> widget obj + = "ml_gtk_menu_get_attach_widget" + external detach : [>`menu] obj -> unit = "ml_gtk_menu_detach" + let set ?active ?accel_group w = + may active ~f:(set_active w); + may accel_group ~f:(set_accel_group w) +end + +module MenuBar = struct + let cast w : menu_bar obj = Object.try_cast w "GtkMenuBar" + external create : unit -> menu_bar obj = "ml_gtk_menu_bar_new" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml new file mode 100644 index 000000000..ded7f487a --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml @@ -0,0 +1,323 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module GammaCurve = struct + let cast w : gamma_curve obj = Object.try_cast w "GtkGammaCurve" + external create : unit -> gamma_curve obj = "ml_gtk_gamma_curve_new" + external get_gamma : [>`gamma] obj -> float = "ml_gtk_gamma_curve_get_gamma" +end + +module ColorSelection = struct + let cast w : color_selection obj = Object.try_cast w "GtkColorSelection" + external create : unit -> color_selection obj = "ml_gtk_color_selection_new" + external create_dialog : string -> color_selection_dialog obj + = "ml_gtk_color_selection_dialog_new" + external set_update_policy : [>`colorsel] obj -> update_type -> unit + = "ml_gtk_color_selection_set_update_policy" + external set_opacity : [>`colorsel] obj -> bool -> unit + = "ml_gtk_color_selection_set_opacity" + let set ?update_policy ?opacity w = + may update_policy ~f:(set_update_policy w); + may opacity ~f:(set_opacity w) + external set_color : + [>`colorsel] obj -> + red:float -> green:float -> blue:float -> ?opacity:float -> unit + = "ml_gtk_color_selection_set_color" + external get_color : [>`colorsel] obj -> color + = "ml_gtk_color_selection_get_color" + + external ok_button : [>`colorseldialog] obj -> button obj = + "ml_gtk_color_selection_dialog_ok_button" + external cancel_button : [>`colorseldialog] obj -> button obj = + "ml_gtk_color_selection_dialog_cancel_button" + external help_button : [>`colorseldialog] obj -> button obj = + "ml_gtk_color_selection_dialog_help_button" + external colorsel : [>`colorseldialog] obj -> color_selection obj = + "ml_gtk_color_selection_dialog_colorsel" + module Signals = struct + open GtkSignal + let color_changed : ([>`colorsel],_) t = + { name = "color_changed"; marshaller = marshal_unit } + end +end + +module Statusbar = struct + let cast w : statusbar obj = Object.try_cast w "GtkStatusbar" + external create : unit -> statusbar obj = "ml_gtk_statusbar_new" + external get_context : [>`statusbar] obj -> string -> statusbar_context + = "ml_gtk_statusbar_get_context_id" + external push : + [>`statusbar] obj -> + statusbar_context -> text:string -> statusbar_message + = "ml_gtk_statusbar_push" + external pop : [>`statusbar] obj -> statusbar_context -> unit + = "ml_gtk_statusbar_pop" + external remove : + [>`statusbar] obj -> statusbar_context -> statusbar_message -> unit + = "ml_gtk_statusbar_remove" + module Signals = struct + open GtkSignal + let text_pushed : ([>`statusbar],_) t = + let marshal f _ = function + | GtkArgv.INT ctx :: GtkArgv.STRING s :: _ -> + f (Obj.magic ctx : statusbar_context) s + | _ -> invalid_arg "GtkMisc.Statusbar.Signals.marshal_text" + in + { name = "text_pushed"; marshaller = marshal } + end +end + +module Calendar = struct + let cast w : calendar obj = Object.try_cast w "GtkCalendar" + external create : unit -> calendar obj = "ml_gtk_calendar_new" + external select_month : [>`calendar] obj -> month:int -> year:int -> unit + = "ml_gtk_calendar_select_month" + external select_day : [>`calendar] obj -> int -> unit + = "ml_gtk_calendar_select_day" + external mark_day : [>`calendar] obj -> int -> unit + = "ml_gtk_calendar_mark_day" + external unmark_day : [>`calendar] obj -> int -> unit + = "ml_gtk_calendar_unmark_day" + external clear_marks : [>`calendar] obj -> unit + = "ml_gtk_calendar_clear_marks" + external display_options : + [>`calendar] obj -> Tags.calendar_display_options list -> unit + = "ml_gtk_calendar_display_options" + external get_date : [>`calendar] obj -> int * int * int + = "ml_gtk_calendar_get_date" (* year * month * day *) + external freeze : [>`calendar] obj -> unit + = "ml_gtk_calendar_freeze" + external thaw : [>`calendar] obj -> unit + = "ml_gtk_calendar_thaw" + module Signals = struct + open GtkSignal + let month_changed : ([>`calendar],_) t = + { name = "month_changed"; marshaller = marshal_unit } + let day_selected : ([>`calendar],_) t = + { name = "day_selected"; marshaller = marshal_unit } + let day_selected_double_click : ([>`calendar],_) t = + { name = "day_selected_double_click"; marshaller = marshal_unit } + let prev_month : ([>`calendar],_) t = + { name = "prev_month"; marshaller = marshal_unit } + let next_month : ([>`calendar],_) t = + { name = "next_month"; marshaller = marshal_unit } + let prev_year : ([>`calendar],_) t = + { name = "prev_year"; marshaller = marshal_unit } + let next_year : ([>`calendar],_) t = + { name = "next_year"; marshaller = marshal_unit } + end +end + +module DrawingArea = struct + let cast w : drawing_area obj = Object.try_cast w "GtkDrawingArea" + external create : unit -> drawing_area obj = "ml_gtk_drawing_area_new" + external size : [>`drawing] obj -> width:int -> height:int -> unit + = "ml_gtk_drawing_area_size" +end + +(* Does not seem very useful ... +module Curve = struct + type t = [widget drawing curve] obj + let cast w : t = Object.try_cast w "GtkCurve" + external create : unit -> t = "ml_gtk_curve_new" + external reset : [>`curve] obj -> unit = "ml_gtk_curve_reset" + external set_gamma : [>`curve] obj -> float -> unit + = "ml_gtk_curve_set_gamma" + external set_range : + [>`curve] obj -> min_x:float -> max_x:float -> + min_y:float -> max_y:float -> unit + = "ml_gtk_curve_set_gamma" +end +*) + +module Misc = struct + let cast w : misc obj = Object.try_cast w "GtkMisc" + external coerce : [>`misc] obj -> misc obj = "%identity" + external set_alignment : [>`misc] obj -> x:float -> y:float -> unit + = "ml_gtk_misc_set_alignment" + external set_padding : [>`misc] obj -> x:int -> y:int -> unit + = "ml_gtk_misc_set_padding" + external get_xalign : [>`misc] obj -> float = "ml_gtk_misc_get_xalign" + external get_yalign : [>`misc] obj -> float = "ml_gtk_misc_get_yalign" + external get_xpad : [>`misc] obj -> int = "ml_gtk_misc_get_xpad" + external get_ypad : [>`misc] obj -> int = "ml_gtk_misc_get_ypad" + let set_alignment w ?x ?y () = + set_alignment w ~x:(may_default get_xalign w ~opt:x) + ~y:(may_default get_yalign w ~opt:y) + let set_padding w ?x ?y () = + set_padding w ~x:(may_default get_xpad w ~opt:x) + ~y:(may_default get_ypad w ~opt:y) + let set ?xalign ?yalign ?xpad ?ypad ?(width = -2) ?(height = -2) w = + if xalign <> None || yalign <> None then + set_alignment w ?x:xalign ?y:yalign (); + if xpad <> None || ypad <> None then + set_padding w ?x:xpad ?y:ypad (); + if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height +end + +module Arrow = struct + let cast w : arrow obj = Object.try_cast w "GtkArrow" + external create : kind:arrow_type -> shadow:shadow_type -> arrow obj + = "ml_gtk_arrow_new" + external set : [>`arrow] obj -> kind:arrow_type -> shadow:shadow_type -> unit + = "ml_gtk_arrow_set" +end + +module Image = struct + let cast w : image obj = Object.try_cast w "GtkImage" + external create : Gdk.image -> ?mask:Gdk.bitmap -> image obj + = "ml_gtk_image_new" + let create ?mask img = create img ?mask + external set : [>`image] obj -> Gdk.image -> ?mask:Gdk.bitmap -> unit + = "ml_gtk_image_set" +end + +module Label = struct + let cast w : label obj = Object.try_cast w "GtkLabel" + external coerce : [>`label] obj -> label obj = "%identity" + external create : string -> label obj = "ml_gtk_label_new" + external set_text : [>`label] obj -> string -> unit = "ml_gtk_label_set_text" + external set_justify : [>`label] obj -> justification -> unit + = "ml_gtk_label_set_justify" + external set_pattern : [>`label] obj -> string -> unit + = "ml_gtk_label_set_pattern" + external set_line_wrap : [>`label] obj -> bool -> unit + = "ml_gtk_label_set_line_wrap" + let set ?text ?justify ?line_wrap ?pattern w = + may ~f:(set_text w) text; + may ~f:(set_justify w) justify; + may ~f:(set_line_wrap w) line_wrap; + may ~f:(set_pattern w) pattern + external get_text : [>`label] obj -> string = "ml_gtk_label_get_label" +end + +module TipsQuery = struct + let cast w : tips_query obj = Object.try_cast w "GtkTipsQuery" + external create : unit -> tips_query obj = "ml_gtk_tips_query_new" + external start : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_start_query" + external stop : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_stop_query" + external set_caller : [>`tipsquery] obj -> [>`widget] obj -> unit + = "ml_gtk_tips_query_set_caller" + external set_labels : + [>`tipsquery] obj -> inactive:string -> no_tip:string -> unit + = "ml_gtk_tips_query_set_labels" + external set_emit_always : [>`tipsquery] obj -> bool -> unit + = "ml_gtk_tips_query_set_emit_always" + external get_caller : [>`tipsquery] obj -> widget obj + = "ml_gtk_tips_query_get_caller" + external get_label_inactive : [>`tipsquery] obj -> string + = "ml_gtk_tips_query_get_label_inactive" + external get_label_no_tip : [>`tipsquery] obj -> string + = "ml_gtk_tips_query_get_label_no_tip" + external get_emit_always : [>`tipsquery] obj -> bool + = "ml_gtk_tips_query_get_emit_always" + let set_labels ?inactive ?no_tip w = + set_labels w + ~inactive:(may_default get_label_inactive w ~opt:inactive) + ~no_tip:(may_default get_label_no_tip w ~opt:no_tip) + let set ?caller ?emit_always ?label_inactive ?label_no_tip w = + may caller ~f:(set_caller w); + may emit_always ~f:(set_emit_always w); + if label_inactive <> None || label_no_tip <> None then + set_labels w ?inactive:label_inactive ?no_tip:label_no_tip + module Signals = struct + open GtkArgv + open GtkSignal + let start_query : ([>`tipsquery],_) t = + { name = "start_query"; marshaller = marshal_unit } + let stop_query : ([>`tipsquery],_) t = + { name = "stop_query"; marshaller = marshal_unit } + let widget_entered : + ([>`tipsquery], + widget obj option -> + text:string option -> privat:string option -> unit) t = + let marshal f _ = function + | OBJECT opt :: STRING text :: STRING privat :: _ -> + f (may_map ~f:Widget.cast opt) ~text ~privat + | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_entered" + in + { name = "widget_entered"; marshaller = marshal } + let widget_selected : + ([>`tipsquery], + widget obj option -> + text:string option -> + privat:string option -> GdkEvent.Button.t option -> bool) t = + let marshal f argv = function + | OBJECT obj :: STRING text :: STRING privat :: POINTER p :: _ -> + let stop = + f (may_map ~f:Widget.cast obj) ~text ~privat + (may_map ~f:GdkEvent.unsafe_copy p) + in set_result argv (`BOOL stop) + | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_selected" + in + { name = "widget_selected"; marshaller = marshal } + end +end + +module Pixmap = struct + let cast w : pixmap obj = Object.try_cast w "GtkPixmap" + external create : Gdk.pixmap -> ?mask:Gdk.bitmap -> pixmap obj + = "ml_gtk_pixmap_new" + let create ?mask img = create img ?mask + external set : + [>`pixmap] obj -> ?pixmap:Gdk.pixmap -> ?mask:Gdk.bitmap -> unit + = "ml_gtk_pixmap_set" + external pixmap : [>`pixmap] obj -> Gdk.pixmap = "ml_GtkPixmap_pixmap" + external mask : [>`pixmap] obj -> Gdk.bitmap = "ml_GtkPixmap_mask" +end + +module Separator = struct + let cast w : separator obj = Object.try_cast w "GtkSeparator" + external hseparator_new : unit -> separator obj = "ml_gtk_hseparator_new" + external vseparator_new : unit -> separator obj = "ml_gtk_vseparator_new" + let create (dir : Tags.orientation) = + if dir = `HORIZONTAL then hseparator_new () else vseparator_new () +end + +module FontSelection = struct + type null_terminated + let null_terminated arg : null_terminated = + match arg with None -> Obj.magic Gpointer.raw_null + | Some l -> + let len = List.length l in + let arr = Array.create (len + 1) "" in + let rec loop i = function + [] -> arr.(i) <- Obj.magic Gpointer.raw_null + | s::l -> arr.(i) <- s; loop (i+1) l + in loop 0 l; + Obj.magic (arr : string array) + let cast w : font_selection obj = + Object.try_cast w "GtkFontSelection" + external create : unit -> font_selection obj + = "ml_gtk_font_selection_new" + external get_font : [>`fontsel] obj -> Gdk.font + = "ml_gtk_font_selection_get_font" + let get_font w = + try Some (get_font w) with Gpointer.Null -> None + external get_font_name : [>`fontsel] obj -> string + = "ml_gtk_font_selection_get_font_name" + let get_font_name w = + try Some (get_font_name w) with Gpointer.Null -> None + external set_font_name : [>`fontsel] obj -> string -> unit + = "ml_gtk_font_selection_set_font_name" + external set_filter : + [>`fontsel] obj -> font_filter_type -> font_type list -> + null_terminated -> null_terminated -> null_terminated -> + null_terminated -> null_terminated -> null_terminated -> unit + = "ml_gtk_font_selection_set_filter_bc" + "ml_gtk_font_selection_set_filter" + let set_filter w ?kind:(tl=[`ALL]) ?foundry + ?weight ?slant ?setwidth ?spacing ?charset filter = + set_filter w filter tl (null_terminated foundry) + (null_terminated weight) (null_terminated slant) + (null_terminated setwidth) (null_terminated spacing) + (null_terminated charset) + external get_preview_text : [>`fontsel] obj -> string + = "ml_gtk_font_selection_get_preview_text" + external set_preview_text : [>`fontsel] obj -> string -> unit + = "ml_gtk_font_selection_set_preview_text" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml new file mode 100644 index 000000000..532a709d7 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml @@ -0,0 +1,56 @@ +(* $Id$ *) + +open Gtk + +type t + +(* if you modify this type modify widget_info_array + in ml_gtk.c in accordance *) +type object_type = + | OBJECT | WIDGET | MISC | LABEL | ACCELLABEL | TIPSQUERY | ARROW + | IMAGE | PIXMAP | CONTAINER | BIN | ALIGNMENT | FRAME | ASPECTFRAME + | BUTTON | TOGGLEBUTTON | CHECKBUTTON | RADIOBUTTON | OPTIONMENU + | ITEM | MENUITEM | CHECKMENUITEM | RADIOMENUITEM | TEAROFFMENUITEM + | LISTITEM | TREEITEM | WINDOW | COLORSELECTIONDIALOG | DIALOG + | INPUTDIALOG | FILESELECTION | FONTSELECTIONDIALOG | PLUG + | EVENTBOX | HANDLEBOX | SCROLLEDWINDOW | VIEWPORT | BOX + | BUTTONBOX | HBUTTONBOX | VBUTTONBOX | VBOX | COLORSELECTION + | GAMMACURVE | HBOX | COMBO | STATUSBAR | CLIST | CTREE | FIXED + | NOTEBOOK | FONTSELECTION | PANED | HPANED | VPANED | LAYOUT + | LIST | MENUSHELL | MENUBAR | MENU | PACKER | SOCKET | TABLE + | TOOLBAR | TREE | CALENDAR | DRAWINGAREA | CURVE | EDITABLE + | ENTRY | SPINBUTTON | TEXT | RULER | HRULER | VRULER | RANGE + | SCALE | HSCALE | VSCALE | SCROLLBAR | HSCROLLBAR | VSCROLLBAR + | SEPARATOR | HSEPARATOR | VSEPARATOR | PREVIEW | PROGRESS + | PROGRESSBAR | DATA | ADJUSTMENT | TOOLTIPS | ITEMFACTORY + +external set_ml_class_init : (t -> unit) -> unit = "set_ml_class_init" +external signal_new : string -> int -> t -> object_type -> int -> int + = "ml_gtk_signal_new" +external object_class_add_signals : t -> int array -> int -> unit + = "ml_gtk_object_class_add_signals" +external type_unique : + name:string -> parent:object_type -> nsignals:int -> gtk_type + = "ml_gtk_type_unique" +external type_new : gtk_type -> unit obj + = "ml_gtk_type_new" + +open GtkSignal + +let make_new_widget ~name ~parent + ~(signals : ('a, unit -> unit) GtkSignal.t list) = + let nsignals = List.length signals in + let new_type = type_unique ~name ~parent ~nsignals in + let signal_num_array = Array.create nsignals 0 in + let class_init_func classe = + List.fold_left signals ~init:0 ~f: + (fun i signal -> + signal_num_array.(i) <- signal_new signal.name 1 classe parent i; + i+1); + object_class_add_signals classe signal_num_array nsignals + in + new_type, + (fun () -> + set_ml_class_init class_init_func; + type_new new_type) + (* , signal_num_array *) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml new file mode 100644 index 000000000..20adb0505 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml @@ -0,0 +1,318 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Box = struct + let cast w : box obj = Object.try_cast w "GtkBox" + external coerce : [>`box] obj -> box obj = "%identity" + external pack_start : + [>`box] obj -> [>`widget] obj -> + expand:bool -> fill:bool -> padding:int -> unit + = "ml_gtk_box_pack_start" + external pack_end : + [>`box] obj -> [>`widget] obj -> + expand:bool -> fill:bool -> padding:int -> unit + = "ml_gtk_box_pack_end" + let pack box ?from:( dir = (`START : pack_type)) + ?(expand=false) ?(fill=true) ?(padding=0) child = + (match dir with `START -> pack_start | `END -> pack_end) + box child ~expand ~fill ~padding + external reorder_child : [>`box] obj -> [>`widget] obj -> pos:int -> unit + = "ml_gtk_box_reorder_child" + external set_homogeneous : [>`box] obj -> bool -> unit + = "ml_gtk_box_set_homogeneous" + external set_spacing : [>`box] obj -> int -> unit + = "ml_gtk_box_set_spacing" + let set ?homogeneous ?spacing w = + may homogeneous ~f:(set_homogeneous w); + may spacing ~f:(set_spacing w) + type packing = + { expand: bool; fill: bool; padding: int; pack_type: pack_type } + external query_child_packing : [>`box] obj -> [>`widget] obj -> packing + = "ml_gtk_box_query_child_packing" + external set_child_packing : + [>`box] obj -> [>`widget] obj -> + ?expand:bool -> ?fill:bool -> ?padding:int -> ?from:pack_type -> unit + = "ml_gtk_box_set_child_packing_bc" "ml_gtk_box_set_child_packing" + external hbox_new : homogeneous:bool -> spacing:int -> box obj + = "ml_gtk_hbox_new" + external vbox_new : homogeneous:bool -> spacing:int -> box obj + = "ml_gtk_vbox_new" + let create (dir : orientation) ?(homogeneous=false) ?(spacing=0) () = + (match dir with `HORIZONTAL -> hbox_new | `VERTICAL -> vbox_new) + ~homogeneous ~spacing +end + +module BBox = struct + (* Omitted defaults setting *) + let cast w : button_box obj = Object.try_cast w "GtkBBox" + external coerce : [>`bbox] obj -> button_box obj = "%identity" + type bbox_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ] + external get_spacing : [>`bbox] obj -> int = "ml_gtk_button_box_get_spacing" + external get_child_width : [>`bbox] obj -> int + = "ml_gtk_button_box_get_child_min_width" + external get_child_height : [>`bbox] obj -> int + = "ml_gtk_button_box_get_child_min_height" + external get_child_ipadx : [>`bbox] obj -> int + = "ml_gtk_button_box_get_child_ipad_x" + external get_child_ipady : [>`bbox] obj -> int + = "ml_gtk_button_box_get_child_ipad_y" + external get_layout : [>`bbox] obj -> bbox_style + = "ml_gtk_button_box_get_layout_style" + external set_spacing : [>`bbox] obj -> int -> unit + = "ml_gtk_button_box_set_spacing" + external set_child_size : [>`bbox] obj -> width:int -> height:int -> unit + = "ml_gtk_button_box_set_child_size" + external set_child_ipadding : [>`bbox] obj -> x:int -> y:int -> unit + = "ml_gtk_button_box_set_child_ipadding" + external set_layout : [>`bbox] obj -> bbox_style -> unit + = "ml_gtk_button_box_set_layout" + let set_child_size w ?width ?height () = + set_child_size w ~width:(may_default get_child_width w ~opt:width) + ~height:(may_default get_child_height w ~opt:height) + let set_child_ipadding w ?x ?y () = + set_child_ipadding w + ~x:(may_default get_child_ipadx w ~opt:x) + ~y:(may_default get_child_ipady w ~opt:y) + let set ?spacing ?child_width ?child_height ?child_ipadx + ?child_ipady ?layout w = + may spacing ~f:(set_spacing w); + if child_width <> None || child_height <> None then + set_child_size w ?width:child_width ?height:child_height (); + if child_ipadx <> None || child_ipady <> None then + set_child_ipadding w ?x:child_ipadx ?y:child_ipady (); + may layout ~f:(set_layout w) + external set_child_size_default : width:int -> height:int -> unit + = "ml_gtk_button_box_set_child_size_default" + external set_child_ipadding_default : x:int -> y:int -> unit + = "ml_gtk_button_box_set_child_ipadding_default" + external create_hbbox : unit -> button_box obj = "ml_gtk_hbutton_box_new" + external create_vbbox : unit -> button_box obj = "ml_gtk_vbutton_box_new" + let create (dir : orientation) = + if dir = `HORIZONTAL then create_hbbox () else create_vbbox () +end + +module Fixed = struct + let cast w : fixed obj = Object.try_cast w "GtkFixed" + external create : unit -> fixed obj = "ml_gtk_fixed_new" + external put : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_fixed_put" + external move : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_fixed_move" +end + +module Layout = struct + let cast w : layout obj = Object.try_cast w "GtkLayout" + external create : + [>`adjustment] optobj -> [>`adjustment] optobj -> layout obj + = "ml_gtk_layout_new" + external put : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_layout_put" + external move : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit + = "ml_gtk_layout_move" + external set_size : [>`layout] obj -> width:int -> height:int -> unit + = "ml_gtk_layout_set_size" + external get_hadjustment : [>`layout] obj -> adjustment obj + = "ml_gtk_layout_get_hadjustment" + external get_vadjustment : [>`layout] obj -> adjustment obj + = "ml_gtk_layout_get_vadjustment" + external set_hadjustment : [>`layout] obj -> [>`adjustment] obj -> unit + = "ml_gtk_layout_set_hadjustment" + external set_vadjustment : [>`layout] obj -> [>`adjustment] obj -> unit + = "ml_gtk_layout_set_vadjustment" + external freeze : [>`layout] obj -> unit + = "ml_gtk_layout_freeze" + external thaw : [>`layout] obj -> unit + = "ml_gtk_layout_thaw" + external get_height : [>`layout] obj -> int + = "ml_gtk_layout_get_height" + external get_width : [>`layout] obj -> int + = "ml_gtk_layout_get_width" + let set_size ?width ?height w = + set_size w ~width:(may_default get_width w ~opt:width) + ~height:(may_default get_height w ~opt:height) +end + + +module Packer = struct + let cast w : packer obj = Object.try_cast w "GtkPacker" + external create : unit -> packer obj = "ml_gtk_packer_new" + external add : + [>`packer] obj -> [>`widget] obj -> + ?side:side_type -> ?anchor:anchor_type -> + ?options:packer_options list -> + ?border_width:int -> ?pad_x:int -> ?pad_y:int -> + ?i_pad_x:int -> ?i_pad_y:int -> unit + = "ml_gtk_packer_add_bc" "ml_gtk_packer_add" + external add_defaults : + [>`packer] obj -> [>`widget] obj -> + ?side:side_type -> ?anchor:anchor_type -> + ?options:packer_options list -> unit + = "ml_gtk_packer_add_defaults" + external set_child_packing : + [>`packer] obj -> [>`widget] obj -> + ?side:side_type -> ?anchor:anchor_type -> + ?options:packer_options list -> + ?border_width:int -> ?pad_x:int -> ?pad_y:int -> + ?i_pad_x:int -> ?i_pad_y:int -> unit + = "ml_gtk_packer_set_child_packing_bc" "ml_gtk_packer_set_child_packing" + external reorder_child : [>`packer] obj -> [>`widget] obj -> pos:int -> unit + = "ml_gtk_packer_reorder_child" + external set_spacing : [>`packer] obj -> int -> unit + = "ml_gtk_packer_set_spacing" + external set_defaults : + [>`packer] obj -> ?border_width:int -> ?pad_x:int -> ?pad_y:int -> + ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit + = "ml_gtk_packer_set_defaults_bc" "ml_gtk_packer_set_defaults" + + let build_options ?(expand=false) ?(fill=`BOTH) () = + (if expand then [`PACK_EXPAND] else []) @ + (match (fill : expand_type) with `NONE -> [] + | `X -> [`FILL_X] + | `Y -> [`FILL_Y] + | `BOTH -> [`FILL_X;`FILL_Y]) +end + +module Paned = struct + let cast w : paned obj = Object.try_cast w "GtkPaned" + external add1 : [>`paned] obj -> [>`widget] obj -> unit + = "ml_gtk_paned_add1" + external add2 : [>`paned] obj -> [>`widget] obj -> unit + = "ml_gtk_paned_add2" + external set_handle_size : [>`paned] obj -> int -> unit + = "ml_gtk_paned_set_handle_size" + external set_gutter_size : [>`paned] obj -> int -> unit + = "ml_gtk_paned_set_gutter_size" + let set ?handle_size ?gutter_size w = + may ~f:(set_handle_size w) handle_size; + may ~f:(set_gutter_size w) gutter_size + external child1 : [>`paned] obj -> widget obj = "ml_gtk_paned_child1" + external child2 : [>`paned] obj -> widget obj = "ml_gtk_paned_child2" + external handle_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size" + external gutter_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size" + external hpaned_new : unit -> paned obj = "ml_gtk_hpaned_new" + external vpaned_new : unit -> paned obj = "ml_gtk_vpaned_new" + let create (dir : orientation) = + if dir = `HORIZONTAL then hpaned_new () else vpaned_new () +end + +module Table = struct + let cast w : table obj = Object.try_cast w "GtkTable" + external create : int -> int -> homogeneous:bool -> table obj + = "ml_gtk_table_new" + let create ~rows:r ~columns:c ?(homogeneous=false) () = + create r c ~homogeneous + external attach : + [>`table] obj -> [>`widget] obj -> left:int -> right:int -> + top:int -> bottom:int -> xoptions:attach_options list -> + yoptions:attach_options list -> xpadding:int -> ypadding:int -> unit + = "ml_gtk_table_attach_bc" "ml_gtk_table_attach" + let has_x : expand_type -> bool = + function `X|`BOTH -> true | `Y|`NONE -> false + let has_y : expand_type -> bool = + function `Y|`BOTH -> true | `X|`NONE -> false + let attach t ~left ~top ?(right=left+1) ?(bottom=top+1) + ?(expand=`NONE) ?(fill=`BOTH) ?(shrink=`NONE) + ?(xpadding=0) ?(ypadding=0) w = + let xoptions = if has_x shrink then [`SHRINK] else [] in + let xoptions = if has_x fill then `FILL::xoptions else xoptions in + let xoptions = if has_x expand then `EXPAND::xoptions else xoptions in + let yoptions = if has_y shrink then [`SHRINK] else [] in + let yoptions = if has_y fill then `FILL::yoptions else yoptions in + let yoptions = if has_y expand then `EXPAND::yoptions else yoptions in + attach t w ~left ~top ~right ~bottom ~xoptions ~yoptions + ~xpadding ~ypadding + external set_row_spacing : [>`table] obj -> int -> int -> unit + = "ml_gtk_table_set_row_spacing" + external set_col_spacing : [>`table] obj -> int -> int -> unit + = "ml_gtk_table_set_col_spacing" + external set_row_spacings : [>`table] obj -> int -> unit + = "ml_gtk_table_set_row_spacings" + external set_col_spacings : [>`table] obj -> int -> unit + = "ml_gtk_table_set_col_spacings" + external set_homogeneous : [>`table] obj -> bool -> unit + = "ml_gtk_table_set_homogeneous" + let set ?homogeneous ?row_spacings ?col_spacings w = + may row_spacings ~f:(set_row_spacings w); + may col_spacings ~f:(set_col_spacings w); + may homogeneous ~f:(set_homogeneous w) +end + +module Notebook = struct + let cast w : notebook obj = Object.try_cast w "GtkNotebook" + external create : unit -> notebook obj = "ml_gtk_notebook_new" + external insert_page : + [>`notebook] obj -> [>`widget] obj -> tab_label:[>`widget] optobj -> + menu_label:[>`widget] optobj -> pos:int -> unit + = "ml_gtk_notebook_insert_page_menu" + (* default is append to end *) + external remove_page : [>`notebook] obj -> int -> unit + = "ml_gtk_notebook_remove_page" + external get_current_page : [>`notebook] obj -> int + = "ml_gtk_notebook_get_current_page" + external set_page : [>`notebook] obj -> int -> unit + = "ml_gtk_notebook_set_page" + external set_tab_pos : [>`notebook] obj -> position -> unit + = "ml_gtk_notebook_set_tab_pos" + external set_homogeneous_tabs : [>`notebook] obj -> bool -> unit + = "ml_gtk_notebook_set_homogeneous_tabs" + external set_show_tabs : [>`notebook] obj -> bool -> unit + = "ml_gtk_notebook_set_show_tabs" + external set_show_border : [>`notebook] obj -> bool -> unit + = "ml_gtk_notebook_set_show_border" + external set_scrollable : [>`notebook] obj -> bool -> unit + = "ml_gtk_notebook_set_scrollable" + external set_tab_border : [>`notebook] obj -> int -> unit + = "ml_gtk_notebook_set_tab_border" + external popup_enable : [>`notebook] obj -> unit + = "ml_gtk_notebook_popup_enable" + external popup_disable : [>`notebook] obj -> unit + = "ml_gtk_notebook_popup_disable" + external get_nth_page : [>`notebook] obj -> int -> widget obj + = "ml_gtk_notebook_get_nth_page" + external page_num : [>`notebook] obj -> [>`widget] obj -> int + = "ml_gtk_notebook_page_num" + external next_page : [>`notebook] obj -> unit + = "ml_gtk_notebook_next_page" + external prev_page : [>`notebook] obj -> unit + = "ml_gtk_notebook_prev_page" + external get_tab_label : [>`notebook] obj -> [>`widget] obj -> widget obj + = "ml_gtk_notebook_get_tab_label" + external set_tab_label : + [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit + = "ml_gtk_notebook_set_tab_label" + external get_menu_label : [>`notebook] obj -> [>`widget] obj -> widget obj + = "ml_gtk_notebook_get_menu_label" + external set_menu_label : + [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit + = "ml_gtk_notebook_set_menu_label" + external reorder_child : [>`notebook] obj -> [>`widget] obj -> int -> unit + = "ml_gtk_notebook_reorder_child" + + let set_popup w = function + true -> popup_enable w + | false -> popup_disable w + let set ?page ?tab_pos ?show_tabs ?homogeneous_tabs + ?show_border ?scrollable ?tab_border ?popup w = + let may_set f = may ~f:(f w) in + may_set set_page page; + may_set set_tab_pos tab_pos; + may_set set_show_tabs show_tabs; + may_set set_homogeneous_tabs homogeneous_tabs; + may_set set_show_border show_border; + may_set set_scrollable scrollable; + may_set set_tab_border tab_border; + may_set set_popup popup + module Signals = struct + open GtkArgv + open GtkSignal + let marshal_page f argv = function + | _ :: INT page :: _ -> f page + | _ -> invalid_arg "GtkPack.Notebook.Signals.marshal_page" + let switch_page : ([>`notebook],_) t = + { name = "switch_page"; marshaller = marshal_page } + end +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml new file mode 100644 index 000000000..b67e49b2e --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml @@ -0,0 +1,147 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Progress = struct + let cast w : progress obj = Object.try_cast w "GtkProgress" + external set_show_text : [>`progress] obj -> bool -> unit + = "ml_gtk_progress_set_show_text" + external set_text_alignment : + [>`progress] obj -> ?x:float -> ?y:float -> unit -> unit + = "ml_gtk_progress_set_show_text" + external set_format_string : [>`progress] obj -> string -> unit + = "ml_gtk_progress_set_format_string" + external set_adjustment : [>`progress] obj -> [>`adjustment] obj -> unit + = "ml_gtk_progress_set_adjustment" + external configure : + [>`progress] obj -> current:float -> min:float -> max:float -> unit + = "ml_gtk_progress_configure" + external set_percentage : [>`progress] obj -> float -> unit + = "ml_gtk_progress_set_percentage" + external set_value : [>`progress] obj -> float -> unit + = "ml_gtk_progress_set_value" + external get_value : [>`progress] obj -> float + = "ml_gtk_progress_get_value" + external get_percentage : [>`progress] obj -> float + = "ml_gtk_progress_get_current_percentage" + external set_activity_mode : [>`progress] obj -> bool -> unit + = "ml_gtk_progress_set_activity_mode" + external get_current_text : [>`progress] obj -> string + = "ml_gtk_progress_get_current_text" + external get_adjustment : [>`progress] obj -> adjustment obj + = "ml_gtk_progress_get_adjustment" + let set ?value ?percentage ?activity_mode + ?show_text ?format_string ?text_xalign ?text_yalign w = + may value ~f:(set_value w); + may percentage ~f:(set_percentage w); + may activity_mode ~f:(set_activity_mode w); + may show_text ~f:(set_show_text w); + may format_string ~f:(set_format_string w); + if text_xalign <> None || text_yalign <> None then + set_text_alignment w ?x:text_xalign ?y:text_yalign () +end + +module ProgressBar = struct + let cast w : progress_bar obj = Object.try_cast w "GtkProgressBar" + external create : unit -> progress_bar obj = "ml_gtk_progress_bar_new" + external create_with_adjustment : [>`adjustment] obj -> progress_bar obj + = "ml_gtk_progress_bar_new_with_adjustment" + external set_bar_style : + [>`progressbar] obj -> [`CONTINUOUS|`DISCRETE] -> unit + = "ml_gtk_progress_bar_set_bar_style" + external set_discrete_blocks : [>`progressbar] obj -> int -> unit + = "ml_gtk_progress_bar_set_discrete_blocks" + external set_activity_step : [>`progressbar] obj -> int -> unit + = "ml_gtk_progress_bar_set_activity_step" + external set_activity_blocks : [>`progressbar] obj -> int -> unit + = "ml_gtk_progress_bar_set_activity_blocks" + external set_orientation : + [>`progressbar] obj -> Tags.progress_bar_orientation -> unit + = "ml_gtk_progress_bar_set_orientation" + let set ?bar_style ?discrete_blocks ?activity_step ?activity_blocks w = + let may_set f opt = may opt ~f:(f w) in + may_set set_bar_style bar_style; + may_set set_discrete_blocks discrete_blocks; + may_set set_activity_step activity_step; + may_set set_activity_blocks activity_blocks +end + +module Range = struct + let cast w : range obj = Object.try_cast w "GtkRange" + external coerce : [>`range] obj -> range obj = "%identity" + external get_adjustment : [>`range] obj -> adjustment obj + = "ml_gtk_range_get_adjustment" + external set_adjustment : [>`range] obj -> [>`adjustment] obj -> unit + = "ml_gtk_range_set_adjustment" + external set_update_policy : [>`range] obj -> update_type -> unit + = "ml_gtk_range_set_update_policy" + let set ?adjustment ?update_policy w = + may adjustment ~f:(set_adjustment w); + may update_policy ~f:(set_update_policy w) +end + +module Scale = struct + let cast w : scale obj = Object.try_cast w "GtkScale" + external hscale_new : [>`adjustment] optobj -> scale obj + = "ml_gtk_hscale_new" + external vscale_new : [>`adjustment] optobj -> scale obj + = "ml_gtk_vscale_new" + let create ?adjustment (dir : orientation) = + let create = if dir = `HORIZONTAL then hscale_new else vscale_new in + create (Gpointer.optboxed adjustment) + external set_digits : [>`scale] obj -> int -> unit + = "ml_gtk_scale_set_digits" + external set_draw_value : [>`scale] obj -> bool -> unit + = "ml_gtk_scale_set_draw_value" + external set_value_pos : [>`scale] obj -> position -> unit + = "ml_gtk_scale_set_value_pos" + external get_value_width : [>`scale] obj -> int + = "ml_gtk_scale_get_value_width" + external draw_value : [>`scale] obj -> unit + = "ml_gtk_scale_draw_value" + let set ?digits ?draw_value ?value_pos w = + may digits ~f:(set_digits w); + may draw_value ~f:(set_draw_value w); + may value_pos ~f:(set_value_pos w) +end + +module Scrollbar = struct + let cast w : scrollbar obj = Object.try_cast w "GtkScrollbar" + external hscrollbar_new : [>`adjustment] optobj -> scrollbar obj + = "ml_gtk_hscrollbar_new" + external vscrollbar_new : [>`adjustment] optobj -> scrollbar obj + = "ml_gtk_vscrollbar_new" + let create ?adjustment (dir : orientation) = + let create = if dir = `HORIZONTAL then hscrollbar_new else vscrollbar_new + in create (Gpointer.optboxed adjustment) +end + +module Ruler = struct + let cast w : ruler obj = Object.try_cast w "GtkRuler" + external hruler_new : unit -> ruler obj = "ml_gtk_hruler_new" + external vruler_new : unit -> ruler obj = "ml_gtk_vruler_new" + let create (dir : orientation) = + if dir = `HORIZONTAL then hruler_new () else vruler_new () + external set_metric : [>`ruler] obj -> metric_type -> unit + = "ml_gtk_ruler_set_metric" + external set_range : + [>`ruler] obj -> + lower:float -> upper:float -> position:float -> max_size:float -> unit + = "ml_gtk_ruler_set_range" + external get_lower : [>`ruler] obj -> float = "ml_gtk_ruler_get_lower" + external get_upper : [>`ruler] obj -> float = "ml_gtk_ruler_get_upper" + external get_position : [>`ruler] obj -> float = "ml_gtk_ruler_get_position" + external get_max_size : [>`ruler] obj -> float = "ml_gtk_ruler_get_max_size" + let set_range ?lower ?upper ?position ?max_size w = + set_range w ~lower:(may_default get_lower w ~opt:lower) + ~upper:(may_default get_upper w ~opt:upper) + ~position:(may_default get_position w ~opt:position) + ~max_size:(may_default get_max_size w ~opt:max_size) + let set ?metric ?lower ?upper ?position ?max_size w = + may metric ~f:(set_metric w); + if lower <> None || upper <> None || position <> None || max_size <> None + then set_range w ?lower ?upper ?position ?max_size +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml new file mode 100644 index 000000000..8fa460288 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml @@ -0,0 +1,65 @@ +(* $Id$ *) + +open Gtk + +type id +type ('a,'b) t = + { name: string; + marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) } + +let enter_callback = ref (fun () -> ()) +and exit_callback = ref (fun () -> ()) + +let stop_emit_ref = ref false +let stop_emit () = stop_emit_ref := true + +type saved_state = State of bool +let push_callback () = + !enter_callback (); + let old = !stop_emit_ref in + stop_emit_ref := false; + State old + +let pop_callback (State old) = + let res = !stop_emit_ref in + stop_emit_ref := old; + !exit_callback (); + res + +external connect : + 'a obj -> name:string -> callback:(GtkArgv.t -> unit) -> after:bool -> id + = "ml_gtk_signal_connect" +external emit_stop_by_name : 'a obj -> name:string -> unit + = "ml_gtk_signal_emit_stop_by_name" +let connect ~(sgn : ('a, _) t) ~callback ?(after=false) (obj : 'a obj) = + let callback argv = + let old = push_callback () in + let exn = + try sgn.marshaller callback argv (GtkArgv.get_args argv); None + with exn -> Some exn + in + if pop_callback old then emit_stop_by_name obj ~name:sgn.name; + Gaux.may ~f:raise exn + in + connect obj ~name:sgn.name ~callback ~after +external disconnect : 'a obj -> id -> unit + = "ml_gtk_signal_disconnect" +external handler_block : 'a obj -> id -> unit + = "ml_gtk_signal_handler_block" +external handler_unblock : 'a obj -> id -> unit + = "ml_gtk_signal_handler_unblock" + +let marshal_unit f _ _ = f () +let marshal_int f _ = function + | GtkArgv.INT n :: _ -> f n + | _ -> invalid_arg "GtkSignal.marshal_int" + +let emit (obj : 'a obj) ~(sgn : ('a, 'b) t) + ~(emitter : 'a obj -> name:string -> 'b) = + emitter obj ~name:sgn.name +external emit_none : 'a obj -> name:string -> unit -> unit + = "ml_gtk_signal_emit_none" +let emit_unit obj ~sgn = emit obj ~emitter:emit_none ~sgn () +external emit_int : 'a obj -> name:string -> int -> unit + = "ml_gtk_signal_emit_int" +let emit_int = emit ~emitter:emit_int diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli new file mode 100644 index 000000000..0ef2ab2ea --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli @@ -0,0 +1,45 @@ +(* $Id$ *) + +open Gtk + +type id +type ('a,'b) t = + { name: string; + marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) } + +val stop_emit : unit -> unit + (* Call [stop_emit ()] in a callback to prohibit further handling + of the current signal invocation, by calling [emit_stop_by_name]. + Be careful about where you use it, since the concept of current + signal may be tricky. *) + +val connect : + sgn:('a, 'b) t -> callback:'b -> ?after:bool -> 'a obj -> id + (* You may use [stop_emit] inside the callback *) + +external disconnect : 'a obj -> id -> unit + = "ml_gtk_signal_disconnect" +external emit_stop_by_name : 'a obj -> name:string -> unit + = "ml_gtk_signal_emit_stop_by_name" + (* Unsafe: use [stop_emit] instead. *) +external handler_block : 'a obj -> id -> unit + = "ml_gtk_signal_handler_block" +external handler_unblock : 'a obj -> id -> unit + = "ml_gtk_signal_handler_unblock" + +(* Some marshaller functions, to build signals *) +val marshal_unit : (unit -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit +val marshal_int : (int -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit + +(* Emitter functions *) +val emit : + 'a obj -> sgn:('a, 'b) t -> emitter:('a obj -> name:string -> 'b) -> 'b +val emit_unit : 'a obj -> sgn:('a, unit -> unit) t -> unit +val emit_int : 'a obj -> sgn:('a, int -> unit) t -> int -> unit + +(* Internal functions. *) +val enter_callback : (unit -> unit) ref +val exit_callback : (unit -> unit) ref +type saved_state +val push_callback : unit -> saved_state +val pop_callback : saved_state -> bool diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml new file mode 100644 index 000000000..517f80be4 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml @@ -0,0 +1,5 @@ +(* $Id$ *) + +(* Start the main thread in a threaded toplevel *) + +let thread = GtkThread.start () diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml new file mode 100644 index 000000000..3ab577e3e --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml @@ -0,0 +1,33 @@ +(* $Id$ *) + +open GtkMain + +(* We check first whether there are some event pending, and run + some iterations. We then need to delay, thus focing a thread switch. *) + +let main () = + try + let loop = (Glib.Main.create true) in + Main.loops := loop :: !Main.loops; + while Glib.Main.is_running loop do + let i = ref 0 in + while !i < 100 && Glib.Main.pending () do + Glib.Main.iteration true; + incr i + done; + Thread.delay 0.001 + done; + Main.loops := List.tl !Main.loops + with exn -> + Main.loops := List.tl !Main.loops; + raise exn + +let start = Thread.create main + +let _ = + let mutex = Mutex.create () in + let depth = ref 0 in + GtkSignal.enter_callback := + (fun () -> if !depth = 0 then Mutex.lock mutex; incr depth); + GtkSignal.exit_callback := + (fun () -> decr depth; if !depth = 0 then Mutex.unlock mutex) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml new file mode 100644 index 000000000..926074167 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml @@ -0,0 +1,122 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module TreeItem = struct + let cast w : tree_item obj = Object.try_cast w "GtkTreeItem" + external create : unit -> tree_item obj = "ml_gtk_tree_item_new" + external create_with_label : string -> tree_item obj + = "ml_gtk_tree_item_new_with_label" + let create ?label () = + match label with None -> create () + | Some label -> create_with_label label + external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit + = "ml_gtk_tree_item_set_subtree" + external remove_subtree : [>`treeitem] obj -> unit + = "ml_gtk_tree_item_remove_subtree" + external expand : [>`treeitem] obj -> unit + = "ml_gtk_tree_item_expand" + external collapse : [>`treeitem] obj -> unit + = "ml_gtk_tree_item_collapse" + external subtree : [>`treeitem] obj -> tree obj + = "ml_GTK_TREE_ITEM_SUBTREE" + module Signals = struct + open GtkSignal + let expand : ([>`treeitem],_) t = + { name = "expand"; marshaller = marshal_unit } + let collapse : ([>`treeitem],_) t = + { name = "collapse"; marshaller = marshal_unit } + end +end + +module Tree = struct + let cast w : tree obj = Object.try_cast w "GtkTree" + external coerce : [>`tree] obj -> tree obj = "%identity" + external create : unit -> tree obj = "ml_gtk_tree_new" + external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit + = "ml_gtk_tree_insert" + external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit + = "ml_gtk_tree_remove_items" + external clear_items : [>`tree] obj -> start:int -> stop:int -> unit + = "ml_gtk_tree_clear_items" + external select_item : [>`tree] obj -> pos:int -> unit + = "ml_gtk_tree_select_item" + external unselect_item : [>`tree] obj -> pos:int -> unit + = "ml_gtk_tree_unselect_item" + external child_position : [>`tree] obj -> [>`treeitem] obj -> int + = "ml_gtk_tree_child_position" + external set_selection_mode : [>`tree] obj -> selection_mode -> unit + = "ml_gtk_tree_set_selection_mode" + external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit + = "ml_gtk_tree_set_view_mode" + external set_view_lines : [>`tree] obj -> bool -> unit + = "ml_gtk_tree_set_view_lines" + external selection : [>`tree] obj -> tree_item obj list = + "ml_gtk_tree_selection" + let set ?selection_mode ?view_mode ?view_lines w = + let may_set f = may ~f:(f w) in + may_set set_selection_mode selection_mode; + may_set set_view_mode view_mode; + may_set set_view_lines view_lines + module Signals = struct + open GtkSignal + let selection_changed : ([>`tree],_) t = + { name = "selection_changed"; marshaller = marshal_unit } + let select_child : ([>`tree],_) t = + { name = "select_child"; marshaller = Widget.Signals.marshal } + let unselect_child : ([>`tree],_) t = + { name = "unselect_child"; marshaller = Widget.Signals.marshal } + end +end +(* +module CTree = struct + type t + type node = [`ctree] obj * t + let cast w : ctree obj = Object.try_cast w "GtkCTree" + external create : cols:int -> treecol:int -> ctree obj = "ml_gtk_ctree_new" + external insert_node : + [>`ctree] obj -> ?parent:node -> ?sibling:node -> + titles:optstring array -> + spacing:int -> ?pclosed:Gdk.pixmap -> ?mclosed:Gdk.bitmap obj -> + ?popened:Gdk.pixmap -> ?mopened:Gdk.bitmap obj -> + is_leaf:bool -> expanded:bool -> node + = "ml_gtk_ctree_insert_node_bc" "ml_gtk_ctree_insert_node" + let insert_node' + w ?parent ?sibling ?(spacing = 0) ?(is_leaf = true) + ?(expanded = false) + ?pclosed ?mclosed ?popened ?mopened titles = + let len = GtkList.CList.get_columns w in + if List.length titles > len then invalid_arg "CTree.insert_node"; + let arr = Array.create ~len None in + List.fold_left titles ~acc:0 + ~f:(fun ~acc text -> arr.(acc) <- Some text; acc+1); + insert_node w + ?parent ?sibling ~titles:(Array.map ~f:optstring arr) + ~spacing ~is_leaf ~expanded + ?pclosed ?mclosed ?popened ?mopened + external node_set_row_data : [>`ctree] obj -> node:node -> Obj.t -> unit + = "ml_gtk_ctree_node_set_row_data" + external node_get_row_data : [>`ctree] obj -> node:node -> Obj.t + = "ml_gtk_ctree_node_get_row_data" + external set_indent : [>`ctree] obj -> int -> unit + = "ml_gtk_ctree_set_indent" + module Signals = struct + open GtkSignal + let marshal_select f argv = + let node : node = + match GtkArgv.get_pointer argv ~pos:0 with + Some p -> Obj.magic p + | None -> invalid_arg "GtkTree.CTree.Signals.marshal_select" + in + f ~node ~column:(GtkArgv.get_int argv ~pos:1) + + let tree_select_row : ([>`ctree],_) t = + { name = "tree_select_row"; marshaller = marshal_select } + let tree_unselect_row : ([>`ctree],_) t = + { name = "tree_unselect_row"; marshaller = marshal_select } + end +end +*) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml new file mode 100644 index 000000000..ffe00e921 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml @@ -0,0 +1,189 @@ +(* $Id$ *) + +open Gaux +open Gtk +open Tags +open GtkBase + +module Window = struct + let cast w : window obj = Object.try_cast w "GtkWindow" + external coerce : [>`window] obj -> window obj = "%identity" + external create : window_type -> window obj = "ml_gtk_window_new" + external set_title : [>`window] obj -> string -> unit + = "ml_gtk_window_set_title" + external set_wmclass : [>`window] obj -> name:string -> clas:string -> unit + = "ml_gtk_window_set_title" + external get_wmclass_name : [>`window] obj -> string + = "ml_gtk_window_get_wmclass_name" + external get_wmclass_class : [>`window] obj -> string + = "ml_gtk_window_get_wmclass_class" + (* set_focus/default are called by Widget.grab_focus/default *) + external set_focus : [>`window] obj -> [>`widget] obj -> unit + = "ml_gtk_window_set_focus" + external set_default : [>`window] obj -> [>`widget] obj -> unit + = "ml_gtk_window_set_default" + external set_policy : + [>`window] obj -> + allow_shrink:bool -> allow_grow:bool -> auto_shrink:bool -> unit + = "ml_gtk_window_set_policy" + external get_allow_shrink : [>`window] obj -> bool + = "ml_gtk_window_get_allow_shrink" + external get_allow_grow : [>`window] obj -> bool + = "ml_gtk_window_get_allow_grow" + external get_auto_shrink : [>`window] obj -> bool + = "ml_gtk_window_get_auto_shrink" + external activate_focus : [>`window] obj -> bool + = "ml_gtk_window_activate_focus" + external activate_default : [>`window] obj -> bool + = "ml_gtk_window_activate_default" + external set_modal : [>`window] obj -> bool -> unit + = "ml_gtk_window_set_modal" + external set_default_size : + [>`window] obj -> width:int -> height:int -> unit + = "ml_gtk_window_set_default_size" + external set_position : [>`window] obj -> window_position -> unit + = "ml_gtk_window_set_position" + external set_transient_for : [>`window] obj ->[>`window] obj -> unit + = "ml_gtk_window_set_transient_for" + + let set_wmclass ?name ?clas:wm_class w = + set_wmclass w ~name:(may_default get_wmclass_name w ~opt:name) + ~clas:(may_default get_wmclass_class w ~opt:wm_class) + let set_policy ?allow_shrink ?allow_grow ?auto_shrink w = + set_policy w + ~allow_shrink:(may_default get_allow_shrink w ~opt:allow_shrink) + ~allow_grow:(may_default get_allow_grow w ~opt:allow_grow) + ~auto_shrink:(may_default get_auto_shrink w ~opt:auto_shrink) + let set ?title ?wm_name ?wm_class ?position ?allow_shrink ?allow_grow + ?auto_shrink ?modal ?(x = -2) ?(y = -2) w = + may title ~f:(set_title w); + if wm_name <> None || wm_class <> None then + set_wmclass w ?name:wm_name ?clas:wm_class; + may position ~f:(set_position w); + if allow_shrink <> None || allow_grow <> None || auto_shrink <> None then + set_policy w ?allow_shrink ?allow_grow ?auto_shrink; + may ~f:(set_modal w) modal; + if x <> -2 || y <> -2 then Widget.set_uposition w ~x ~y + external add_accel_group : [>`window] obj -> accel_group -> unit + = "ml_gtk_window_add_accel_group" + external remove_accel_group : + [>`window] obj -> accel_group -> unit + = "ml_gtk_window_remove_accel_group" + external activate_focus : [>`window] obj -> unit + = "ml_gtk_window_activate_focus" + external activate_default : [>`window] obj -> unit + = "ml_gtk_window_activate_default" + module Signals = struct + open GtkSignal + let move_resize : ([>`window],_) t = + { name = "move_resize"; marshaller = marshal_unit } + let set_focus : ([>`window],_) t = + { name = "set_focus"; marshaller = Widget.Signals.marshal_opt } + end +end + +module Dialog = struct + let cast w : dialog obj = Object.try_cast w "GtkDialog" + external coerce : [>`dialog] obj -> dialog obj = "%identity" + external create : unit -> dialog obj = "ml_gtk_dialog_new" + external action_area : [>`dialog] obj -> box obj + = "ml_GtkDialog_action_area" + external vbox : [>`dialog] obj -> box obj + = "ml_GtkDialog_vbox" +end + +module InputDialog = struct + let cast w : input_dialog obj = Object.try_cast w "GtkInputDialog" + external create : unit -> input_dialog obj = "ml_gtk_input_dialog_new" + module Signals = struct + open GtkSignal + let enable_device : ([>`inputdialog],_) t = + { name = "enable_device"; marshaller = marshal_int } + let disable_device : ([>`inputdialog],_) t = + { name = "disable_device"; marshaller = marshal_int } + end +end + +module FileSelection = struct + let cast w : file_selection obj = Object.try_cast w "GtkFileSelection" + external create : string -> file_selection obj = "ml_gtk_file_selection_new" + external set_filename : [>`filesel] obj -> string -> unit + = "ml_gtk_file_selection_set_filename" + external get_filename : [>`filesel] obj -> string + = "ml_gtk_file_selection_get_filename" + external show_fileop_buttons : [>`filesel] obj -> unit + = "ml_gtk_file_selection_show_fileop_buttons" + external hide_fileop_buttons : [>`filesel] obj -> unit + = "ml_gtk_file_selection_hide_fileop_buttons" + external get_ok_button : [>`filesel] obj -> button obj + = "ml_gtk_file_selection_get_ok_button" + external get_cancel_button : [>`filesel] obj -> button obj + = "ml_gtk_file_selection_get_cancel_button" + external get_help_button : [>`filesel] obj -> button obj + = "ml_gtk_file_selection_get_help_button" + let set_fileop_buttons w = function + true -> show_fileop_buttons w + | false -> hide_fileop_buttons w + let set ?filename ?fileop_buttons w = + may filename ~f:(set_filename w); + may fileop_buttons ~f:(set_fileop_buttons w) +end + +module FontSelectionDialog = struct + let cast w : font_selection_dialog obj = + Object.try_cast w "GtkFontSelectionDialog" + external create : ?title:string -> unit -> font_selection_dialog obj + = "ml_gtk_font_selection_dialog_new" + external font_selection : [>`fontseldialog] obj -> font_selection obj + = "ml_gtk_font_selection_dialog_fontsel" + external ok_button : [>`fontseldialog] obj -> button obj + = "ml_gtk_font_selection_dialog_ok_button" + external apply_button : [>`fontseldialog] obj -> button obj + = "ml_gtk_font_selection_dialog_apply_button" + external cancel_button : [>`fontseldialog] obj -> button obj + = "ml_gtk_font_selection_dialog_cancel_button" +(* + type null_terminated + let null_terminated arg : null_terminated = + match arg with None -> Obj.magic Gpointer.raw_null + | Some l -> + let len = List.length l in + let arr = Array.create (len + 1) "" in + let rec loop i = function + [] -> arr.(i) <- Obj.magic Gpointer.raw_null + | s::l -> arr.(i) <- s; loop (i+1) l + in loop 0 l; + Obj.magic (arr : string array) + external get_font : [>`fontseldialog] obj -> Gdk.font + = "ml_gtk_font_selection_dialog_get_font" + let get_font w = + try Some (get_font w) with Gpointer.Null -> None + external get_font_name : [>`fontseldialog] obj -> string + = "ml_gtk_font_selection_dialog_get_font_name" + let get_font_name w = + try Some (get_font_name w) with Gpointer.Null -> None + external set_font_name : [>`fontseldialog] obj -> string -> unit + = "ml_gtk_font_selection_dialog_set_font_name" + external set_filter : + [>`fontseldialog] obj -> font_filter_type -> font_type list -> + null_terminated -> null_terminated -> null_terminated -> + null_terminated -> null_terminated -> null_terminated -> unit + = "ml_gtk_font_selection_dialog_set_filter_bc" + "ml_gtk_font_selection_dialog_set_filter" + let set_filter w ?kind:(tl=[`ALL]) ?foundry + ?weight ?slant ?setwidth ?spacing ?charset filter = + set_filter w filter tl (null_terminated foundry) + (null_terminated weight) (null_terminated slant) + (null_terminated setwidth) (null_terminated spacing) + (null_terminated charset) + external get_preview_text : [>`fontseldialog] obj -> string + = "ml_gtk_font_selection_dialog_get_preview_text" + external set_preview_text : [>`fontseldialog] obj -> string -> unit + = "ml_gtk_font_selection_dialog_set_preview_text" +*) +end + +module Plug = struct + let cast w : plug obj = Object.try_cast w "GtkPlug" + external create : Gdk.xid -> plug obj = "ml_gtk_plug_new" +end diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml new file mode 100644 index 000000000..3bf5791a4 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml @@ -0,0 +1,109 @@ +(* $Id$ *) + +open Gtk + +type string_direction = [ + | `R_TO_L + | `L_TO_R +] + +type position = [ + | `END + | `CENTER + | `BEGINNING +] + +type line_type = [ + | `SOLID + | `DASHED + | `SINGLE + | `DOUBLE + | `STRIKE + | `UNDER + | `NONE +] + +type dither_type = [ + | `QUICK + | `BEST + | `FAST + | `SLOW + | `DISABLED +] + +type xmhtml = [`widget|`container|`xmhtml] + +external create : unit -> xmhtml obj = "ml_gtk_xmhtml_new" +external freeze : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_freeze" +external thaw : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_thaw" +external source : [> `xmhtml] obj -> string -> unit = "ml_gtk_xmhtml_source" +(* external get_source : [> `xmhtml] obj -> string = "ml_gtk_xmhtml_get_source" *) +external set_string_direction : [> `xmhtml] obj -> string_direction -> unit + = "ml_gtk_xmhtml_set_string_direction" +external set_alignment : [> `xmhtml] obj -> position -> unit + = "ml_gtk_xmhtml_set_alignment" +(* external set_outline : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_outline" *) +external set_font_familty : + [> `xmhtml] obj -> family:string -> sizes:string -> unit + = "ml_gtk_xmhtml_set_font_familty" +external set_font_familty_fixed : + [> `xmhtml] obj -> family:string -> sizes:string -> unit + = "ml_gtk_xmhtml_set_font_familty_fixed" +external set_font_charset : [> `xmhtml] obj -> string -> unit + = "ml_gtk_xmhtml_set_font_charset" +external set_allow_body_colors : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_allow_body_colors" +external set_hilight_on_enter : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_hilight_on_enter" +external set_anchor_underline_type : [> `xmhtml] obj -> line_type list -> unit + = "ml_gtk_xmhtml_set_anchor_underline_type" +external set_anchor_visited_underline_type : + [> `xmhtml] obj -> line_type list -> unit + = "ml_gtk_xmhtml_set_anchor_visited_underline_type" +external set_anchor_target_underline_type : + [> `xmhtml] obj -> line_type list -> unit + = "ml_gtk_xmhtml_set_anchor_target_underline_type" +external set_allow_color_switching : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_allow_color_switching" +external set_dithering : [> `xmhtml] obj -> dither_type -> unit + = "ml_gtk_xmhtml_set_dithering" +external set_allow_font_switching : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_allow_font_switching" +external set_max_image_colors : [> `xmhtml] obj -> int -> unit + = "ml_gtk_xmhtml_set_max_image_colors" +external set_allow_images : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_allow_images" +external set_plc_intervals : + [> `xmhtml] obj -> min:int -> max:int -> default:int -> unit + = "ml_gtk_xmhtml_set_plc_intervals" +(* +external set_def_body_image_url : [> `xmhtml] obj -> string -> unit + = "ml_gtk_xmhtml_set_def_body_image_url" +*) +external set_anchor_buttons : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_anchor_buttons" +external set_anchor_cursor : [> `xmhtml] obj -> Gdk.cursor option -> unit + = "ml_gtk_xmhtml_set_anchor_cursor" +external set_topline : [> `xmhtml] obj -> int -> unit + = "ml_gtk_xmhtml_set_topline" +external get_topline : [> `xmhtml] obj -> int + = "ml_gtk_xmhtml_get_topline" +external set_freeze_animations : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_freeze_animations" +external set_screen_gamma : [> `xmhtml] obj -> float -> unit + = "ml_gtk_xmhtml_set_screen_gamma" +external set_perfect_colors : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_perfect_colors" +external set_uncompress_command : [> `xmhtml] obj -> string -> unit + = "ml_gtk_xmhtml_set_uncompress_command" +external set_strict_checking : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_strict_checking" +external set_bad_html_warnings : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_bad_html_warnings" +external set_allow_form_coloring : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_allow_form_coloring" +external set_imagemap_draw : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_imagemap_draw" +external set_alpha_processing : [> `xmhtml] obj -> bool -> unit + = "ml_gtk_xmhtml_set_alpha_processing" diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var new file mode 100644 index 000000000..b2a7d2a80 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var @@ -0,0 +1,169 @@ +(* $Id$ *) + +type arrow_type = "GTK_ARROW_" + [ `UP | `DOWN | `LEFT | `RIGHT ] + +type attach_options = "GTK_" + [ `EXPAND | `SHRINK | `FILL ] + +type button_box_style = "GTK_BUTTONBOX_" + [ `DEFAULT_STYLE | `SPREAD | `EDGE | `START | `END ] + +type direction_type = "GTK_DIR_" + [ `TAB_FORWARD | `TAB_BACKWARD | `UP | `DOWN | `LEFT | `RIGHT ] + +type justification = "GTK_JUSTIFY_" + [ `LEFT | `RIGHT | `CENTER | `FILL ] + +type match_type = "GTK_MATCH_" + [ `ALL | `ALL_TAIL | `HEAD | `TAIL | `EXACT | `LAST ] + +type metric_type = "GTK_" + [ `PIXELS | `INCHES | `CENTIMETERS ] + +type orientation = "GTK_ORIENTATION_" + [ `HORIZONTAL | `VERTICAL ] + +type corner_type = "GTK_CORNER_" + [ `TOP_LEFT | `BOTTOM_LEFT | `TOP_RIGHT | `BOTTOM_RIGHT ] + +type pack_type = "GTK_PACK_" + [ `START | `END ] + +type path_type = "GTK_PATH_" + [ `WIDGET | `WIDGET_CLASS | `CLASS ] + +type policy_type = "GTK_POLICY_" + [ `ALWAYS | `AUTOMATIC | `NEVER ] + +type position = "GTK_POS_" + [ `LEFT | `RIGHT | `TOP | `BOTTOM ] + +type preview_type = "GTK_PREVIEW_" + [ `COLOR | `GRAYSCALE ] + +type relief_style = "GTK_RELIEF_" + [ `NORMAL | `HALF | `NONE ] + +type resize_mode = "GTK_RESIZE_" + [ `PARENT | `QUEUE | `IMMEDIATE ] + +type signal_run_type = "GTK_RUN_" + [ `FIRST | `LAST | `BOTH | `NO_RECURSE | `ACTION | `NO_HOOKS ] + +type scroll_type = "GTK_SCROLL_" + [ `NONE | `STEP_FORWARD | `STEP_BACKWARD | `PAGE_BACKWARD + | `PAGE_FORWARD | `JUMP ] + +type selection_mode = "GTK_SELECTION_" + [ `SINGLE | `BROWSE | `MULTIPLE | `EXTENDED ] + +type shadow_type = "GTK_SHADOW_" + [ `NONE | `IN | `OUT | `ETCHED_IN | `ETCHED_OUT ] + +type state_type = "GTK_STATE_" + [ `NORMAL | `ACTIVE | `PRELIGHT | `SELECTED | `INSENSITIVE ] + +type submenu_direction = "GTK_DIRECTION_" + [ `LEFT | `RIGHT ] + +type submenu_placement = "GTK_" + [ `TOP_BOTTOM | `LEFT_RIGHT ] + +type toolbar_style = "GTK_TOOLBAR_" + [ `ICONS | `TEXT | `BOTH ] + +type trough_type = "GTK_TROUGH_" + [ `NONE | `START | `END | `JUMP ] + +type update_type = "GTK_UPDATE_" + [ `CONTINUOUS | `DISCONTINUOUS | `DELAYED ] + +type visibility = "GTK_VISIBILITY_" + [ `NONE | `PARTIAL | `FULL ] + +type window_position = "GTK_WIN_POS_" + [ `NONE | `CENTER | `MOUSE | `CENTER_ALWAYS ] + +type window_type = "GTK_WINDOW_" + [ `TOPLEVEL | `DIALOG | `POPUP ] + +type sort_type = "GTK_SORT_" + [ `ASCENDING | `DESCENDING ] + + +type fundamental_type = "GTK_TYPE_" + [ `INVALID | `NONE | `CHAR | `BOOL | `INT | `UINT | `LONG | `ULONG + | `FLOAT | `DOUBLE | `STRING | `ENUM | `FLAGS | `BOXED | `FOREIGN + | `CALLBACK | `ARGS | `POINTER | `SIGNAL | `C_CALLBACK | `OBJECT ] + +type cell_type = "GTK_CELL_" + [ `EMPTY | `TEXT | `PIXMAP | `PIXTEXT | `WIDGET ] + +type toolbar_child = "GTK_TOOLBAR_CHILD_" + [ `SPACE | `BUTTON | `TOGGLEBUTTON | `RADIOBUTTON | `WIDGET ] + +type toolbar_space_style = "GTK_TOOLBAR_SPACE_" + [ `EMPTY | `LINE ] + +type tree_view_mode = "GTK_TREE_VIEW_" + [ `LINE | `ITEM ] + +type spin_type = "GTK_SPIN_" + [ `STEP_FORWARD | `STEP_BACKWARD | `PAGE_FORWARD | `PAGE_BACKWARD + | `HOME | `END | `USER_DEFINED ] + +type accel_flag = "GTK_ACCEL_" + [ `VISIBLE | `SIGNAL_VISIBLE | `LOCKED ] + +type packer_options = "GTK_" + [ `PACK_EXPAND | `FILL_X | `FILL_Y ] + +type side_type = "GTK_SIDE_" + [ `TOP | `BOTTOM | `LEFT | `RIGHT ] + +type anchor_type = "GTK_ANCHOR_" + [ `CENTER | `NORTH | `NW | `NE | `SOUTH | `SW | `SE | `WEST | `EAST ] + +type button_action = "GTK_BUTTON_" + [ `SELECTS | `DRAGS | `EXPANDS ] + +type calendar_display_options = "GTK_CALENDAR_" + [ `SHOW_HEADING | `SHOW_DAY_NAMES | `NO_MONTH_CHANGE | `SHOW_WEEK_NUMBERS + | `WEEK_START_MONDAY ] + +type progress_bar_style = "GTK_PROGRESS_" + [ `CONTINUOUS | `DISCRETE ] + +type progress_bar_orientation = "GTK_PROGRESS_" + [ `LEFT_TO_RIGHT | `RIGHT_TO_LEFT | `BOTTOM_TO_TOP | `TOP_TO_BOTTOM ] + +type dest_defaults = "GTK_DEST_DEFAULT_" + [ `MOTION | `HIGHLIGHT | `DROP | `ALL ] + +type target_flags = "GTK_TARGET_" + [ `SAME_APP | `SAME_WIDGET ] + +type font_metric_type = "GTK_FONT_METRIC_" + [ `PIXELS | `POINTS ] + +type font_type = "GTK_FONT_" + [ `BITMAP | `SCALABLE | `SCALABLE_BITMAP | `ALL ] + +type font_filter_type = "GTK_FONT_FILTER_" + [ `BASE | `USER ] + +(* +type tree_pos = "GTK_CTREE_POS_" + [ `BEFORE | `AS_CHILD | `AFTER ] + +type tree_line_style = "GTK_CTREE_LINES_" + [ `NONE | `SOLID | `DOTTED | `TABBED ] + +type tree_expander_style = "GTK_CTREE_EXPANDER_" + [ `NONE | `SQUARE | `TRIANGLE | `CIRCULAR ] + +type tree_expansion_type = "GTK_CTREE_EXPANSION_" + [ `EXPAND | `EXPAND_RECURSIVE | `COLLAPSE | `COLLAPSE_RECURSIVE + | `TOGGLE | `TOGGLE_RECURSIVE ] +*) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var new file mode 100644 index 000000000..57a9f7365 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var @@ -0,0 +1,19 @@ +(* $Id$ *) + +type visual_options = "GDK_GL_" [ + | `USE_GL + | `BUFFER_SIZE + | `LEVEL + | `RGBA + | `DOUBLEBUFFER + | `STEREO + | `AUX_BUFFERS + | `RED_SIZE + | `GREEN_SIZE + | `BLUE_SIZE + | `ALPHA_SIZE + | `DEPTH_SIZE + | `STENCIL_SIZE + | `ACCUM_GREEN_SIZE + | `ACCUM_ALPHA_SIZE +] diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var new file mode 100644 index 000000000..f26206ecf --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var @@ -0,0 +1,30 @@ +(* $Id$ *) + +type string_direction = "TSTRING_DIRECTION_" [ + | `R_TO_L + | `L_TO_R +] + +type alignment = "TALIGNMENT_" [ + | `END + | `CENTER + | `BEGINNING +] + +type line_type = "LINE_" [ + | `SOLID + | `DASHED + | `SINGLE + | `DOUBLE + | `STRIKE + | `UNDER + | `NONE "NO_LINE" +] + +type dither_type = "Xm" [ + | `QUICK + | `BEST + | `FAST + | `SLOW + | `DISABLED +] diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c new file mode 100644 index 000000000..052625888 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c @@ -0,0 +1,522 @@ +/* $Id$ */ + +#include +#include +#ifdef _WIN32 +#include +#else +#include +#endif +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "gdk_tags.h" + +void ml_raise_gdk (const char *errmsg) +{ + static value * exn = NULL; + if (exn == NULL) + exn = caml_named_value ("gdkerror"); + raise_with_string (*exn, (char*)errmsg); +} + +#include "gdk_tags.c" + +Make_OptFlags_val (GdkModifier_val) +Make_Flags_val (Event_mask_val) + +#define Make_test(conv) \ +value ml_test_##conv (value mask, value test) \ +{ return Val_bool (conv(mask) & Int_val(test)); } + +Make_test(GdkModifier_val) + +/* Colormap */ + +Make_Val_final_pointer (GdkColormap, gdk_colormap_ref, gdk_colormap_unref, 0) +ML_0 (gdk_colormap_get_system, Val_GdkColormap) + +/* Screen geometry */ +ML_0 (gdk_screen_width, Val_int) +ML_0 (gdk_screen_height, Val_int) + +/* Visual */ +value ml_gdk_visual_get_best (value depth, value type) +{ + GdkVisual *vis; + if (type == Val_unit) + if (depth == Val_unit) vis = gdk_visual_get_best (); + else vis = gdk_visual_get_best_with_depth (Int_val(Field(depth,0))); + else + if (depth == Val_unit) + vis = gdk_visual_get_best_with_type + (GdkVisualType_val(Field(type,0))); + else vis = gdk_visual_get_best_with_both + (Int_val(Field(depth,0)),GdkVisualType_val(Field(type,0))); + if (!vis) ml_raise_gdk("Gdk.Visual.get_best"); + return Val_GdkVisual(vis); +} + +Make_Extractor (GdkVisual,GdkVisual_val,type,Val_gdkVisualType) +Make_Extractor (GdkVisual,GdkVisual_val,depth,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,red_mask,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,red_shift,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,red_prec,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,green_mask,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,green_shift,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,green_prec,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,blue_mask,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,blue_shift,Val_int) +Make_Extractor (GdkVisual,GdkVisual_val,blue_prec,Val_int) + +/* Image */ + +Make_Val_final_pointer (GdkImage, Ignore, gdk_image_destroy, 0) +GdkImage *GdkImage_val(value val) +{ + if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkImage"); + return (GdkImage*)(Field(val,1)); +} +value ml_gdk_image_destroy (value val) +{ + if (Field(val,1)) gdk_image_destroy((GdkImage*)(Field(val,1))); + Field(val,1) = 0; + return Val_unit; +} +ML_4 (gdk_image_new_bitmap, GdkVisual_val, String_val, Int_val, Int_val, + Val_GdkImage) +ML_4 (gdk_image_new, GdkImageType_val, GdkVisual_val, Int_val, Int_val, + Val_GdkImage) +ML_5 (gdk_image_get, GdkWindow_val, Int_val, Int_val, Int_val, Int_val, + Val_GdkImage) +ML_4 (gdk_image_put_pixel, GdkImage_val, Int_val, Int_val, Int_val, Unit) +ML_3 (gdk_image_get_pixel, GdkImage_val, Int_val, Int_val, Val_int) + +/* Color */ + +ML_2 (gdk_colormap_new, GdkVisual_val, Bool_val, Val_GdkColormap) + +value ml_gdk_color_white (value cmap) +{ + GdkColor color; + gdk_color_white (GdkColormap_val(cmap), &color); + return Val_copy(color); +} + +value ml_gdk_color_black (value cmap) +{ + GdkColor color; + gdk_color_black (GdkColormap_val(cmap), &color); + return Val_copy(color); +} + +value ml_gdk_color_parse (char *spec) +{ + GdkColor color; + if (!gdk_color_parse (spec, &color)) + ml_raise_gdk ("color_parse"); + return Val_copy(color); +} + +ML_2 (gdk_color_alloc, GdkColormap_val, GdkColor_val, Val_bool) + +value ml_GdkColor (value red, value green, value blue) +{ + GdkColor color; + color.red = Int_val(red); + color.green = Int_val(green); + color.blue = Int_val(blue); + color.pixel = 0; + return Val_copy(color); +} + +Make_Extractor (GdkColor, GdkColor_val, red, Val_int) +Make_Extractor (GdkColor, GdkColor_val, green, Val_int) +Make_Extractor (GdkColor, GdkColor_val, blue, Val_int) +Make_Extractor (GdkColor, GdkColor_val, pixel, Val_int) + +/* Rectangle */ + +value ml_GdkRectangle (value x, value y, value width, value height) +{ + GdkRectangle rectangle; + rectangle.x = Int_val(x); + rectangle.y = Int_val(y); + rectangle.width = Int_val(width); + rectangle.height = Int_val(height); + return Val_copy(rectangle); +} + +Make_Extractor (GdkRectangle, GdkRectangle_val, x, Val_int) +Make_Extractor (GdkRectangle, GdkRectangle_val, y, Val_int) +Make_Extractor (GdkRectangle, GdkRectangle_val, width, Val_int) +Make_Extractor (GdkRectangle, GdkRectangle_val, height, Val_int) + +/* Window */ + +Make_Val_final_pointer (GdkWindow, gdk_window_ref, gdk_window_unref, 0) +Make_Extractor (gdk_visual_get, GdkVisual_val, depth, Val_int) +ML_1 (gdk_window_get_visual, GdkWindow_val, Val_GdkVisual) +ML_3 (gdk_window_set_back_pixmap, GdkWindow_val, GdkPixmap_val, Int_val, Unit) +ML_1 (gdk_window_clear, GdkWindow_val, Unit) +ML_0 (GDK_ROOT_PARENT, Val_GdkWindow) +ML_1 (gdk_window_get_parent, GdkWindow_val, Val_GdkWindow) +ML_1 (GDK_WINDOW_XWINDOW, GdkWindow_val, Val_XID) +value ml_gdk_window_get_position (value window) +{ + int x, y; + value ret; + + gdk_window_get_position (GdkWindow_val(window), &x, &y); + + ret = alloc_small (2,0); + Field(ret,0) = Val_int(x); + Field(ret,1) = Val_int(y); + return ret; +} + +value ml_gdk_window_get_size (value window) +{ + int x, y; + value ret; + + gdk_window_get_size (GdkWindow_val(window), &x, &y); + + ret = alloc_small (2,0); + Field(ret,0) = Val_int(x); + Field(ret,1) = Val_int(y); + return ret; +} + +/* Cursor */ + +ML_1 (gdk_cursor_new, GdkCursorType_val, Val_GdkCursor) +ML_6 (gdk_cursor_new_from_pixmap, GdkPixmap_val, GdkPixmap_val, + GdkColor_val, GdkColor_val, Int_val, Int_val, Val_GdkCursor) +ML_bc6 (ml_gdk_cursor_new_from_pixmap) +ML_1 (gdk_cursor_destroy, GdkCursor_val, Unit) + +/* Pixmap */ + +Make_Val_final_pointer (GdkPixmap, gdk_pixmap_ref, gdk_pixmap_unref, 0) +Make_Val_final_pointer (GdkBitmap, gdk_bitmap_ref, gdk_bitmap_unref, 0) +Make_Val_final_pointer_ext (GdkPixmap, _no_ref, Ignore, gdk_pixmap_unref, 20) +Make_Val_final_pointer_ext (GdkBitmap, _no_ref, Ignore, gdk_bitmap_unref, 20) +ML_4 (gdk_pixmap_new, GdkWindow_val, Int_val, Int_val, Int_val, + Val_GdkPixmap_no_ref) +ML_4 (gdk_bitmap_create_from_data, GdkWindow_val, + String_val, Int_val, Int_val, Val_GdkBitmap_no_ref) +ML_7 (gdk_pixmap_create_from_data, GdkWindow_val, String_val, + Int_val, Int_val, Int_val, GdkColor_val, GdkColor_val, + Val_GdkPixmap_no_ref) +ML_bc7 (ml_gdk_pixmap_create_from_data) + +value ml_gdk_pixmap_colormap_create_from_xpm + (value window, value colormap, value transparent, char *filename) +{ + CAMLparam0(); + GdkBitmap *mask; + CAMLlocal2(vpixmap, vmask); + value ret; + + vpixmap = Val_GdkPixmap_no_ref + (gdk_pixmap_colormap_create_from_xpm + (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL), + &mask, Option_val(transparent,GdkColor_val,NULL), filename)); + vmask = Val_GdkBitmap_no_ref (mask); + + ret = alloc_small (2,0); + Field(ret,0) = vpixmap; + Field(ret,1) = vmask; + CAMLreturn(ret); +} + +value ml_gdk_pixmap_colormap_create_from_xpm_d + (value window, value colormap, value transparent, char **data) +{ + CAMLparam0(); + GdkBitmap *mask; + CAMLlocal2(vpixmap, vmask); + value ret; + + vpixmap = Val_GdkPixmap_no_ref + (gdk_pixmap_colormap_create_from_xpm_d + (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL), + &mask, Option_val(transparent,GdkColor_val,NULL), data)); + vmask = Val_GdkBitmap_no_ref (mask); + + ret = alloc_small (2, 0); + Field(ret,0) = vpixmap; + Field(ret,1) = vmask; + CAMLreturn(ret); +} + +/* Font */ + +Make_Val_final_pointer (GdkFont, gdk_font_ref, gdk_font_unref, 0) +Make_Val_final_pointer_ext (GdkFont, _no_ref, Ignore, gdk_font_unref, 20) +ML_1 (gdk_font_load, String_val, Val_GdkFont_no_ref) +ML_1 (gdk_fontset_load, String_val, Val_GdkFont_no_ref) +ML_2 (gdk_string_width, GdkFont_val, String_val, Val_int) +ML_2 (gdk_char_width, GdkFont_val, (gchar)Long_val, Val_int) +ML_2 (gdk_string_height, GdkFont_val, String_val, Val_int) +ML_2 (gdk_char_height, GdkFont_val, (gchar)Long_val, Val_int) +ML_2 (gdk_string_measure, GdkFont_val, String_val, Val_int) +ML_2 (gdk_char_measure, GdkFont_val, (char)Long_val, Val_int) +Make_Extractor (GdkFont, GdkFont_val, type, Val_gdkFontType) +Make_Extractor (GdkFont, GdkFont_val, ascent, Val_int) +Make_Extractor (GdkFont, GdkFont_val, descent, Val_int) + +/* Region */ + +#define PointArray_val(val) ((GdkPoint*)&Field(val,1)) +#define PointArrayLen_val(val) Int_val(Field(val,0)) +Make_Val_final_pointer (GdkRegion, Ignore, gdk_region_destroy, 0) +GdkRegion *GdkRegion_val(value val) +{ + if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkRegion"); + return (GdkRegion*)(Field(val,1)); +} +value ml_gdk_region_destroy (value val) +{ + if (Field(val,1)) gdk_region_destroy((GdkRegion*)(Field(val,1))); + Field(val,1) = 0; + return Val_unit; +} +ML_0 (gdk_region_new, Val_GdkRegion) +ML_2 (gdk_region_polygon, Insert(PointArray_val(arg1)) PointArrayLen_val, + GdkFillRule_val, Val_GdkRegion) +ML_2 (gdk_regions_intersect, GdkRegion_val, GdkRegion_val, Val_GdkRegion) +ML_2 (gdk_regions_union, GdkRegion_val, GdkRegion_val, Val_GdkRegion) +ML_2 (gdk_regions_subtract, GdkRegion_val, GdkRegion_val, Val_GdkRegion) +ML_2 (gdk_regions_xor, GdkRegion_val, GdkRegion_val, Val_GdkRegion) +ML_2 (gdk_region_union_with_rect, GdkRegion_val, GdkRectangle_val, + Val_GdkRegion) +ML_3 (gdk_region_offset, GdkRegion_val, Int_val, Int_val, Unit) +ML_3 (gdk_region_shrink, GdkRegion_val, Int_val, Int_val, Unit) +ML_1 (gdk_region_empty, GdkRegion_val, Val_bool) +ML_2 (gdk_region_equal, GdkRegion_val, GdkRegion_val, Val_bool) +ML_3 (gdk_region_point_in, GdkRegion_val, Int_val, Int_val, Val_bool) +ML_2 (gdk_region_rect_in, GdkRegion_val, GdkRectangle_val, Val_gdkOverlapType) +ML_2 (gdk_region_get_clipbox, GdkRegion_val, GdkRectangle_val, Unit) + + +/* GC */ + +Make_Val_final_pointer (GdkGC, gdk_gc_ref, gdk_gc_unref, 0) +Make_Val_final_pointer_ext (GdkGC, _no_ref, Ignore, gdk_gc_unref, 20) +ML_1 (gdk_gc_new, GdkWindow_val, Val_GdkGC_no_ref) +ML_2 (gdk_gc_set_foreground, GdkGC_val, GdkColor_val, Unit) +ML_2 (gdk_gc_set_background, GdkGC_val, GdkColor_val, Unit) +ML_2 (gdk_gc_set_font, GdkGC_val, GdkFont_val, Unit) +ML_2 (gdk_gc_set_function, GdkGC_val, GdkFunction_val, Unit) +ML_2 (gdk_gc_set_fill, GdkGC_val, GdkFill_val, Unit) +ML_2 (gdk_gc_set_tile, GdkGC_val, GdkPixmap_val, Unit) +ML_2 (gdk_gc_set_stipple, GdkGC_val, GdkPixmap_val, Unit) +ML_3 (gdk_gc_set_ts_origin, GdkGC_val, Int_val, Int_val, Unit) +ML_3 (gdk_gc_set_clip_origin, GdkGC_val, Int_val, Int_val, Unit) +ML_2 (gdk_gc_set_clip_mask, GdkGC_val, GdkBitmap_val, Unit) +ML_2 (gdk_gc_set_clip_rectangle, GdkGC_val, GdkRectangle_val, Unit) +ML_2 (gdk_gc_set_clip_region, GdkGC_val, GdkRegion_val, Unit) +ML_2 (gdk_gc_set_subwindow, GdkGC_val, GdkSubwindowMode_val, Unit) +ML_2 (gdk_gc_set_exposures, GdkGC_val, Bool_val, Unit) +ML_5 (gdk_gc_set_line_attributes, GdkGC_val, Int_val, GdkLineStyle_val, + GdkCapStyle_val, GdkJoinStyle_val, Unit) +ML_2 (gdk_gc_copy, GdkGC_val, GdkGC_val, Unit) +value ml_gdk_gc_get_values (value gc) +{ + CAMLparam0(); + GdkGCValues values; + int i; + CAMLlocal2(ret, tmp); + + gdk_gc_get_values (GdkGC_val(gc), &values); + ret = alloc (18, 0); + tmp = Val_copy(values.foreground); Store_field(ret, 0, tmp); + tmp = Val_copy(values.background); Store_field(ret, 1, tmp); + if (values.font) { + tmp = ml_some(Val_GdkFont(values.font)); + Store_field(ret, 2, tmp); + } + Field(ret,3) = Val_gdkFunction(values.function); + Field(ret,4) = Val_gdkFill(values.fill); + if (values.tile) { + tmp = ml_some(Val_GdkPixmap(values.tile)); + Store_field(ret, 5, tmp); + } + if (values.tile) { + tmp = ml_some(Val_GdkPixmap(values.stipple)); + Store_field(ret, 6, tmp); + } + if (values.tile) { + tmp = ml_some(Val_GdkPixmap(values.clip_mask)); + Store_field(ret, 7, tmp); + } + Field(ret,8) = Val_gdkSubwindowMode(values.subwindow_mode); + Field(ret,9) = Val_int(values.ts_x_origin); + Field(ret,10) = Val_int(values.ts_y_origin); + Field(ret,11) = Val_int(values.clip_x_origin); + Field(ret,12) = Val_int(values.clip_y_origin); + Field(ret,13) = Val_bool(values.graphics_exposures); + Field(ret,14) = Val_int(values.line_width); + Field(ret,15) = Val_gdkLineStyle(values.line_style); + Field(ret,16) = Val_gdkCapStyle(values.cap_style); + Field(ret,17) = Val_gdkJoinStyle(values.join_style); + CAMLreturn(ret); +} + +/* Draw */ + +value ml_point_array_new (value len) +{ + value ret = alloc (1 + Wosize_asize(Int_val(len)*sizeof(GdkPoint)), + Abstract_tag); + Field(ret,0) = len; + return ret; +} +value ml_point_array_set (value arr, value pos, value x, value y) +{ + GdkPoint *pt = PointArray_val(arr) + Int_val(pos); + pt->x = Int_val(x); + pt->y = Int_val(y); + return Val_unit; +} + +ML_4 (gdk_draw_point, GdkDrawable_val, GdkGC_val, Int_val, Int_val, Unit) +ML_6 (gdk_draw_line, GdkDrawable_val, GdkGC_val, Int_val, Int_val, + Int_val, Int_val, Unit) +ML_bc6 (ml_gdk_draw_line) +ML_7 (gdk_draw_rectangle, GdkDrawable_val, GdkGC_val, Bool_val, + Int_val, Int_val, Int_val, Int_val, Unit) +ML_bc7 (ml_gdk_draw_rectangle) +ML_9 (gdk_draw_arc, GdkDrawable_val, GdkGC_val, Bool_val, Int_val, Int_val, + Int_val, Int_val, Int_val, Int_val, Unit) +ML_bc9 (ml_gdk_draw_arc) +ML_4 (gdk_draw_polygon, GdkDrawable_val, GdkGC_val, Bool_val, + Insert(PointArray_val(arg4)) PointArrayLen_val, Unit) +ML_6 (gdk_draw_string, GdkDrawable_val, GdkFont_val, GdkGC_val, Int_val, Int_val, String_val, Unit) +ML_bc6 (ml_gdk_draw_string) + +ML_9 (gdk_draw_image, GdkDrawable_val, GdkGC_val, GdkImage_val, Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit) +ML_bc9 (ml_gdk_draw_image) + +/* RGB */ + +ML_0 (gdk_rgb_init, Unit) +ML_0 (gdk_rgb_get_visual, Val_GdkVisual) +ML_0 (gdk_rgb_get_cmap, Val_GdkColormap) + +/* Events */ + +/* Have a major collection every 1000 events */ +Make_Val_final_pointer (GdkEvent, Ignore, gdk_event_free, 1) +ML_1 (gdk_event_copy, GdkEvent_val, Val_GdkEvent) + +value ml_gdk_event_new (value event_type) +{ + GdkEvent event; + memset (&event, 0, sizeof(GdkEvent)); + event.type = GdkEventType_val(event_type); + event.any.send_event = TRUE; + return Val_copy(event); +} + +#define GdkEvent_arg(type) (GdkEvent##type*)GdkEvent_val + +Make_Extractor (GdkEventAny, GdkEvent_arg(Any), type, Val_gdkEventType) +Make_Extractor (GdkEventAny, GdkEvent_arg(Any), window, Val_GdkWindow) +Make_Extractor (GdkEventAny, GdkEvent_arg(Any), send_event, Val_bool) +Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkEventType_val, type) +Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkWindow_val, window) + +Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), area, Val_copy) +Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), count, Val_int) + +Make_Extractor (GdkEventVisibility, GdkEvent_arg(Visibility), state, + Val_gdkVisibilityState) + +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), time, Val_int) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), pressure, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), xtilt, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), ytilt, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), state, Val_int) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), is_hint, Val_int) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), source, Val_gdkInputSource) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), deviceid, Val_int) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x_root, copy_double) +Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y_root, copy_double) + +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), time, Val_int) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), pressure, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), xtilt, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), ytilt, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), state, Val_int) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), button, Val_int) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), source, Val_gdkInputSource) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), deviceid, Val_int) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x_root, copy_double) +Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y_root, copy_double) + +Make_Setter (gdk_event_button_set, GdkEvent_arg(Button), Int_val, button) + +Make_Extractor (GdkEventKey, GdkEvent_arg(Key), time, Val_int) +Make_Extractor (GdkEventKey, GdkEvent_arg(Key), state, Val_int) +Make_Extractor (GdkEventKey, GdkEvent_arg(Key), keyval, Val_int) +Make_Extractor (GdkEventKey, GdkEvent_arg(Key), string, Val_string) + +Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), subwindow, + Val_GdkWindow) +Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), detail, + Val_gdkNotifyType) + +Make_Extractor (GdkEventFocus, GdkEvent_arg(Focus), in, Val_int) + +Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), x, Val_int) +Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), y, Val_int) +Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), width, Val_int) +Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), height, Val_int) + +Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), atom, Val_int) +Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), time, Val_int) +Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), state, Val_int) + +Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), selection, Val_int) +Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), target, Val_int) +Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), property, Val_int) +Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), requestor, Val_int) +Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), time, Val_int) + +Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), time, Val_int) +Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), source, + Val_gdkInputSource) +Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), deviceid, Val_int) + +/* DnD */ +Make_Val_final_pointer (GdkDragContext, gdk_drag_context_ref, gdk_drag_context_unref, 0) +Make_Flags_val (GdkDragAction_val) +ML_3 (gdk_drag_status, GdkDragContext_val, Flags_GdkDragAction_val, Int_val, Unit) +Make_Extractor (GdkDragContext, GdkDragContext_val, suggested_action, Val_gdkDragAction) +value val_int(gpointer i) +{ + return Val_int (GPOINTER_TO_INT(i)); +} +value ml_GdkDragContext_targets (value c) +{ + GList *t; + + t = (GdkDragContext_val(c))->targets; + return Val_GList (t, val_int); +} + +/* Misc */ +ML_0 (gdk_flush, Unit) +ML_0 (gdk_beep, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h new file mode 100644 index 000000000..5d699ace2 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h @@ -0,0 +1,53 @@ +/* $Id$ */ + +#define GdkColormap_val(val) ((GdkColormap*)Pointer_val(val)) +extern value Val_GdkColormap (GdkColormap *); + +#define GdkColor_val(val) ((GdkColor*)MLPointer_val(val)) +#define Val_GdkColor Val_pointer + +#define GdkRectangle_val(val) ((GdkRectangle*)MLPointer_val(val)) +#define Val_GdkRectangle Val_pointer + +#define GdkDrawable_val(val) ((GdkDrawable*)Pointer_val(val)) + +#define GdkWindow_val(val) ((GdkWindow*)Pointer_val(val)) +extern value Val_GdkWindow (GdkWindow *); + +#define GdkCursor_val(val) ((GdkCursor*)Pointer_val(val)) +#define Val_GdkCursor Val_pointer + +#define GdkPixmap_val(val) ((GdkPixmap*)Pointer_val(val)) +extern value Val_GdkPixmap (GdkPixmap *); + +#define GdkBitmap_val(val) ((GdkBitmap*)Pointer_val(val)) +extern value Val_GdkBitmap (GdkBitmap *); + +extern GdkImage *GdkImage_val (value); /* check argument */ +extern value Val_GdkImage (GdkImage *); /* finalizer is destroy! */ + +#define GdkFont_val(val) ((GdkFont*)Pointer_val(val)) +extern value Val_GdkFont (GdkFont *); + +extern GdkRegion *GdkRegion_val (value); /* check argument */ +extern value Val_GdkRegion (GdkRegion *); /* finalizer is destroy! */ + +#define GdkGC_val(val) ((GdkGC*)Pointer_val(val)) +extern value Val_GdkGC (GdkGC *); + +#define GdkEvent_val (GdkEvent*)MLPointer_val + +#define GdkVisual_val(val) ((GdkVisual*) val) +#define Val_GdkVisual(visual) ((value) visual) + +#define Val_XID copy_int32 +#define XID_val Int32_val + +extern int OptFlags_GdkModifier_val (value); +extern int Flags_Event_mask_val (value); +extern lookup_info ml_table_extension_events[]; +#define Extension_events_val(key) ml_lookup_to_c (ml_table_extension_events, key) + +#define GdkDragContext_val(val) ((GdkDragContext*)Pointer_val(val)) +extern value Val_GdkDragContext (GdkDragContext *); +extern int Flags_GdkDragAction_val (value); diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c new file mode 100644 index 000000000..a93bb586f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c @@ -0,0 +1,143 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" + +value copy_string_and_free (char *str) +{ + value res; + res = copy_string_check (str); + g_free (str); + return res; +} + +value Val_GList (GList *list, value (*func)(gpointer)) +{ + value new_cell, result, last_cell, cell; + + if (list == NULL) return Val_unit; + + last_cell = cell = Val_unit; + result = func(list->data); + Begin_roots3 (last_cell, cell, result); + cell = last_cell = alloc_small(2,0); + Field(cell,0) = result; + Field(cell,1) = Val_unit; + list = list->next; + while (list != NULL) { + result = func(list->data); + new_cell = alloc_small(2,0); + Field(new_cell,0) = result; + Field(new_cell,1) = Val_unit; + modify(&Field(last_cell,1), new_cell); + last_cell = new_cell; + list = list->next; + } + End_roots (); + return cell; +} + +GList *GList_val (value list, gpointer (*func)(value)) +{ + CAMLparam1(list); + GList *res = NULL; + if (list == Val_unit) CAMLreturn (res); + for (; Is_block(list); list = Field(list,1)) + res = g_list_append (res, func(Field(list,0))); + CAMLreturn (res); +} + +static value ml_warning_handler = 0L; + +static void ml_warning_wrapper (const gchar *msg) +{ + value arg = copy_string ((char*)msg); + callback (ml_warning_handler, arg); +} + +value ml_g_set_warning_handler (value clos) +{ + value old_handler = ml_warning_handler ? ml_warning_handler : clos; + if (!ml_warning_handler) register_global_root (&ml_warning_handler); + g_set_warning_handler (ml_warning_wrapper); + ml_warning_handler = clos; + return old_handler; +} + +static value ml_print_handler = 0L; + +static void ml_print_wrapper (const gchar *msg) +{ + value arg = copy_string ((char*)msg); + callback (ml_print_handler, arg); +} + +value ml_g_set_print_handler (value clos) +{ + value old_handler = ml_print_handler ? ml_print_handler : clos; + if (!ml_print_handler) register_global_root (&ml_print_handler); + g_set_print_handler (ml_print_wrapper); + ml_print_handler = clos; + return old_handler; +} + +value ml_get_null (value unit) { return 0L; } + +#define GMainLoop_val(val) ((GMainLoop*)Addr_val(val)) +ML_1 (g_main_new, Bool_val, Val_addr) +ML_1 (g_main_iteration, Bool_val, Val_bool) +ML_0 (g_main_pending, Val_bool) +ML_1 (g_main_is_running, GMainLoop_val, Val_bool) +ML_1 (g_main_quit, GMainLoop_val, Unit) +ML_1 (g_main_destroy, GMainLoop_val, Unit) + +/* +value Val_GSList (GSList *list, value (*func)(gpointer)) +{ + value new_cell, result, last_cell, cell; + + if (list == NULL) return Val_unit; + + last_cell = cell = Val_unit; + result = func(list->data); + Begin_roots3 (last_cell, cell, result); + cell = last_cell = alloc_tuple (2); + Field(cell,0) = result; + Field(cell,1) = Val_unit; + list = list->next; + while (list != NULL) { + result = func(list->data); + new_cell = alloc_tuple(2); + Field(new_cell,0) = result; + Field(new_cell,1) = Val_unit; + modify(&Field(last_cell,1), new_cell); + last_cell = new_cell; + list = list->next; + } + End_roots (); + return cell; +} + +GSList *GSList_val (value list, gpointer (*func)(value)) +{ + GSList *res = NULL; + GSList **current = &res; + value cell = list; + if (list == Val_unit) return res; + Begin_root (cell); + while (cell != Val_unit) { + *current = g_slist_alloc (); + (*current)->data = func(Field(cell,0)); + cell = Field(cell,1); + current = &(*current)->next; + } + End_roots (); + return res; +} +*/ diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h new file mode 100644 index 000000000..10f31ca7f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h @@ -0,0 +1,10 @@ +/* $Id$ */ + +value copy_string_and_free (char *str); /* for g_strings only */ +value Val_GList (GList *list, value (*func)(gpointer)); +GList *GList_val (value list, gpointer (*func)(value)); + +/* +value Val_GSList (GSList *list, value (*func)(gpointer)); +GSList *GSList_val (value list, gpointer (*func)(value)); +*/ diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c new file mode 100644 index 000000000..271f09405 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c @@ -0,0 +1,1013 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +void ml_raise_gtk (const char *errmsg) +{ + static value * exn = NULL; + if (exn == NULL) + exn = caml_named_value ("gtkerror"); + raise_with_string (*exn, (char*)errmsg); +} + +/* conversion functions */ + +#include "gtk_tags.c" + +ML_1 (Val_direction_type, Int_val, Id) +ML_1 (Val_orientation, Int_val, Id) +ML_1 (Val_toolbar_style, Int_val, Id) +ML_1 (Val_state_type, Int_val, Id) +ML_1 (Val_scroll_type, Int_val, Id) + +static Make_Flags_val (Dest_defaults_val) +static Make_Flags_val (Target_flags_val) +static Make_Flags_val (Font_type_val) + +/* gtkobject.h */ + +Make_Val_final_pointer(GtkObject, gtk_object_ref, gtk_object_unref, 0) + +#define gtk_object_ref_and_sink(w) (gtk_object_ref(w), gtk_object_sink(w)) +Make_Val_final_pointer_ext(GtkObject, _sink , gtk_object_ref_and_sink, + gtk_object_unref, 20) + +/* gtkaccelgroup.h */ + +Make_Val_final_pointer (GtkAccelGroup, gtk_accel_group_ref, + gtk_accel_group_unref, 0) +Make_Val_final_pointer_ext (GtkAccelGroup, _no_ref, Ignore, + gtk_accel_group_unref, 20) +Make_OptFlags_val (Accel_flag_val) + +#define Signal_name_val(val) String_val(Field(val,0)) + +ML_0 (gtk_accel_group_new, Val_GtkAccelGroup_no_ref) +ML_0 (gtk_accel_group_get_default, Val_GtkAccelGroup) +ML_3 (gtk_accel_group_activate, GtkAccelGroup_val, Int_val, + OptFlags_GdkModifier_val, Val_bool) +ML_3 (gtk_accel_groups_activate, GtkObject_val, Int_val, + OptFlags_GdkModifier_val, Val_bool) +ML_2 (gtk_accel_group_attach, GtkAccelGroup_val, GtkObject_val, Unit) +ML_2 (gtk_accel_group_detach, GtkAccelGroup_val, GtkObject_val, Unit) +ML_1 (gtk_accel_group_lock, GtkAccelGroup_val, Unit) +ML_1 (gtk_accel_group_unlock, GtkAccelGroup_val, Unit) +ML_3 (gtk_accel_group_lock_entry, GtkAccelGroup_val, Int_val, + OptFlags_GdkModifier_val, Unit) +ML_3 (gtk_accel_group_unlock_entry, GtkAccelGroup_val, Int_val, + OptFlags_GdkModifier_val, Unit) +ML_6 (gtk_accel_group_add, GtkAccelGroup_val, Int_val, + OptFlags_GdkModifier_val, OptFlags_Accel_flag_val, + GtkObject_val, Signal_name_val, Unit) +ML_bc6 (ml_gtk_accel_group_add) +ML_4 (gtk_accel_group_remove, GtkAccelGroup_val, Int_val, + OptFlags_GdkModifier_val, GtkObject_val, Unit) +ML_2 (gtk_accelerator_valid, Int_val, OptFlags_GdkModifier_val, Val_bool) +ML_1 (gtk_accelerator_set_default_mod_mask, OptFlags_GdkModifier_val, Unit) + +/* gtkstyle.h */ + +Make_Val_final_pointer (GtkStyle, gtk_style_ref, gtk_style_unref, 0) +Make_Val_final_pointer_ext (GtkStyle, _no_ref, Ignore, gtk_style_unref, 20) +ML_0 (gtk_style_new, Val_GtkStyle_no_ref) +ML_1 (gtk_style_copy, GtkStyle_val, Val_GtkStyle_no_ref) +ML_2 (gtk_style_attach, GtkStyle_val, GdkWindow_val, Val_GtkStyle) +ML_1 (gtk_style_detach, GtkStyle_val, Unit) +ML_3 (gtk_style_set_background, GtkStyle_val, GdkWindow_val, State_type_val, Unit) +ML_6 (gtk_draw_hline, GtkStyle_val, GdkWindow_val, State_type_val, + Int_val, Int_val, Int_val, Unit) +ML_bc6 (ml_gtk_draw_hline) +ML_6 (gtk_draw_vline, GtkStyle_val, GdkWindow_val, State_type_val, + Int_val, Int_val, Int_val, Unit) +ML_bc6 (ml_gtk_draw_vline) +Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val, bg, Val_copy) +Make_Array_Setter (gtk_style_set, GtkStyle_val, State_type_val, *GdkColor_val, bg) +Make_Extractor (gtk_style_get, GtkStyle_val, colormap, Val_GdkColormap) +Make_Extractor (gtk_style_get, GtkStyle_val, depth, Val_int) +Make_Extractor (gtk_style_get, GtkStyle_val, font, Val_GdkFont) +/* Make_Setter (gtk_style_set, GtkStyle_val, GdkFont_val, font) */ +value ml_gtk_style_set_font (value st, value font) +{ + GtkStyle *style = GtkStyle_val(st); + if (style->font) gdk_font_unref(style->font); + style->font = GdkFont_val(font); + gdk_font_ref(style->font); + return Val_unit; +} +Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val, dark_gc, Val_GdkGC) +Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val, light_gc, Val_GdkGC) + +/* gtktypeutils.h */ + +ML_1 (gtk_type_name, Int_val, Val_string) +ML_1 (gtk_type_from_name, String_val, Val_int) +ML_1 (gtk_type_parent, Int_val, Val_int) +ML_1 (gtk_type_class, Int_val, (value)) +ML_1 (gtk_type_parent_class, Int_val, (value)) +ML_2 (gtk_type_is_a, Int_val, Int_val, Val_bool) +value ml_gtk_type_fundamental (value type) +{ + return Val_fundamental_type (GTK_FUNDAMENTAL_TYPE (Int_val(type))); +} + +/* gtkobject.h */ + +/* ML_1 (GTK_OBJECT_TYPE, GtkObject_val, Val_int) */ +value ml_gtk_object_type (value val) +{ + return Val_int (GtkObject_val(val)->klass->type); +} + +ML_1 (gtk_object_destroy, GtkObject_val, Unit) +ML_1 (gtk_object_ref, GtkObject_val, Unit) +ML_1 (gtk_object_unref, GtkObject_val, Unit) +ML_1 (gtk_object_sink, GtkObject_val, Unit) + +Make_Extractor (gtk_class,(GtkObjectClass *),type,Val_int) + +/* gtkdata.h */ + +/* gtkadjustment.h */ + +ML_6 (gtk_adjustment_new, Float_val, Float_val, Float_val, Float_val, + Float_val, Float_val, Val_GtkObject_sink) +ML_bc6 (ml_gtk_adjustment_new) +ML_2 (gtk_adjustment_set_value, GtkAdjustment_val, Float_val, Unit) +ML_3 (gtk_adjustment_clamp_page, GtkAdjustment_val, + Float_val, Float_val, Unit) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, lower, copy_double) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, upper, copy_double) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, value, copy_double) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, step_increment, + copy_double) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_increment, + copy_double) +Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_size, copy_double) + +/* gtktooltips.h */ + +#define GtkTooltips_val(val) check_cast(GTK_TOOLTIPS,val) +ML_0 (gtk_tooltips_new, Val_GtkAny) +ML_1 (gtk_tooltips_enable, GtkTooltips_val, Unit) +ML_1 (gtk_tooltips_disable, GtkTooltips_val, Unit) +ML_2 (gtk_tooltips_set_delay, GtkTooltips_val, Int_val, Unit) +ML_4 (gtk_tooltips_set_tip, GtkTooltips_val, GtkWidget_val, + String_option_val, String_option_val, Unit) +ML_3 (gtk_tooltips_set_colors, GtkTooltips_val, + Option_val(arg2, GdkColor_val, NULL) Ignore, + Option_val(arg3, GdkColor_val, NULL) Ignore, + Unit) + +/* gtkwidget.h */ + +value ml_gtk_widget_set_can_default (value val, value bool) +{ + GtkWidget *w = GtkWidget_val(val); + guint32 saved_flags = GTK_WIDGET_FLAGS(w); + if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_DEFAULT); + else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_DEFAULT); + if (saved_flags != GTK_WIDGET_FLAGS(w)) + gtk_widget_queue_resize (w); + return Val_unit; +} +value ml_gtk_widget_set_can_focus (value val, value bool) +{ + GtkWidget *w = GtkWidget_val(val); + guint32 saved_flags = GTK_WIDGET_FLAGS(w); + if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_FOCUS); + else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_FOCUS); + if (saved_flags != GTK_WIDGET_FLAGS(w)) + gtk_widget_queue_resize (w); + return Val_unit; +} +ML_1 (gtk_widget_unparent, GtkWidget_val, Unit) +ML_1 (gtk_widget_show, GtkWidget_val, Unit) +ML_1 (gtk_widget_show_now, GtkWidget_val, Unit) +ML_1 (gtk_widget_show_all, GtkWidget_val, Unit) +ML_1 (gtk_widget_hide, GtkWidget_val, Unit) +ML_1 (gtk_widget_hide_all, GtkWidget_val, Unit) +ML_1 (gtk_widget_map, GtkWidget_val, Unit) +ML_1 (gtk_widget_unmap, GtkWidget_val, Unit) +ML_1 (gtk_widget_realize, GtkWidget_val, Unit) +ML_1 (gtk_widget_unrealize, GtkWidget_val, Unit) +ML_1 (gtk_widget_queue_draw, GtkWidget_val, Unit) +ML_1 (gtk_widget_queue_resize, GtkWidget_val, Unit) +ML_2 (gtk_widget_draw, GtkWidget_val, + Option_val(arg2,GdkRectangle_val,NULL) Ignore, Unit) +ML_1 (gtk_widget_draw_focus, GtkWidget_val, Unit) +ML_1 (gtk_widget_draw_default, GtkWidget_val, Unit) +/* ML_1 (gtk_widget_draw_children, GtkWidget_val, Unit) */ +ML_2 (gtk_widget_event, GtkWidget_val, GdkEvent_val, Val_bool) +ML_1 (gtk_widget_activate, GtkWidget_val, Val_bool) +ML_2 (gtk_widget_reparent, GtkWidget_val, GtkWidget_val, Unit) +ML_3 (gtk_widget_popup, GtkWidget_val, Int_val, Int_val, Unit) +value ml_gtk_widget_intersect (value w, value area) +{ + GdkRectangle inter; + if (gtk_widget_intersect(GtkWidget_val(w), GdkRectangle_val(area), &inter)) + return ml_some (Val_copy (inter)); + return Val_unit; +} +/* ML_1 (gtk_widget_basic, GtkWidget_val, Val_bool) */ +ML_1 (gtk_widget_grab_focus, GtkWidget_val, Unit) +ML_1 (gtk_widget_grab_default, GtkWidget_val, Unit) +ML_2 (gtk_widget_set_name, GtkWidget_val, String_val, Unit) +ML_1 (gtk_widget_get_name, GtkWidget_val, Val_string) +ML_2 (gtk_widget_set_state, GtkWidget_val, State_type_val, Unit) +ML_2 (gtk_widget_set_sensitive, GtkWidget_val, Bool_val, Unit) +ML_3 (gtk_widget_set_uposition, GtkWidget_val, Int_val, Int_val, Unit) +ML_3 (gtk_widget_set_usize, GtkWidget_val, Int_val, Int_val, Unit) +ML_2 (gtk_widget_add_events, GtkWidget_val, Flags_Event_mask_val, Unit) +ML_2 (gtk_widget_set_events, GtkWidget_val, Flags_Event_mask_val, Unit) +ML_2 (gtk_widget_set_extension_events, GtkWidget_val, Extension_events_val, + Unit) +ML_1 (gtk_widget_get_toplevel, GtkWidget_val, Val_GtkWidget) +ML_2 (gtk_widget_get_ancestor, GtkWidget_val, Int_val, Val_GtkWidget) +ML_1 (gtk_widget_get_colormap, GtkWidget_val, Val_GdkColormap) +ML_1 (gtk_widget_get_visual, GtkWidget_val, (value)) +value ml_gtk_widget_get_pointer (value w) +{ + int x,y; + value ret; + gtk_widget_get_pointer (GtkWidget_val(w), &x, &y); + ret = alloc_small (2,0); + Field(ret,0) = Val_int(x); + Field(ret,1) = Val_int(y); + return ret; +} +ML_2 (gtk_widget_is_ancestor, GtkWidget_val, GtkWidget_val, Val_bool) +/* ML_2 (gtk_widget_is_child, GtkWidget_val, GtkWidget_val, Val_bool) */ +ML_2 (gtk_widget_set_style, GtkWidget_val, GtkStyle_val, Unit) +ML_1 (gtk_widget_set_rc_style, GtkWidget_val, Unit) +ML_1 (gtk_widget_ensure_style, GtkWidget_val, Unit) +ML_1 (gtk_widget_get_style, GtkWidget_val, Val_GtkStyle) +ML_1 (gtk_widget_restore_default_style, GtkWidget_val, Unit) + +ML_6 (gtk_widget_add_accelerator, GtkWidget_val, Signal_name_val, + GtkAccelGroup_val, Char_val, OptFlags_GdkModifier_val, + OptFlags_Accel_flag_val, Unit) +ML_bc6 (ml_gtk_widget_add_accelerator) +ML_4 (gtk_widget_remove_accelerator, GtkWidget_val, GtkAccelGroup_val, + Char_val, OptFlags_GdkModifier_val, Unit) +ML_1 (gtk_widget_lock_accelerators, GtkWidget_val, Unit) +ML_1 (gtk_widget_unlock_accelerators, GtkWidget_val, Unit) +ML_1 (gtk_widget_accelerators_locked, GtkWidget_val, Val_bool) + +ML_1 (GTK_WIDGET_VISIBLE, GtkWidget_val, Val_bool) +ML_1 (GTK_WIDGET_HAS_FOCUS, GtkWidget_val, Val_bool) + +Make_Extractor (GtkWidget, GtkWidget_val, window, Val_GdkWindow) +Make_Extractor (gtk_widget, GtkWidget_val, parent, Val_GtkWidget) +static value Val_GtkAllocation (GtkAllocation allocation) +{ + value ret = alloc_small (4, 0); + Field(ret,0) = Val_int(allocation.x); + Field(ret,1) = Val_int(allocation.y); + Field(ret,2) = Val_int(allocation.width); + Field(ret,3) = Val_int(allocation.height); + return ret; +} +Make_Extractor (gtk_widget, GtkWidget_val, allocation, Val_GtkAllocation) +/* +#define GtkAllocation_val(val) ((GtkAllocation*)Pointer_val(val)) +Make_Extractor (gtk_allocation, GtkAllocation_val, x, Val_int) +Make_Extractor (gtk_allocation, GtkAllocation_val, y, Val_int) +Make_Extractor (gtk_allocation, GtkAllocation_val, width, Val_int) +Make_Extractor (gtk_allocation, GtkAllocation_val, height, Val_int) +*/ + +ML_2 (gtk_widget_set_app_paintable, GtkWidget_val, Bool_val, Unit) + +ML_2 (gtk_widget_set_visual, GtkWidget_val, GdkVisual_val, Unit) +ML_2 (gtk_widget_set_colormap, GtkWidget_val, GdkColormap_val, Unit) +ML_1 (gtk_widget_set_default_visual, GdkVisual_val, Unit) +ML_1 (gtk_widget_set_default_colormap, GdkColormap_val, Unit) +ML_0 (gtk_widget_get_default_visual, Val_GdkVisual) +ML_0 (gtk_widget_get_default_colormap, Val_GdkColormap) +ML_1 (gtk_widget_push_visual, GdkVisual_val, Unit) +ML_1 (gtk_widget_push_colormap, GdkColormap_val, Unit) +ML_0 (gtk_widget_pop_visual, Unit) +ML_0 (gtk_widget_pop_colormap, Unit) + +/* gtkdnd.h */ + +value ml_gtk_drag_dest_set (value w, value f, value t, value a) +{ + GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit; + int n_targets, i; + + CAMLparam4 (w,f,t,a); + n_targets = Wosize_val(t); + if (n_targets) + targets = (GtkTargetEntry *) + alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)), + Abstract_tag); + for (i=0; ilength < 0) ml_raise_null_pointer(); + ret = alloc_string (data->length); + if (data->length) memcpy ((void*)ret, data->data, data->length); + return ret; +} + +ML_4 (gtk_selection_data_set, GtkSelectionData_val, Int_val, Int_val, + Insert((guchar*)String_option_val(arg4)) + Option_val(arg4, string_length, -1) Ignore, + Unit) + +/* gtkcontainer.h */ + +#define GtkContainer_val(val) check_cast(GTK_CONTAINER,val) +ML_2 (gtk_container_set_border_width, GtkContainer_val, Int_val, Unit) +ML_2 (gtk_container_set_resize_mode, GtkContainer_val, Resize_mode_val, Unit) +ML_2 (gtk_container_add, GtkContainer_val, GtkWidget_val, Unit) +ML_2 (gtk_container_remove, GtkContainer_val, GtkWidget_val, Unit) +static void ml_gtk_simple_callback (GtkWidget *w, gpointer data) +{ + value val, *clos = (value*)data; + val = Val_GtkWidget(w); + callback (*clos, val); +} +value ml_gtk_container_foreach (value w, value clos) +{ + CAMLparam1(clos); + gtk_container_foreach (GtkContainer_val(w), ml_gtk_simple_callback, + &clos); + CAMLreturn(Val_unit); +} +ML_1 (gtk_container_register_toplevel, GtkContainer_val, Unit) +ML_1 (gtk_container_unregister_toplevel, GtkContainer_val, Unit) +ML_2 (gtk_container_focus, GtkContainer_val, Direction_type_val, Val_bool) +ML_2 (gtk_container_set_focus_child, GtkContainer_val, GtkWidget_val, Unit) +ML_2 (gtk_container_set_focus_vadjustment, GtkContainer_val, + GtkAdjustment_val, Unit) +ML_2 (gtk_container_set_focus_hadjustment, GtkContainer_val, + GtkAdjustment_val, Unit) + +/* gtkdialog.h */ + +static void window_unref (GtkObject *w) +{ + /* If the window exists and is still not visible, then unreference twice. + This should be enough to destroy it. */ + if (!GTK_OBJECT_DESTROYED(w) && !GTK_WIDGET_VISIBLE(w)) + gtk_object_unref (w); + gtk_object_unref (w); +} +Make_Val_final_pointer_ext (GtkObject, _window, gtk_object_ref, window_unref, + 20) +#define Val_GtkWidget_window(w) Val_GtkObject_window((GtkObject*)w) + +#define GtkDialog_val(val) check_cast(GTK_DIALOG,val) +ML_0 (gtk_dialog_new, Val_GtkWidget_window) +Make_Extractor (GtkDialog, GtkDialog_val, action_area, Val_GtkWidget) +Make_Extractor (GtkDialog, GtkDialog_val, vbox, Val_GtkWidget) + +/* gtkinputdialog.h */ + +ML_0 (gtk_input_dialog_new, Val_GtkWidget_window) + +/* gtkfileselection.h */ + +#define GtkFileSelection_val(val) check_cast(GTK_FILE_SELECTION,val) +ML_1 (gtk_file_selection_new, String_val, Val_GtkWidget_window) +ML_2 (gtk_file_selection_set_filename, GtkFileSelection_val, String_val, Unit) +ML_1 (gtk_file_selection_get_filename, GtkFileSelection_val, Val_string) +ML_1 (gtk_file_selection_show_fileop_buttons, GtkFileSelection_val, Unit) +ML_1 (gtk_file_selection_hide_fileop_buttons, GtkFileSelection_val, Unit) +Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, ok_button, + Val_GtkWidget) +Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, cancel_button, + Val_GtkWidget) +Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, help_button, + Val_GtkWidget) + +/* gtkwindow.h */ + +#define GtkWindow_val(val) check_cast(GTK_WINDOW,val) +ML_1 (gtk_window_new, Window_type_val, Val_GtkWidget_window) +ML_2 (gtk_window_set_title, GtkWindow_val, String_val, Unit) +ML_3 (gtk_window_set_wmclass, GtkWindow_val, String_val, String_val, Unit) +Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_name, Val_optstring) +Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_class, Val_optstring) +ML_2 (gtk_window_set_focus, GtkWindow_val, GtkWidget_val, Unit) +ML_2 (gtk_window_set_default, GtkWindow_val, GtkWidget_val, Unit) +ML_4 (gtk_window_set_policy, GtkWindow_val, Bool_val, Bool_val, Bool_val, Unit) +Make_Extractor (gtk_window_get, GtkWindow_val, allow_shrink, Val_bool) +Make_Extractor (gtk_window_get, GtkWindow_val, allow_grow, Val_bool) +Make_Extractor (gtk_window_get, GtkWindow_val, auto_shrink, Val_bool) +ML_2 (gtk_window_add_accel_group, GtkWindow_val, + GtkAccelGroup_val, Unit) +ML_2 (gtk_window_remove_accel_group, GtkWindow_val, + GtkAccelGroup_val, Unit) +ML_1 (gtk_window_activate_focus, GtkWindow_val, Val_bool) +ML_1 (gtk_window_activate_default, GtkWindow_val, Val_bool) +ML_2 (gtk_window_set_modal, GtkWindow_val, Bool_val, Unit) +ML_3 (gtk_window_set_default_size, GtkWindow_val, Int_val, Int_val, Unit) +ML_2 (gtk_window_set_position, GtkWindow_val, Window_position_val, Unit) +ML_2 (gtk_window_set_transient_for, GtkWindow_val, GtkWindow_val, Unit) + +/* gtkcolorsel.h */ + +#define GtkColorSelection_val(val) check_cast(GTK_COLOR_SELECTION,val) +#define GtkColorSelectionDialog_val(val) check_cast(GTK_COLOR_SELECTION_DIALOG,val) +ML_0 (gtk_color_selection_new, Val_GtkWidget_sink) +ML_2 (gtk_color_selection_set_update_policy, GtkColorSelection_val, + Update_type_val, Unit) +ML_2 (gtk_color_selection_set_opacity, GtkColorSelection_val, + Bool_val, Unit) +value ml_gtk_color_selection_set_color (value w, value red, value green, + value blue, value opacity) +{ + double color[4]; + color[0] = Double_val(red); + color[1] = Double_val(green); + color[2] = Double_val(blue); + color[3] = Option_val(opacity,Double_val,0.0); + gtk_color_selection_set_color (GtkColorSelection_val(w), color); + return Val_unit; +} +value ml_gtk_color_selection_get_color (value w) +{ + value ret; + double color[4]; + color[3] = 0.0; + gtk_color_selection_get_color (GtkColorSelection_val(w), color); + ret = alloc (4*Double_wosize, Double_array_tag); + Store_double_field (ret, 0, color[0]); + Store_double_field (ret, 1, color[1]); + Store_double_field (ret, 2, color[2]); + Store_double_field (ret, 3, color[3]); + return ret; +} +ML_1 (gtk_color_selection_dialog_new, String_val, Val_GtkWidget_window) +Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, ok_button, Val_GtkWidget) +Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, cancel_button, Val_GtkWidget) +Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, help_button, Val_GtkWidget) +Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, colorsel, Val_GtkWidget) + +/* gtkfontsel.h */ + +#define GtkFontSelection_val(val) \ + check_cast(GTK_FONT_SELECTION,val) +ML_0 (gtk_font_selection_new, Val_GtkWidget_sink) +ML_1 (gtk_font_selection_get_font, GtkFontSelection_val, + Val_GdkFont) +ML_1 (gtk_font_selection_get_font_name, GtkFontSelection_val, + copy_string_check) +ML_2 (gtk_font_selection_set_font_name, GtkFontSelection_val, + String_val, Val_bool) +ML_9 (gtk_font_selection_set_filter, GtkFontSelection_val, + Font_filter_type_val, Flags_Font_type_val, + (gchar**), (gchar**), (gchar**), + (gchar**), (gchar**), (gchar**), Unit) +ML_bc9 (ml_gtk_font_selection_set_filter) +ML_1 (gtk_font_selection_get_preview_text, GtkFontSelection_val, + copy_string) +ML_2 (gtk_font_selection_set_preview_text, GtkFontSelection_val, + String_val, Unit) + +#define GtkFontSelectionDialog_val(val) \ + check_cast(GTK_FONT_SELECTION_DIALOG,val) +ML_1 (gtk_font_selection_dialog_new, String_option_val, Val_GtkWidget_window) +/* +ML_1 (gtk_font_selection_dialog_get_font, GtkFontSelectionDialog_val, + Val_GdkFont) +ML_1 (gtk_font_selection_dialog_get_font_name, GtkFontSelectionDialog_val, + copy_string_check) +ML_2 (gtk_font_selection_dialog_set_font_name, GtkFontSelectionDialog_val, + String_val, Val_bool) +ML_9 (gtk_font_selection_dialog_set_filter, GtkFontSelectionDialog_val, + Font_filter_type_val, Flags_Font_type_val, + (gchar**), (gchar**), (gchar**), + (gchar**), (gchar**), (gchar**), Unit) +ML_bc9 (ml_gtk_font_selection_dialog_set_filter) +ML_1 (gtk_font_selection_dialog_get_preview_text, GtkFontSelectionDialog_val, + copy_string) +ML_2 (gtk_font_selection_dialog_set_preview_text, GtkFontSelectionDialog_val, + String_val, Unit) +*/ +Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val, + fontsel, Val_GtkWidget) +Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val, + ok_button, Val_GtkWidget) +Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val, + apply_button, Val_GtkWidget) +Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val, + cancel_button, Val_GtkWidget) + +/* gtkplug.h */ + +ML_1 (gtk_plug_new, XID_val, Val_GtkWidget_window) + +/* gtkctree.h */ +#define GtkCTree_val(val) check_cast(GTK_CTREE,val) +/* Beware: this definition axpects arg1 to be a GtkCTree */ +/* +#define GtkCTreeNode_val(val) \ + (gtk_ctree_find(GtkCTree_val(arg1),NULL,(GtkCTreeNode*)(val-1)) \ + ? (GtkCTreeNode*)(val-1) : (ml_raise_gtk ("Bad GtkCTreeNode"), NULL)) +#define Val_GtkCTreeNode Val_addr +ML_2 (gtk_ctree_new, Int_val, Int_val, Val_GtkWidget_sink) +ML_3 (gtk_ctree_new_with_titles, Int_val, Int_val, (char **), + Val_GtkWidget_sink) +ML_11 (gtk_ctree_insert_node, GtkCTree_val, GtkCTreeNode_val, + GtkCTreeNode_val, (char**), Int_val, GdkPixmap_val, GdkBitmap_val, + GdkPixmap_val, GdkBitmap_val, Bool_val, Bool_val, + Val_GtkCTreeNode) +ML_2 (gtk_ctree_remove_node, GtkCTree_val, GtkCTreeNode_val, Unit) +ML_2 (gtk_ctree_is_viewable, GtkCTree_val, GtkCTreeNode_val, Val_bool) +*/ + +/* gtkpreview.h */ +/* +#define GtkPreview_val(val) GTK_PREVIEW(Pointer_val(val)) +ML_1 (gtk_preview_new, Preview_val, Val_GtkWidget_sink) +ML_3 (gtk_preview_size, GtkPreview_val, Int_val, Int_val, Unit) +ML_9 (gtk_preview_put, GtkPreview_val, GdkWindow_val, GdkGC_val, + Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit) +ML_bc9 (ml_gtk_preview_put) +*/ + +/* gtkmain.h */ + +value ml_gtk_init (value argv) +{ + CAMLparam1 (argv); + int argc = Wosize_val(argv), i; + CAMLlocal1 (copy); + + copy = (argc ? alloc (argc, Abstract_tag) : Atom(0)); + for (i = 0; i < argc; i++) Field(copy,i) = Field(argv,i); + gtk_init (&argc, (char ***)©); + + argv = (argc ? alloc (argc, 0) : Atom(0)); + for (i = 0; i < argc; i++) modify(&Field(argv,i), Field(copy,i)); + CAMLreturn (argv); +} +ML_1 (gtk_exit, Int_val, Unit) +ML_0 (gtk_set_locale, Val_string) +ML_0 (gtk_main, Unit) +ML_1 (gtk_main_iteration_do, Bool_val, Val_bool) +ML_0 (gtk_main_quit, Unit) +ML_1 (gtk_grab_add, GtkWidget_val, Unit) +ML_1 (gtk_grab_remove, GtkWidget_val, Unit) +ML_0 (gtk_grab_get_current, Val_GtkWidget) +value ml_gtk_get_version (value unit) +{ + value ret = alloc_small(3,0); + Field(ret,0) = Val_int(gtk_major_version); + Field(ret,1) = Val_int(gtk_minor_version); + Field(ret,2) = Val_int(gtk_micro_version); + return ret; +} + +/* Marshalling */ + +void ml_gtk_callback_marshal (GtkObject *object, gpointer data, + guint nargs, GtkArg *args) +{ + value vargs = alloc_small(3,0); + + CAMLparam1 (vargs); + Field(vargs,0) = (value) object; + Field(vargs,1) = Val_int(nargs); + Field(vargs,2) = (value) args; + + callback (*(value*)data, vargs); + + Field(vargs,0) = Val_int(-1); + Field(vargs,1) = Val_int(-1); + CAMLreturn0; +} + +value ml_gtk_arg_shift (GtkArg *args, value index) +{ + return (value) (&args[Int_val(index)]); +} + +value ml_gtk_arg_get_type (GtkArg *arg) +{ + return Val_int (arg->type); +} + +value ml_gtk_arg_get (GtkArg *arg) +{ + CAMLparam0(); + CAMLlocal1(tmp); + value ret = Val_unit; + GtkFundamentalType type = GTK_FUNDAMENTAL_TYPE(arg->type); + int tag; + + switch (type) { + case GTK_TYPE_CHAR: + tag = 0; + tmp = Int_val(GTK_VALUE_CHAR(*arg)); + break; + case GTK_TYPE_BOOL: + tag = 1; + tmp = Val_bool(GTK_VALUE_BOOL(*arg)); + break; + case GTK_TYPE_INT: + case GTK_TYPE_ENUM: + case GTK_TYPE_UINT: + case GTK_TYPE_FLAGS: + tag = 2; + tmp = Val_int (GTK_VALUE_INT(*arg)); break; + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: + tag = 2; + tmp = Val_int (GTK_VALUE_LONG(*arg)); break; + case GTK_TYPE_FLOAT: + tag = 3; + tmp = copy_double ((double)GTK_VALUE_FLOAT(*arg)); break; + case GTK_TYPE_DOUBLE: + tag = 3; + tmp = copy_double (GTK_VALUE_DOUBLE(*arg)); break; + case GTK_TYPE_STRING: + tag = 4; + tmp = Val_option (GTK_VALUE_STRING(*arg), copy_string); break; + case GTK_TYPE_OBJECT: + tag = 5; + tmp = Val_option (GTK_VALUE_OBJECT(*arg), Val_GtkObject); break; + case GTK_TYPE_BOXED: + case GTK_TYPE_POINTER: + tag = 6; + tmp = Val_option (GTK_VALUE_POINTER(*arg), Val_pointer); break; + default: + tag = -1; + } + if (tag != -1) { + ret = alloc_small(1,tag); + Field(ret,0) = tmp; + } + CAMLreturn(ret); +} + +value ml_gtk_arg_set_retloc (GtkArg *arg, value val) +{ + value type = Fundamental_type_val(Is_block(val) ? Field(val,0) : val); + value data = (Is_block(val) ? Field(val,1) : 0); + if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_POINTER + && GTK_FUNDAMENTAL_TYPE(arg->type) != type) + ml_raise_gtk ("GtkArgv.Arg.set : argument type mismatch"); + switch (type) { + case GTK_TYPE_CHAR: *GTK_RETLOC_CHAR(*arg) = Int_val(data); break; + case GTK_TYPE_BOOL: *GTK_RETLOC_BOOL(*arg) = Int_val(data); break; + case GTK_TYPE_INT: + case GTK_TYPE_ENUM: *GTK_RETLOC_INT(*arg) = Int_val(data); break; + case GTK_TYPE_UINT: + case GTK_TYPE_FLAGS: *GTK_RETLOC_UINT(*arg) = Int32_val(data); break; + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: *GTK_RETLOC_LONG(*arg) = Nativeint_val(data); break; + case GTK_TYPE_FLOAT: *GTK_RETLOC_FLOAT(*arg) = Float_val(data); break; + case GTK_TYPE_DOUBLE: *GTK_RETLOC_DOUBLE(*arg) = Double_val(data); break; + case GTK_TYPE_STRING: + *GTK_RETLOC_STRING(*arg) = Option_val(data, String_val, NULL); + break; + case GTK_TYPE_BOXED: + case GTK_TYPE_POINTER: + case GTK_TYPE_OBJECT: + *GTK_RETLOC_POINTER(*arg) = Option_val(data, Pointer_val, NULL); + break; + } + return Val_unit; +} + +/* +value ml_gtk_arg_get_char (GtkArg *arg) +{ + if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_CHAR) + ml_raise_gtk ("argument type mismatch"); + return Val_char (GTK_VALUE_CHAR(*arg)); +} + +value ml_gtk_arg_get_bool (GtkArg *arg) +{ + if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_BOOL) + ml_raise_gtk ("argument type mismatch"); + return Val_bool (GTK_VALUE_BOOL(*arg)); +} + +value ml_gtk_arg_get_int (GtkArg *arg) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_INT: + case GTK_TYPE_UINT: + return Val_int (GTK_VALUE_INT(*arg)); + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: + return Val_long (GTK_VALUE_LONG(*arg)); + case GTK_TYPE_ENUM: + return Val_int (GTK_VALUE_ENUM(*arg)); + case GTK_TYPE_FLAGS: + return Val_int (GTK_VALUE_FLAGS(*arg)); + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} +*/ +value ml_gtk_arg_get_nativeint(GtkArg *arg) { + + switch(GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_INT: + case GTK_TYPE_UINT: + return copy_nativeint (GTK_VALUE_INT(*arg)); + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: + return copy_nativeint (GTK_VALUE_LONG(*arg)); + case GTK_TYPE_ENUM: + return copy_nativeint (GTK_VALUE_ENUM(*arg)); + case GTK_TYPE_FLAGS: + return copy_nativeint (GTK_VALUE_FLAGS(*arg)); + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} +/* +value ml_gtk_arg_get_float (GtkArg *arg) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_FLOAT: + return copy_double ((double)GTK_VALUE_FLOAT(*arg)); + case GTK_TYPE_DOUBLE: + return copy_double (GTK_VALUE_DOUBLE(*arg)); + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_get_string (GtkArg *arg) +{ + char *p; + if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_STRING) + ml_raise_gtk ("argument type mismatch"); + p = GTK_VALUE_STRING(*arg); + return Val_option (p, copy_string); +} +*/ +value ml_gtk_arg_get_pointer (GtkArg *arg) +{ + gpointer p = NULL; + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_STRING: + case GTK_TYPE_BOXED: + case GTK_TYPE_POINTER: + case GTK_TYPE_OBJECT: + p = GTK_VALUE_POINTER(*arg); break; + default: + ml_raise_gtk ("GtkArgv.get_pointer : argument type mismatch"); + } + return Val_pointer(p); +} +/* +value ml_gtk_arg_get_object (GtkArg *arg) +{ + GtkObject *p; + if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_OBJECT) + ml_raise_gtk ("argument type mismatch"); + p = GTK_VALUE_OBJECT(*arg); + return Val_option (p, Val_GtkObject); +} +*/ + +value ml_string_at_pointer (value ofs, value len, value ptr) +{ + char *start = ((char*)Pointer_val(ptr)) + Option_val(ofs, Int_val, 0); + int length = Option_val(len, Int_val, strlen(start)); + value ret = alloc_string(length); + memcpy ((char*)ret, start, length); + return ret; +} + +value ml_int_at_pointer (value ptr) +{ + return Val_int(*(int*)Pointer_val(ptr)); +} + +/* +value ml_gtk_arg_set_char (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_CHAR: + *GTK_RETLOC_CHAR(*arg) = Char_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_bool (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_BOOL: + *GTK_RETLOC_BOOL(*arg) = Bool_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_int (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_INT: + case GTK_TYPE_UINT: + *GTK_RETLOC_INT(*arg) = Int_val(val); break; + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: + *GTK_RETLOC_LONG(*arg) = Long_val(val); break; + case GTK_TYPE_ENUM: + *GTK_RETLOC_ENUM(*arg) = Int_val(val); break; + case GTK_TYPE_FLAGS: + *GTK_RETLOC_FLAGS(*arg) = Int_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_nativeint (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_INT: + case GTK_TYPE_UINT: + *GTK_RETLOC_INT(*arg) = Nativeint_val(val); break; + case GTK_TYPE_LONG: + case GTK_TYPE_ULONG: + *GTK_RETLOC_LONG(*arg) = Nativeint_val(val); break; + case GTK_TYPE_ENUM: + *GTK_RETLOC_ENUM(*arg) = Nativeint_val(val); break; + case GTK_TYPE_FLAGS: + *GTK_RETLOC_FLAGS(*arg) = Nativeint_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_float (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_FLOAT: + *GTK_RETLOC_FLOAT(*arg) = (float) Double_val(val); break; + case GTK_TYPE_DOUBLE: + *GTK_RETLOC_DOUBLE(*arg) = Double_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_string (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_STRING: + *GTK_RETLOC_STRING(*arg) = String_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_pointer (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_BOXED: + *GTK_RETLOC_BOXED(*arg) = Pointer_val(val); break; + case GTK_TYPE_POINTER: + *GTK_RETLOC_POINTER(*arg) = Pointer_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} + +value ml_gtk_arg_set_object (GtkArg *arg, value val) +{ + switch (GTK_FUNDAMENTAL_TYPE(arg->type)) { + case GTK_TYPE_POINTER: + case GTK_TYPE_OBJECT: + *GTK_RETLOC_OBJECT(*arg) = GtkObject_val(val); break; + default: + ml_raise_gtk ("argument type mismatch"); + } + return Val_unit; +} +*/ + +/* gtksignal.h */ + +value ml_gtk_signal_connect (value object, value name, value clos, value after) +{ + value *clos_p = ml_global_root_new (clos); + return Val_int (gtk_signal_connect_full + (GtkObject_val(object), String_val(name), NULL, + ml_gtk_callback_marshal, clos_p, + ml_global_root_destroy, FALSE, Bool_val(after))); +} + +ML_2 (gtk_signal_disconnect, GtkObject_val, Int_val, Unit) +ML_2 (gtk_signal_emit_stop_by_name, GtkObject_val, String_val, Unit) +ML_2 (gtk_signal_handler_block, GtkObject_val, Int_val, Unit) +ML_2 (gtk_signal_handler_unblock, GtkObject_val, Int_val, Unit) +ML_2_name (ml_gtk_signal_emit_none, gtk_signal_emit_by_name, + GtkObject_val, String_val, Unit) +ML_3_name (ml_gtk_signal_emit_int, gtk_signal_emit_by_name, + GtkObject_val, String_val, Int_val, Unit) +ML_4_name (ml_gtk_signal_emit_scroll, gtk_signal_emit_by_name, + GtkObject_val, String_val, Scroll_type_val, Double_val, Unit) + +/* gtkmain.h (again) */ + +value ml_gtk_timeout_add (value interval, value clos) +{ + value *clos_p = ml_global_root_new (clos); + return Val_int (gtk_timeout_add_full + (Int_val(interval), NULL, ml_gtk_callback_marshal, clos_p, + ml_global_root_destroy)); +} +ML_1 (gtk_timeout_remove, Int_val, Unit) + +ML_1 (gtk_rc_add_default_file, String_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h new file mode 100644 index 000000000..eac3f6ea5 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h @@ -0,0 +1,24 @@ +/* $Id$ */ + +#define GtkObject_val(obj) ((GtkObject*)Field(obj,1)) +value Val_GtkObject (GtkObject *w); +value Val_GtkObject_sink (GtkObject *w); +#define GtkAccelGroup_val(val) ((GtkAccelGroup*)Pointer_val(val)) +value Val_GtkAccelGroup (GtkAccelGroup *); +#define GtkStyle_val(val) ((GtkStyle*)Pointer_val(val)) +value Val_GtkStyle (GtkStyle *); + +#define Val_GtkAny(w) Val_GtkObject((GtkObject*)w) +#define Val_GtkAny_sink(w) Val_GtkObject_sink((GtkObject*)w) +#define Val_GtkWidget Val_GtkAny +#define Val_GtkWidget_sink Val_GtkAny_sink + +#ifdef GTK_NO_CHECK_CASTS +#define check_cast(f,v) f(Pointer_val(v)) +#else +#define check_cast(f,v) (Pointer_val(v) == NULL ? NULL : f(Pointer_val(v))) +#endif + +#define GtkWidget_val(val) check_cast(GTK_WIDGET,val) +#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val) +#define GtkItem_val(val) check_cast(GTK_ITEM,val) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c new file mode 100644 index 000000000..9b797a6c9 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c @@ -0,0 +1,118 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkalignment.h */ + +#define GtkAlignment_val(val) check_cast(GTK_ALIGNMENT,val) +ML_4 (gtk_alignment_new, Float_val, Float_val, Float_val, Float_val, + Val_GtkWidget_sink) +value ml_gtk_alignment_set (value x, value y, + value xscale, value yscale, value val) +{ + GtkAlignment *alignment = GtkAlignment_val(val); + gtk_alignment_set (alignment, + Option_val(x, Float_val, alignment->xalign), + Option_val(y, Float_val, alignment->yalign), + Option_val(xscale, Float_val, alignment->xscale), + Option_val(yscale, Float_val, alignment->xscale)); + return Val_unit; +} + +/* gtkeventbox.h */ + +ML_0 (gtk_event_box_new, Val_GtkWidget_sink) + +/* gtkframe.h */ + +#define GtkFrame_val(val) check_cast(GTK_FRAME,val) +ML_1 (gtk_frame_new, Optstring_val, Val_GtkWidget_sink) +ML_2 (gtk_frame_set_label, GtkFrame_val, Optstring_val, Unit) +ML_3 (gtk_frame_set_label_align, GtkFrame_val, Float_val, Float_val, Unit) +ML_2 (gtk_frame_set_shadow_type, GtkFrame_val, Shadow_type_val, Unit) +Make_Extractor (gtk_frame_get, GtkFrame_val, label_xalign, copy_double) +Make_Extractor (gtk_frame_get, GtkFrame_val, label_yalign, copy_double) + +/* gtkaspectframe.h */ + +#define GtkAspectFrame_val(val) check_cast(GTK_ASPECT_FRAME,val) +ML_5 (gtk_aspect_frame_new, Optstring_val, + Float_val, Float_val, Float_val, Bool_val, Val_GtkWidget_sink) +ML_5 (gtk_aspect_frame_set, GtkAspectFrame_val, Float_val, Float_val, + Float_val, Bool_val, Unit) +Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, xalign, copy_double) +Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, yalign, copy_double) +Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, ratio, copy_double) +Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, obey_child, Val_bool) + +/* gtkhandlebox.h */ + +#define GtkHandleBox_val(val) check_cast(GTK_HANDLE_BOX,val) +ML_0 (gtk_handle_box_new, Val_GtkWidget_sink) +ML_2 (gtk_handle_box_set_shadow_type, GtkHandleBox_val, Shadow_type_val, Unit) +ML_2 (gtk_handle_box_set_handle_position, GtkHandleBox_val, Position_val, Unit) +ML_2 (gtk_handle_box_set_snap_edge, GtkHandleBox_val, Position_val, Unit) + +/* gtkinvisible.h */ +/* private class +ML_0 (gtk_invisible_new, Val_GtkWidget_sink) +*/ + +/* gtkitem.h */ + +ML_1 (gtk_item_select, GtkItem_val, Unit) +ML_1 (gtk_item_deselect, GtkItem_val, Unit) +ML_1 (gtk_item_toggle, GtkItem_val, Unit) + +/* gtkviewport.h */ + +#define GtkViewport_val(val) check_cast(GTK_VIEWPORT,val) +ML_2 (gtk_viewport_new, GtkAdjustment_val, GtkAdjustment_val, + Val_GtkWidget_sink) +ML_1 (gtk_viewport_get_hadjustment, GtkViewport_val, Val_GtkWidget_sink) +ML_1 (gtk_viewport_get_vadjustment, GtkViewport_val, Val_GtkWidget) +ML_2 (gtk_viewport_set_hadjustment, GtkViewport_val, GtkAdjustment_val, Unit) +ML_2 (gtk_viewport_set_vadjustment, GtkViewport_val, GtkAdjustment_val, Unit) +ML_2 (gtk_viewport_set_shadow_type, GtkViewport_val, Shadow_type_val, Unit) + +/* gtkscrolledwindow.h */ + +#define GtkScrolledWindow_val(val) check_cast(GTK_SCROLLED_WINDOW,val) +ML_2 (gtk_scrolled_window_new, GtkAdjustment_val ,GtkAdjustment_val, + Val_GtkWidget_sink) +ML_2 (gtk_scrolled_window_set_hadjustment, GtkScrolledWindow_val , + GtkAdjustment_val, Unit) +ML_2 (gtk_scrolled_window_set_vadjustment, GtkScrolledWindow_val , + GtkAdjustment_val, Unit) +ML_1 (gtk_scrolled_window_get_hadjustment, GtkScrolledWindow_val, + Val_GtkWidget) +ML_1 (gtk_scrolled_window_get_vadjustment, GtkScrolledWindow_val, + Val_GtkWidget) +ML_3 (gtk_scrolled_window_set_policy, GtkScrolledWindow_val, + Policy_type_val, Policy_type_val, Unit) +Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val, + hscrollbar_policy, Val_policy_type) +Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val, + vscrollbar_policy, Val_policy_type) +ML_2 (gtk_scrolled_window_set_placement, GtkScrolledWindow_val, + Corner_type_val, Unit) +ML_2 (gtk_scrolled_window_add_with_viewport, GtkScrolledWindow_val, + GtkWidget_val, Unit) + +/* gtksocket.h */ + +#define GtkSocket_val(val) check_cast(GTK_SOCKET,val) +ML_0 (gtk_socket_new, Val_GtkWidget_sink) +ML_2 (gtk_socket_steal, GtkSocket_val, XID_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c new file mode 100644 index 000000000..a718305e6 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c @@ -0,0 +1,75 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkbutton.h */ + +#define GtkButton_val(val) check_cast(GTK_BUTTON,val) +ML_0 (gtk_button_new, Val_GtkWidget_sink) +ML_1 (gtk_button_new_with_label, String_val, Val_GtkWidget_sink) +ML_1 (gtk_button_pressed, GtkButton_val, Unit) +ML_1 (gtk_button_released, GtkButton_val, Unit) +ML_1 (gtk_button_clicked, GtkButton_val, Unit) +ML_1 (gtk_button_enter, GtkButton_val, Unit) +ML_1 (gtk_button_leave, GtkButton_val, Unit) + +/* gtktogglebutton.h */ + +#define GtkToggleButton_val(val) check_cast(GTK_TOGGLE_BUTTON,val) +ML_0 (gtk_toggle_button_new, Val_GtkWidget_sink) +ML_1 (gtk_toggle_button_new_with_label, String_val, Val_GtkWidget_sink) +ML_2 (gtk_toggle_button_set_mode, GtkToggleButton_val, Bool_val, Unit) +ML_2 (gtk_toggle_button_set_active, GtkToggleButton_val, Bool_val, Unit) +ML_1 (gtk_toggle_button_toggled, GtkToggleButton_val, Unit) +Make_Extractor (gtk_toggle_button_get, GtkToggleButton_val, active, Val_bool) + +/* gtkcheckbutton.h */ + +#define GtkCheckButton_val(val) check_cast(GTK_CHECK_BUTTON,val) +ML_0 (gtk_check_button_new, Val_GtkWidget_sink) +ML_1 (gtk_check_button_new_with_label, String_val, Val_GtkWidget_sink) + +/* gtkradiobutton.h */ + +#define GtkRadioButton_val(val) check_cast(GTK_RADIO_BUTTON,val) +static GSList* button_group_val(value val) +{ + return (val == Val_unit ? NULL : + gtk_radio_button_group(GtkRadioButton_val(Field(val,0)))); +} +ML_1 (gtk_radio_button_new, button_group_val, + Val_GtkWidget_sink) +ML_2 (gtk_radio_button_new_with_label, button_group_val, + String_val, Val_GtkWidget_sink) +ML_2 (gtk_radio_button_set_group, GtkRadioButton_val, button_group_val, Unit) + +/* gtktoolbar.h */ + +#define GtkToolbar_val(val) check_cast(GTK_TOOLBAR,val) +ML_2 (gtk_toolbar_new, Orientation_val, Toolbar_style_val, Val_GtkWidget_sink) +ML_2 (gtk_toolbar_insert_space, GtkToolbar_val, Int_val, Unit) +ML_7 (gtk_toolbar_insert_element, GtkToolbar_val, Toolbar_child_val, + Insert(NULL) Optstring_val, Optstring_val, Optstring_val, GtkWidget_val, + Insert(NULL) Insert(NULL) Int_val, Val_GtkWidget) +ML_bc7 (ml_gtk_toolbar_insert_element) +ML_5 (gtk_toolbar_insert_widget, GtkToolbar_val, GtkWidget_val, + Optstring_val, Optstring_val, Int_val, Unit) +ML_2 (gtk_toolbar_set_orientation, GtkToolbar_val, Orientation_val, Unit) +ML_2 (gtk_toolbar_set_style, GtkToolbar_val, Toolbar_style_val, Unit) +ML_2 (gtk_toolbar_set_space_size, GtkToolbar_val, Int_val, Unit) +ML_2 (gtk_toolbar_set_space_style, GtkToolbar_val, Toolbar_space_style_val, Unit) +ML_2 (gtk_toolbar_set_tooltips, GtkToolbar_val, Bool_val, Unit) +ML_2 (gtk_toolbar_set_button_relief, GtkToolbar_val, Relief_style_val, Unit) +ML_1 (gtk_toolbar_get_button_relief, GtkToolbar_val, Val_relief_style) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c new file mode 100644 index 000000000..1c64ec2c7 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c @@ -0,0 +1,126 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkeditable.h */ + +#define GtkEditable_val(val) check_cast(GTK_EDITABLE,val) +ML_3 (gtk_editable_select_region, GtkEditable_val, Int_val, Int_val, Unit) +value ml_gtk_editable_insert_text (value w, value s, value pos) +{ + int position = Int_val(pos); + gtk_editable_insert_text (GtkEditable_val(w), String_val(s), + string_length(s), &position); + return Val_int(position); +} +ML_3 (gtk_editable_delete_text, GtkEditable_val, Int_val, Int_val, Unit) +ML_3 (gtk_editable_get_chars, GtkEditable_val, Int_val, Int_val, + copy_string_and_free) +ML_1 (gtk_editable_cut_clipboard, GtkEditable_val, Unit) +ML_1 (gtk_editable_copy_clipboard, GtkEditable_val, Unit) +ML_1 (gtk_editable_paste_clipboard, GtkEditable_val, Unit) +ML_3 (gtk_editable_claim_selection, GtkEditable_val, Bool_val, Int_val, Unit) +ML_1 (gtk_editable_delete_selection, GtkEditable_val, Unit) +ML_1 (gtk_editable_changed, GtkEditable_val, Unit) +ML_2 (gtk_editable_set_position, GtkEditable_val, Int_val, Unit) +ML_1 (gtk_editable_get_position, GtkEditable_val, Val_int) +ML_2 (gtk_editable_set_editable, GtkEditable_val, Bool_val, Unit) +Make_Extractor (gtk_editable, GtkEditable_val, selection_start_pos, Val_int) +Make_Extractor (gtk_editable, GtkEditable_val, selection_end_pos, Val_int) +Make_Extractor (gtk_editable, GtkEditable_val, has_selection, Val_bool) + +/* gtkentry.h */ + +#define GtkEntry_val(val) check_cast(GTK_ENTRY,val) +ML_0 (gtk_entry_new, Val_GtkWidget_sink) +ML_1 (gtk_entry_new_with_max_length, (gint16)Long_val, Val_GtkWidget_sink) +ML_2 (gtk_entry_set_text, GtkEntry_val, String_val, Unit) +ML_2 (gtk_entry_append_text, GtkEntry_val, String_val, Unit) +ML_2 (gtk_entry_prepend_text, GtkEntry_val, String_val, Unit) +ML_1 (gtk_entry_get_text, GtkEntry_val, Val_string) +ML_3 (gtk_entry_select_region, GtkEntry_val, Int_val, Int_val, Unit) +ML_2 (gtk_entry_set_visibility, GtkEntry_val, Bool_val, Unit) +ML_2 (gtk_entry_set_max_length, GtkEntry_val, (gint16)Long_val, Unit) +Make_Extractor (GtkEntry, GtkEntry_val, text_length, Val_int) + +/* gtkspinbutton.h */ + +#define GtkSpinButton_val(val) check_cast(GTK_SPIN_BUTTON,val) +ML_3 (gtk_spin_button_new, GtkAdjustment_val, + Float_val, Int_val, Val_GtkWidget_sink) +ML_2 (gtk_spin_button_set_adjustment, GtkSpinButton_val, GtkAdjustment_val, + Unit) +ML_1 (gtk_spin_button_get_adjustment, GtkSpinButton_val, Val_GtkAny) +ML_2 (gtk_spin_button_set_digits, GtkSpinButton_val, Int_val, Unit) +ML_1 (gtk_spin_button_get_value_as_float, GtkSpinButton_val, copy_double) +ML_2 (gtk_spin_button_set_value, GtkSpinButton_val, Float_val, Unit) +ML_2 (gtk_spin_button_set_update_policy, GtkSpinButton_val, + Update_type_val, Unit) +ML_2 (gtk_spin_button_set_numeric, GtkSpinButton_val, Bool_val, Unit) +ML_2 (gtk_spin_button_spin, GtkSpinButton_val, + Insert (Is_long(arg2) ? Spin_type_val(arg2) : GTK_SPIN_USER_DEFINED) + (Is_long(arg2) ? 0.0 : Float_val(Field(arg2,1))) Ignore, Unit) +ML_2 (gtk_spin_button_set_wrap, GtkSpinButton_val, Bool_val, Unit) +ML_2 (gtk_spin_button_set_shadow_type, GtkSpinButton_val, Shadow_type_val, Unit) +ML_2 (gtk_spin_button_set_snap_to_ticks, GtkSpinButton_val, Bool_val, Unit) +ML_4 (gtk_spin_button_configure, GtkSpinButton_val, GtkAdjustment_val, + Float_val, Int_val, Unit) +ML_1 (gtk_spin_button_update, GtkSpinButton_val, Unit) + +/* gtktext.h */ + +#define GtkText_val(val) check_cast(GTK_TEXT,val) +ML_2 (gtk_text_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink) +ML_2 (gtk_text_set_word_wrap, GtkText_val, Bool_val, Unit) +ML_2 (gtk_text_set_line_wrap, GtkText_val, Bool_val, Unit) +ML_3 (gtk_text_set_adjustments, GtkText_val, + Option_val(arg2,GtkAdjustment_val,GtkText_val(arg1)->hadj) Ignore, + Option_val(arg3,GtkAdjustment_val,GtkText_val(arg1)->vadj) Ignore, + Unit) +Make_Extractor (gtk_text_get, GtkText_val, hadj, Val_GtkWidget) +Make_Extractor (gtk_text_get, GtkText_val, vadj, Val_GtkWidget) +ML_2 (gtk_text_set_point, GtkText_val, Int_val, Unit) +ML_1 (gtk_text_get_point, GtkText_val, Val_int) +ML_1 (gtk_text_get_length, GtkText_val, Val_int) +ML_1 (gtk_text_freeze, GtkText_val, Unit) +ML_1 (gtk_text_thaw, GtkText_val, Unit) +value ml_gtk_text_insert (value text, value font, value fore, value back, + value str) +{ + gtk_text_insert (GtkText_val(text), + Option_val(font,GdkFont_val,NULL), + Option_val(fore,GdkColor_val,NULL), + Option_val(back,GdkColor_val,NULL), + String_val(str), string_length(str)); + return Val_unit; +} +ML_2 (gtk_text_forward_delete, GtkText_val, Int_val, Val_int) +ML_2 (gtk_text_backward_delete, GtkText_val, Int_val, Val_int) + +/* gtkcombo.h */ + +#define GtkCombo_val(val) check_cast(GTK_COMBO,val) +ML_0 (gtk_combo_new, Val_GtkWidget_sink) +ML_3 (gtk_combo_set_value_in_list, GtkCombo_val, + Option_val(arg2, Bool_val, GtkCombo_val(arg1)->value_in_list) Ignore, + Option_val(arg3, Bool_val, GtkCombo_val(arg1)->ok_if_empty) Ignore, + Unit) +ML_2 (gtk_combo_set_use_arrows, GtkCombo_val, Bool_val, Unit) +ML_2 (gtk_combo_set_use_arrows_always, GtkCombo_val, Bool_val, Unit) +ML_2 (gtk_combo_set_case_sensitive, GtkCombo_val, Bool_val, Unit) +ML_3 (gtk_combo_set_item_string, GtkCombo_val, GtkItem_val, String_val, Unit) +ML_1 (gtk_combo_disable_activate, GtkCombo_val, Unit) +Make_Extractor (gtk_combo, GtkCombo_val, entry, Val_GtkWidget) +Make_Extractor (gtk_combo, GtkCombo_val, list, Val_GtkWidget) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c new file mode 100644 index 000000000..5e0efd718 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c @@ -0,0 +1,54 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtkgl_tags.h" + +/* Conversion functions */ +#include "gtkgl_tags.c" + +#define GtkGLArea_val(val) ((GtkGLArea*)GtkObject_val(val)) + +value ml_gtk_gl_area_new (value list, value share) +{ + value cursor, res; + int len, i; + int *attrs; + + for (len = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1)) + { + if (Is_block(Field(cursor,0))) len += 2; + else len++; + } + + attrs = (int*) stat_alloc ((len+1)*sizeof(int)); + + for (i = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1)) + { + value option = Field(cursor,0); + if (Is_block(option)) { + attrs[i++] = Visual_options_val(Field(option,0)); + attrs[i++] = Int_val(Field(option,1)); + } + else attrs[i++] = Visual_options_val(option); + } + attrs[i] = GDK_GL_NONE; + + res = Val_GtkObject + ((GtkObject*)gtk_gl_area_share_new(attrs,GtkGLArea_val(share))); + stat_free(attrs); + return res; +} + +ML_1 (gtk_gl_area_make_current, GtkGLArea_val, Val_bool) +ML_1 (gtk_gl_area_swapbuffers, GtkGLArea_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c new file mode 100644 index 000000000..d651ca3ab --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c @@ -0,0 +1,168 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +static Make_Flags_val (Button_action_val) + +/* gtklistitem.h */ + +ML_0 (gtk_list_item_new, Val_GtkWidget_sink) +ML_1 (gtk_list_item_new_with_label, String_val, Val_GtkWidget_sink) + +/* gtklist.h */ + +#define GtkList_val(val) check_cast(GTK_LIST,val) +ML_0 (gtk_list_new, Val_GtkWidget_sink) +value ml_gtk_list_insert_item (value list, value item, value pos) +{ + GList *tmp_list = g_list_alloc (); + tmp_list->data = GtkWidget_val(item); + tmp_list->next = NULL; + tmp_list->prev = NULL; + gtk_list_insert_items (GtkList_val(list), tmp_list, Int_val(pos)); + return Val_unit; +} +ML_3 (gtk_list_clear_items, GtkList_val, Int_val, Int_val, Unit) +ML_2 (gtk_list_select_item, GtkList_val, Int_val, Unit) +ML_2 (gtk_list_unselect_item, GtkList_val, Int_val, Unit) +ML_2 (gtk_list_select_child, GtkList_val, GtkWidget_val, Unit) +ML_2 (gtk_list_unselect_child, GtkList_val, GtkWidget_val, Unit) +ML_2 (gtk_list_child_position, GtkList_val, GtkWidget_val, Val_int) +ML_2 (gtk_list_set_selection_mode, GtkList_val, Selection_mode_val, Unit) + +/* gtkclist.h */ + +#define GtkCList_val(val) check_cast(GTK_CLIST,val) +ML_1 (gtk_clist_new, Int_val, Val_GtkWidget_sink) +ML_1 (gtk_clist_new_with_titles, Insert(Wosize_val(arg1)) (char **), + Val_GtkWidget_sink) +Make_Extractor (gtk_clist_get, GtkCList_val, rows, Val_int) +Make_Extractor (gtk_clist_get, GtkCList_val, columns, Val_int) +Make_Extractor (gtk_clist_get, GtkCList_val, focus_row, Val_int) +ML_2 (gtk_clist_set_hadjustment, GtkCList_val, GtkAdjustment_val, Unit) +ML_2 (gtk_clist_set_vadjustment, GtkCList_val, GtkAdjustment_val, Unit) +ML_1 (gtk_clist_get_hadjustment, GtkCList_val, Val_GtkAny) +ML_1 (gtk_clist_get_vadjustment, GtkCList_val, Val_GtkAny) +ML_2 (gtk_clist_set_shadow_type, GtkCList_val, Shadow_type_val, Unit) +ML_2 (gtk_clist_set_selection_mode, GtkCList_val, Selection_mode_val, Unit) +ML_2 (gtk_clist_set_reorderable, GtkCList_val, Bool_val, Unit) +ML_2 (gtk_clist_set_use_drag_icons, GtkCList_val, Bool_val, Unit) +ML_3 (gtk_clist_set_button_actions, GtkCList_val, Int_val, + (guint8)Flags_Button_action_val, Unit) +ML_1 (gtk_clist_freeze, GtkCList_val, Unit) +ML_1 (gtk_clist_thaw, GtkCList_val, Unit) +ML_1 (gtk_clist_column_titles_show, GtkCList_val, Unit) +ML_1 (gtk_clist_column_titles_hide, GtkCList_val, Unit) +ML_2 (gtk_clist_column_title_active, GtkCList_val, Int_val, Unit) +ML_2 (gtk_clist_column_title_passive, GtkCList_val, Int_val, Unit) +ML_1 (gtk_clist_column_titles_active, GtkCList_val, Unit) +ML_1 (gtk_clist_column_titles_passive, GtkCList_val, Unit) +ML_3 (gtk_clist_set_column_title, GtkCList_val, Int_val, String_val, Unit) +ML_2 (gtk_clist_get_column_title, GtkCList_val, Int_val, Val_string) +ML_3 (gtk_clist_set_column_widget, GtkCList_val, Int_val, GtkWidget_val, Unit) +ML_2 (gtk_clist_get_column_widget, GtkCList_val, Int_val, Val_GtkWidget) +ML_3 (gtk_clist_set_column_justification, GtkCList_val, Int_val, + Justification_val, Unit) +ML_3 (gtk_clist_set_column_visibility, GtkCList_val, Int_val, Bool_val, Unit) +ML_3 (gtk_clist_set_column_resizeable, GtkCList_val, Int_val, Bool_val, Unit) +ML_3 (gtk_clist_set_column_auto_resize, GtkCList_val, Int_val, Bool_val, Unit) +ML_1 (gtk_clist_columns_autosize, GtkCList_val, Unit) +ML_2 (gtk_clist_optimal_column_width, GtkCList_val, Int_val, Val_int) +ML_3 (gtk_clist_set_column_width, GtkCList_val, Int_val, Int_val, Unit) +ML_3 (gtk_clist_set_column_min_width, GtkCList_val, Int_val, Int_val, Unit) +ML_3 (gtk_clist_set_column_max_width, GtkCList_val, Int_val, Int_val, Unit) +ML_2 (gtk_clist_set_row_height, GtkCList_val, Int_val, Unit) +ML_5 (gtk_clist_moveto, GtkCList_val, Int_val, Int_val, + Double_val, Double_val, Unit) +ML_2 (gtk_clist_row_is_visible, GtkCList_val, Int_val, Val_visibility) +ML_3 (gtk_clist_get_cell_type, GtkCList_val, Int_val, Int_val, Val_cell_type) +ML_4 (gtk_clist_set_text, GtkCList_val, Int_val, Int_val, Optstring_val, Unit) +value ml_gtk_clist_get_text (value clist, value row, value column) +{ + char *text; + if (!gtk_clist_get_text (GtkCList_val(clist), Int_val(row), + Int_val(column), &text)) + invalid_argument ("Gtk.Clist.get_text"); + return Val_optstring(text); +} +ML_5 (gtk_clist_set_pixmap, GtkCList_val, Int_val, Int_val, GdkPixmap_val, + GdkBitmap_val, Unit) +value ml_gtk_clist_get_pixmap (value clist, value row, value column) +{ + CAMLparam0 (); + GdkPixmap *pixmap; + GdkBitmap *bitmap; + CAMLlocal2 (vpixmap,vbitmap); + value ret; + + if (!gtk_clist_get_pixmap (GtkCList_val(clist), Int_val(row), + Int_val(column), &pixmap, &bitmap)) + invalid_argument ("Gtk.Clist.get_pixmap"); + vpixmap = Val_option (pixmap, Val_GdkPixmap); + vbitmap = Val_option (bitmap, Val_GdkBitmap); + + ret = alloc_small (2,0); + Field(ret,0) = vpixmap; + Field(ret,1) = vbitmap; + CAMLreturn(ret); +} +ML_7 (gtk_clist_set_pixtext, GtkCList_val, Int_val, Int_val, String_val, + (guint8)Long_val, GdkPixmap_val, GdkBitmap_val, Unit) +ML_bc7 (ml_gtk_clist_set_pixtext) +ML_3 (gtk_clist_set_foreground, GtkCList_val, Int_val, GdkColor_val, Unit) +ML_3 (gtk_clist_set_background, GtkCList_val, Int_val, GdkColor_val, Unit) +ML_3 (gtk_clist_get_cell_style, GtkCList_val, Int_val, Int_val, Val_GtkStyle) +ML_4 (gtk_clist_set_cell_style, GtkCList_val, Int_val, Int_val, GtkStyle_val, + Unit) +ML_2 (gtk_clist_get_row_style, GtkCList_val, Int_val, Val_GtkStyle) +ML_3 (gtk_clist_set_row_style, GtkCList_val, Int_val, GtkStyle_val, Unit) +ML_3 (gtk_clist_set_selectable, GtkCList_val, Int_val, Bool_val, Unit) +ML_2 (gtk_clist_get_selectable, GtkCList_val, Int_val, Val_bool) +ML_5 (gtk_clist_set_shift, GtkCList_val, Int_val, Int_val, Int_val, Int_val, + Unit) +/* ML_2 (gtk_clist_append, GtkCList_val, (char **), Val_int) */ +ML_3 (gtk_clist_insert, GtkCList_val, Int_val, (char **), Val_int) +ML_2 (gtk_clist_remove, GtkCList_val, Int_val, Unit) +value ml_gtk_clist_set_row_data (value w, value row, value data) +{ + value *data_p = ml_global_root_new (data); + gtk_clist_set_row_data_full (GtkCList_val(w), Int_val(row), + data_p, ml_global_root_destroy); + return Val_unit; +} +ML_2 (gtk_clist_get_row_data, GtkCList_val, Int_val, *(value*)Check_null) +ML_3 (gtk_clist_select_row, GtkCList_val, Int_val, Int_val, Unit) +ML_3 (gtk_clist_unselect_row, GtkCList_val, Int_val, Int_val, Unit) +ML_1 (gtk_clist_clear, GtkCList_val, Unit) +value ml_gtk_clist_get_selection_info (value clist, value x, value y) +{ + int row, column; + value ret; + if (!gtk_clist_get_selection_info (GtkCList_val(clist), Int_val(x), + Int_val(y), &row, &column)) + invalid_argument ("Gtk.Clist.get_selection_info"); + ret = alloc_small (2,0); + Field(ret,0) = row; + Field(ret,1) = column; + return ret; +} +ML_1 (gtk_clist_select_all, GtkCList_val, Unit) +ML_1 (gtk_clist_unselect_all, GtkCList_val, Unit) +ML_3 (gtk_clist_swap_rows, GtkCList_val, Int_val, Int_val, Unit) +ML_3 (gtk_clist_row_move, GtkCList_val, Int_val, Int_val, Unit) +ML_2 (gtk_clist_set_sort_column, GtkCList_val, Int_val, Unit) +ML_2 (gtk_clist_set_sort_type, GtkCList_val, Sort_type_val, Unit) +ML_1 (gtk_clist_sort, GtkCList_val, Unit) +ML_2 (gtk_clist_set_auto_sort, GtkCList_val, Bool_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c new file mode 100644 index 000000000..355b9fea1 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c @@ -0,0 +1,97 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkmenuitem.h */ + +#define GtkMenuItem_val(val) check_cast(GTK_MENU_ITEM,val) +ML_0 (gtk_menu_item_new, Val_GtkWidget_sink) +ML_0 (gtk_tearoff_menu_item_new, Val_GtkWidget_sink) +ML_1 (gtk_menu_item_new_with_label, String_val, Val_GtkWidget_sink) +ML_2 (gtk_menu_item_set_submenu, GtkMenuItem_val, GtkWidget_val, Unit) +ML_1 (gtk_menu_item_remove_submenu, GtkMenuItem_val, Unit) +ML_2 (gtk_menu_item_set_placement, GtkMenuItem_val, + Submenu_placement_val, Unit) +ML_3 (gtk_menu_item_configure, GtkMenuItem_val, Bool_val, Bool_val, Unit) +ML_1 (gtk_menu_item_activate, GtkMenuItem_val, Unit) +ML_1 (gtk_menu_item_right_justify, GtkMenuItem_val, Unit) + +/* gtkcheckmenuitem.h */ + +#define GtkCheckMenuItem_val(val) check_cast(GTK_CHECK_MENU_ITEM,val) +ML_0 (gtk_check_menu_item_new, Val_GtkWidget_sink) +ML_1 (gtk_check_menu_item_new_with_label, String_val, Val_GtkWidget_sink) +ML_2 (gtk_check_menu_item_set_active, GtkCheckMenuItem_val, Bool_val, Unit) +ML_2 (gtk_check_menu_item_set_show_toggle, GtkCheckMenuItem_val, + Bool_val, Unit) +ML_1 (gtk_check_menu_item_toggled, GtkCheckMenuItem_val, Unit) +Make_Extractor (gtk_check_menu_item_get, GtkCheckMenuItem_val, + active, Val_bool) + +/* gtkradiomenuitem.h */ + +#define GtkRadioMenuItem_val(val) check_cast(GTK_RADIO_MENU_ITEM,val) +static GSList* item_group_val(value val) +{ + return (val == Val_unit ? NULL : + gtk_radio_menu_item_group(GtkRadioMenuItem_val(Field(val,0)))); +} +ML_1 (gtk_radio_menu_item_new, item_group_val, Val_GtkWidget_sink) +ML_2 (gtk_radio_menu_item_new_with_label, item_group_val, + String_val, Val_GtkWidget_sink) +ML_2 (gtk_radio_menu_item_set_group, GtkRadioMenuItem_val, + item_group_val, Unit) + +/* gtkoptionmenu.h */ + +#define GtkOptionMenu_val(val) check_cast(GTK_OPTION_MENU,val) +ML_0 (gtk_option_menu_new, Val_GtkWidget_sink) +ML_1 (gtk_option_menu_get_menu, GtkOptionMenu_val, Val_GtkWidget_sink) +ML_2 (gtk_option_menu_set_menu, GtkOptionMenu_val, GtkWidget_val, Unit) +ML_1 (gtk_option_menu_remove_menu, GtkOptionMenu_val, Unit) +ML_2 (gtk_option_menu_set_history, GtkOptionMenu_val, Int_val, Unit) + +/* gtkmenushell.h */ + +#define GtkMenuShell_val(val) check_cast(GTK_MENU_SHELL,val) +ML_2 (gtk_menu_shell_append, GtkMenuShell_val, GtkWidget_val, Unit) +ML_2 (gtk_menu_shell_prepend, GtkMenuShell_val, GtkWidget_val, Unit) +ML_3 (gtk_menu_shell_insert, GtkMenuShell_val, GtkWidget_val, Int_val, Unit) +ML_1 (gtk_menu_shell_deactivate, GtkMenuShell_val, Unit) + +/* gtkmenu.h */ + +#define GtkMenu_val(val) check_cast(GTK_MENU,val) +ML_0 (gtk_menu_new, Val_GtkWidget_sink) +ML_5 (gtk_menu_popup, GtkMenu_val, GtkWidget_val, GtkWidget_val, + Insert(NULL) Insert(NULL) Int_val, Int_val, Unit) +ML_1 (gtk_menu_popdown, GtkMenu_val, Unit) +ML_1 (gtk_menu_get_active, GtkMenu_val, Val_GtkWidget) +ML_2 (gtk_menu_set_active, GtkMenu_val, Int_val, Unit) +ML_2 (gtk_menu_set_accel_group, GtkMenu_val, GtkAccelGroup_val, Unit) +ML_1 (gtk_menu_get_accel_group, GtkMenu_val, Val_GtkAccelGroup) +ML_1 (gtk_menu_ensure_uline_accel_group, GtkMenu_val, Val_GtkAccelGroup) +value ml_gtk_menu_attach_to_widget (value menu, value widget) +{ + gtk_menu_attach_to_widget (GtkMenu_val(menu), GtkWidget_val(widget), NULL); + return Val_unit; +} +ML_1 (gtk_menu_get_attach_widget, GtkMenu_val, Val_GtkWidget) +ML_1 (gtk_menu_detach, GtkMenu_val, Unit) + +/* gtkmenubar.h */ + +#define GtkMenuBar_val(val) check_cast(GTK_MENU_BAR,val) +ML_0 (gtk_menu_bar_new, Val_GtkWidget_sink) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c new file mode 100644 index 000000000..f69f34390 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c @@ -0,0 +1,139 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkgamma.h */ + +#define GtkGammaCurve_val(val) check_cast(GTK_GAMMA_CURVE,val) +ML_0 (gtk_gamma_curve_new, Val_GtkWidget_sink) +Make_Extractor (gtk_gamma_curve_get, GtkGammaCurve_val, gamma, copy_double) + +/* gtkstatusbar.h */ + +#define GtkStatusbar_val(val) check_cast(GTK_STATUSBAR,val) +ML_0 (gtk_statusbar_new, Val_GtkWidget_sink) +ML_2 (gtk_statusbar_get_context_id, GtkStatusbar_val, String_val, Val_int) +ML_3 (gtk_statusbar_push, GtkStatusbar_val, Int_val, String_val, Val_int) +ML_2 (gtk_statusbar_pop, GtkStatusbar_val, Int_val, Unit) +ML_3 (gtk_statusbar_remove, GtkStatusbar_val, Int_val, Int_val, Unit) + +/* gtkcalendar.h */ + +#define GtkCalendar_val(val) check_cast(GTK_CALENDAR,val) +ML_0 (gtk_calendar_new, Val_GtkWidget_sink) +ML_3 (gtk_calendar_select_month, GtkCalendar_val, Int_val, Int_val, Unit) +ML_2 (gtk_calendar_select_day, GtkCalendar_val, Int_val, Unit) +ML_2 (gtk_calendar_mark_day, GtkCalendar_val, Int_val, Unit) +ML_2 (gtk_calendar_unmark_day, GtkCalendar_val, Int_val, Unit) +ML_1 (gtk_calendar_clear_marks, GtkCalendar_val, Unit) +Make_Flags_val (Calendar_display_options_val) +ML_2 (gtk_calendar_display_options, GtkCalendar_val, + Flags_Calendar_display_options_val, Unit) +value ml_gtk_calendar_get_date (value w) +{ + guint year, month, day; + value ret; + + gtk_calendar_get_date (GtkCalendar_val(w), &year, &month, &day); + ret = alloc_small (3, 0); + Field(ret,0) = Val_int(year); + Field(ret,1) = Val_int(month); + Field(ret,2) = Val_int(day); + return ret; +} +ML_1 (gtk_calendar_freeze, GtkCalendar_val, Unit) +ML_1 (gtk_calendar_thaw, GtkCalendar_val, Unit) + +/* gtkdrawingarea.h */ + +#define GtkDrawingArea_val(val) check_cast(GTK_DRAWING_AREA,val) +ML_0 (gtk_drawing_area_new, Val_GtkWidget_sink) +ML_3 (gtk_drawing_area_size, GtkDrawingArea_val, Int_val, Int_val, Unit) + +/* gtkmisc.h */ + +#define GtkMisc_val(val) check_cast(GTK_MISC,val) +ML_3 (gtk_misc_set_alignment, GtkMisc_val, Double_val, Double_val, Unit) +ML_3 (gtk_misc_set_padding, GtkMisc_val, Int_val, Int_val, Unit) +Make_Extractor (gtk_misc_get, GtkMisc_val, xalign, copy_double) +Make_Extractor (gtk_misc_get, GtkMisc_val, yalign, copy_double) +Make_Extractor (gtk_misc_get, GtkMisc_val, xpad, Val_int) +Make_Extractor (gtk_misc_get, GtkMisc_val, ypad, Val_int) + +/* gtkarrow.h */ + +#define GtkArrow_val(val) check_cast(GTK_ARROW,val) +ML_2 (gtk_arrow_new, Arrow_type_val, Shadow_type_val, Val_GtkWidget_sink) +ML_3 (gtk_arrow_set, GtkArrow_val, Arrow_type_val, Shadow_type_val, Unit) + +/* gtkimage.h */ + +#define GtkImage_val(val) check_cast(GTK_IMAGE,val) +ML_2 (gtk_image_new, GdkImage_val, + Option_val (arg2, GdkBitmap_val, NULL) Ignore, Val_GtkWidget_sink) +ML_3 (gtk_image_set, GtkImage_val, GdkImage_val, + Option_val (arg2, GdkBitmap_val, NULL) Ignore, Unit) + +/* gtklabel.h */ + +#define GtkLabel_val(val) check_cast(GTK_LABEL,val) +ML_1 (gtk_label_new, String_val, Val_GtkWidget_sink) +ML_2 (gtk_label_set_text, GtkLabel_val, String_val, Unit) +ML_2 (gtk_label_set_pattern, GtkLabel_val, String_val, Unit) +ML_2 (gtk_label_set_justify, GtkLabel_val, Justification_val, Unit) +ML_2 (gtk_label_set_line_wrap, GtkLabel_val, Bool_val, Unit) +Make_Extractor (gtk_label_get, GtkLabel_val, label, Val_string) + +/* gtktipsquery.h */ + +#define GtkTipsQuery_val(val) check_cast(GTK_TIPS_QUERY,val) +ML_0 (gtk_tips_query_new, Val_GtkWidget_sink) +ML_1 (gtk_tips_query_start_query, GtkTipsQuery_val, Unit) +ML_1 (gtk_tips_query_stop_query, GtkTipsQuery_val, Unit) +ML_2 (gtk_tips_query_set_caller, GtkTipsQuery_val, GtkWidget_val, Unit) +ML_3 (gtk_tips_query_set_labels, GtkTipsQuery_val, + String_val, String_val, Unit) +value ml_gtk_tips_query_set_emit_always (value w, value arg) +{ + GtkTipsQuery_val(w)->emit_always = Bool_val(arg); + return Val_unit; +} +Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, emit_always, Val_bool) +Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, caller, Val_GtkWidget) +Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_inactive, + Val_string) +Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_no_tip, + Val_string) + +/* gtkpixmap.h */ + +#define GtkPixmap_val(val) check_cast(GTK_PIXMAP,val) +ML_2 (gtk_pixmap_new, GdkPixmap_val, + Option_val (arg2, GdkBitmap_val, NULL) Ignore, + Val_GtkWidget_sink) +value ml_gtk_pixmap_set (value val, value pixmap, value mask) +{ + GtkPixmap *w = GtkPixmap_val(val); + gtk_pixmap_set (w, Option_val(pixmap,GdkPixmap_val,w->pixmap), + Option_val(mask,GdkBitmap_val,w->mask)); + return Val_unit; +} +Make_Extractor (GtkPixmap, GtkPixmap_val, pixmap, Val_GdkPixmap) +Make_Extractor (GtkPixmap, GtkPixmap_val, mask, Val_GdkBitmap) + +/* gtk[hv]separator.h */ + +ML_0 (gtk_hseparator_new, Val_GtkWidget_sink) +ML_0 (gtk_vseparator_new, Val_GtkWidget_sink) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c new file mode 100644 index 000000000..a75c1fb1f --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c @@ -0,0 +1,180 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" + +static value ml_class_init=0; + +static void class_init (value class) +{ + callback(ml_class_init, class); +} + + +value set_ml_class_init (value class_func) +{ + if (!ml_class_init) register_global_root (&ml_class_init); + ml_class_init = class_func; + return Val_unit; +} + +value ml_gtk_type_new (value type) +{ + return Val_GtkWidget_sink(gtk_type_new(Int_val(type))); +} + + +struct widget_info { + guint size; + guint class_size; + guint (*get_type_func)(void); +} +widget_info_array[] = { + { sizeof(GtkObject), sizeof(GtkObjectClass), gtk_object_get_type }, + { sizeof(GtkWidget), sizeof(GtkWidgetClass), gtk_widget_get_type }, + { sizeof(GtkMisc), sizeof(GtkMiscClass), gtk_misc_get_type }, + { sizeof(GtkLabel), sizeof(GtkLabelClass), gtk_label_get_type }, + { sizeof(GtkAccelLabel), sizeof(GtkAccelLabelClass), gtk_accel_label_get_type }, + { sizeof(GtkTipsQuery), sizeof(GtkTipsQueryClass), gtk_tips_query_get_type }, + { sizeof(GtkArrow), sizeof(GtkArrowClass), gtk_arrow_get_type }, + { sizeof(GtkImage), sizeof(GtkImageClass), gtk_image_get_type }, + { sizeof(GtkPixmap), sizeof(GtkPixmapClass), gtk_pixmap_get_type }, + { sizeof(GtkContainer), sizeof(GtkContainerClass), gtk_container_get_type }, + { sizeof(GtkBin), sizeof(GtkBinClass), gtk_bin_get_type }, + { sizeof(GtkAlignment), sizeof(GtkAlignmentClass), gtk_alignment_get_type }, + { sizeof(GtkFrame), sizeof(GtkFrameClass), gtk_frame_get_type }, + { sizeof(GtkAspectFrame), sizeof(GtkAspectFrameClass), gtk_aspect_frame_get_type }, + { sizeof(GtkButton), sizeof(GtkButtonClass), gtk_button_get_type }, + { sizeof(GtkToggleButton), sizeof(GtkToggleButtonClass), gtk_toggle_button_get_type }, + { sizeof(GtkCheckButton), sizeof(GtkCheckButtonClass), gtk_check_button_get_type }, + { sizeof(GtkRadioButton), sizeof(GtkRadioButtonClass), gtk_radio_button_get_type }, + { sizeof(GtkOptionMenu), sizeof(GtkOptionMenuClass), gtk_option_menu_get_type }, + { sizeof(GtkItem), sizeof(GtkItemClass), gtk_item_get_type }, + { sizeof(GtkMenuItem), sizeof(GtkMenuItemClass), gtk_menu_item_get_type }, + { sizeof(GtkCheckMenuItem), sizeof(GtkCheckMenuItemClass), gtk_check_menu_item_get_type }, + { sizeof(GtkRadioMenuItem), sizeof(GtkRadioMenuItemClass), gtk_radio_menu_item_get_type }, + { sizeof(GtkTearoffMenuItem), sizeof(GtkTearoffMenuItemClass), gtk_tearoff_menu_item_get_type }, + { sizeof(GtkListItem), sizeof(GtkListItemClass), gtk_list_item_get_type }, + { sizeof(GtkTreeItem), sizeof(GtkTreeItemClass), gtk_tree_item_get_type }, + { sizeof(GtkWindow), sizeof(GtkWindowClass), gtk_window_get_type }, + { sizeof(GtkColorSelectionDialog), sizeof(GtkColorSelectionDialogClass), gtk_color_selection_dialog_get_type }, + { sizeof(GtkDialog), sizeof(GtkDialogClass), gtk_dialog_get_type }, + { sizeof(GtkInputDialog), sizeof(GtkInputDialogClass), gtk_input_dialog_get_type }, + { sizeof(GtkFileSelection), sizeof(GtkFileSelectionClass), gtk_file_selection_get_type }, + { sizeof(GtkFontSelectionDialog), sizeof(GtkFontSelectionDialogClass), gtk_font_selection_dialog_get_type }, + { sizeof(GtkPlug), sizeof(GtkPlugClass), gtk_plug_get_type }, + { sizeof(GtkEventBox), sizeof(GtkEventBoxClass), gtk_event_box_get_type }, + { sizeof(GtkHandleBox), sizeof(GtkHandleBoxClass), gtk_handle_box_get_type }, + { sizeof(GtkScrolledWindow), sizeof(GtkScrolledWindowClass), gtk_scrolled_window_get_type }, + { sizeof(GtkViewport), sizeof(GtkViewportClass), gtk_viewport_get_type }, + { sizeof(GtkBox), sizeof(GtkBoxClass), gtk_box_get_type }, + { sizeof(GtkButtonBox), sizeof(GtkButtonBoxClass), gtk_button_box_get_type }, + { sizeof(GtkHButtonBox), sizeof(GtkHButtonBoxClass), gtk_hbutton_box_get_type }, + { sizeof(GtkVButtonBox), sizeof(GtkVButtonBoxClass), gtk_vbutton_box_get_type }, + { sizeof(GtkVBox), sizeof(GtkVBoxClass), gtk_vbox_get_type }, + { sizeof(GtkColorSelection), sizeof(GtkColorSelectionClass), gtk_color_selection_get_type }, + { sizeof(GtkGammaCurve), sizeof(GtkGammaCurveClass), gtk_gamma_curve_get_type }, + { sizeof(GtkHBox), sizeof(GtkHBoxClass), gtk_hbox_get_type }, + { sizeof(GtkCombo), sizeof(GtkComboClass), gtk_combo_get_type }, + { sizeof(GtkStatusbar), sizeof(GtkStatusbarClass), gtk_statusbar_get_type }, + { sizeof(GtkCList), sizeof(GtkCListClass), gtk_clist_get_type }, + { sizeof(GtkCTree), sizeof(GtkCTreeClass), gtk_ctree_get_type }, + { sizeof(GtkFixed), sizeof(GtkFixedClass), gtk_fixed_get_type }, + { sizeof(GtkNotebook), sizeof(GtkNotebookClass), gtk_notebook_get_type }, + { sizeof(GtkFontSelection), sizeof(GtkFontSelectionClass), gtk_font_selection_get_type }, + { sizeof(GtkPaned), sizeof(GtkPanedClass), gtk_paned_get_type }, + { sizeof(GtkHPaned), sizeof(GtkHPanedClass), gtk_hpaned_get_type }, + { sizeof(GtkVPaned), sizeof(GtkVPanedClass), gtk_vpaned_get_type }, + { sizeof(GtkLayout), sizeof(GtkLayoutClass), gtk_layout_get_type }, + { sizeof(GtkList), sizeof(GtkListClass), gtk_list_get_type }, + { sizeof(GtkMenuShell), sizeof(GtkMenuShellClass), gtk_menu_shell_get_type }, + { sizeof(GtkMenuBar), sizeof(GtkMenuBarClass), gtk_menu_bar_get_type }, + { sizeof(GtkMenu), sizeof(GtkMenuClass), gtk_menu_get_type }, + { sizeof(GtkPacker), sizeof(GtkPackerClass), gtk_packer_get_type }, + { sizeof(GtkSocket), sizeof(GtkSocketClass), gtk_socket_get_type }, + { sizeof(GtkTable), sizeof(GtkTableClass), gtk_table_get_type }, + { sizeof(GtkToolbar), sizeof(GtkToolbarClass), gtk_toolbar_get_type }, + { sizeof(GtkTree), sizeof(GtkTreeClass), gtk_tree_get_type }, + { sizeof(GtkCalendar), sizeof(GtkCalendarClass), gtk_calendar_get_type }, + { sizeof(GtkDrawingArea), sizeof(GtkDrawingAreaClass), gtk_drawing_area_get_type }, + { sizeof(GtkCurve), sizeof(GtkCurveClass), gtk_curve_get_type }, + { sizeof(GtkEditable), sizeof(GtkEditableClass), gtk_editable_get_type }, + { sizeof(GtkEntry), sizeof(GtkEntryClass), gtk_entry_get_type }, + { sizeof(GtkSpinButton), sizeof(GtkSpinButtonClass), gtk_spin_button_get_type }, + { sizeof(GtkText), sizeof(GtkTextClass), gtk_text_get_type }, + { sizeof(GtkRuler), sizeof(GtkRulerClass), gtk_ruler_get_type }, + { sizeof(GtkHRuler), sizeof(GtkHRulerClass), gtk_hruler_get_type }, + { sizeof(GtkVRuler), sizeof(GtkVRulerClass), gtk_vruler_get_type }, + { sizeof(GtkRange), sizeof(GtkRangeClass), gtk_range_get_type }, + { sizeof(GtkScale), sizeof(GtkScaleClass), gtk_scale_get_type }, + { sizeof(GtkHScale), sizeof(GtkHScaleClass), gtk_hscale_get_type }, + { sizeof(GtkVScale), sizeof(GtkVScaleClass), gtk_vscale_get_type }, + { sizeof(GtkScrollbar), sizeof(GtkScrollbarClass), gtk_scrollbar_get_type }, + { sizeof(GtkHScrollbar), sizeof(GtkHScrollbarClass), gtk_hscrollbar_get_type }, + { sizeof(GtkVScrollbar), sizeof(GtkVScrollbarClass), gtk_vscrollbar_get_type }, + { sizeof(GtkSeparator), sizeof(GtkSeparatorClass), gtk_separator_get_type }, + { sizeof(GtkHSeparator), sizeof(GtkHSeparatorClass), gtk_hseparator_get_type }, + { sizeof(GtkVSeparator), sizeof(GtkVSeparatorClass), gtk_vseparator_get_type }, + { sizeof(GtkPreview), sizeof(GtkPreviewClass), gtk_preview_get_type }, + { sizeof(GtkProgress), sizeof(GtkProgressClass), gtk_progress_get_type }, + { sizeof(GtkProgressBar), sizeof(GtkProgressBarClass), gtk_progress_bar_get_type }, + { sizeof(GtkData), sizeof(GtkDataClass), gtk_data_get_type }, + { sizeof(GtkAdjustment), sizeof(GtkAdjustmentClass), gtk_adjustment_get_type }, + { sizeof(GtkTooltips), sizeof(GtkTooltipsClass), gtk_tooltips_get_type }, + { sizeof(GtkItemFactory), sizeof(GtkItemFactoryClass), gtk_item_factory_get_type } +}; + + +value ml_gtk_type_unique (value name, value parent, value nsignals) +{ + struct widget_info * wi; + GtkTypeInfo ttt_info; + + wi = widget_info_array + Int_val(parent); + ttt_info.type_name = String_val(name); + ttt_info.object_size = wi->size; + ttt_info.class_size = wi->class_size + Int_val(nsignals)*sizeof(void *); + ttt_info.class_init_func = (GtkClassInitFunc) class_init; + ttt_info.object_init_func = (GtkObjectInitFunc) NULL; + ttt_info.reserved_1 = NULL; + ttt_info.reserved_2 = NULL; + ttt_info.base_class_init_func = (GtkClassInitFunc) NULL; + + return Val_int(gtk_type_unique(wi->get_type_func (), &ttt_info)); +} + +static guint sig[100]; + +value ml_gtk_object_class_add_signals (value class, value signals, + value nsignals) +{ + int i; + for (i=0; iclass_size+Int_val(num)*sizeof(void *); + return Val_int(gtk_signal_new (String_val(name), Int_val(run_type), + ((GtkObjectClass *)classe)->type, offset, + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0)); + *(((int *)classe)+offset) = 0; +} diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c new file mode 100644 index 000000000..b089b882e --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c @@ -0,0 +1,229 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +static Make_Flags_val (Attach_options_val) + +/* gtkbox.h */ + +#define GtkBox_val(val) check_cast(GTK_BOX,val) +ML_5 (gtk_box_pack_start, GtkBox_val, GtkWidget_val, Bool_val, Bool_val, + Int_val, Unit) +ML_5 (gtk_box_pack_end, GtkBox_val, GtkWidget_val, Bool_val, Bool_val, + Int_val, Unit) +ML_2 (gtk_box_set_homogeneous, GtkBox_val, Bool_val, Unit) +ML_2 (gtk_box_set_spacing, GtkBox_val, Int_val, Unit) +ML_3 (gtk_box_reorder_child, GtkBox_val, GtkWidget_val, Int_val, Unit) +value ml_gtk_box_query_child_packing (value box, value child) +{ + int expand, fill; + unsigned int padding; + GtkPackType pack_type; + value ret; + gtk_box_query_child_packing (GtkBox_val(box), GtkWidget_val(child), + &expand, &fill, &padding, &pack_type); + ret = alloc_small(4,0); + Field(ret,0) = Val_bool(expand); + Field(ret,1) = Val_bool(fill); + Field(ret,2) = Val_int(padding); + Field(ret,3) = Val_pack_type(pack_type); + return ret; +} +value ml_gtk_box_set_child_packing (value vbox, value vchild, value vexpand, + value vfill, value vpadding, value vpack) +{ + GtkBox *box = GtkBox_val(vbox); + GtkWidget *child = GtkWidget_val(vchild); + int expand, fill; + unsigned int padding; + GtkPackType pack; + gtk_box_query_child_packing (box, child, &expand, &fill, &padding, &pack); + gtk_box_set_child_packing (box, child, + Option_val(vexpand, Bool_val, expand), + Option_val(vfill, Bool_val, fill), + Option_val(vpadding, Int_val, padding), + Option_val(vpack, Pack_type_val, pack)); + return Val_unit; +} +ML_bc6 (ml_gtk_box_set_child_packing) + +ML_2 (gtk_hbox_new, Bool_val, Int_val, Val_GtkWidget_sink) +ML_2 (gtk_vbox_new, Bool_val, Int_val, Val_GtkWidget_sink) + +/* gtkbbox.h */ + +#define GtkButtonBox_val(val) check_cast(GTK_BUTTON_BOX,val) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, spacing, Val_int) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_width, Val_int) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_height, + Val_int) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_x, Val_int) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_y, Val_int) +Make_Extractor (gtk_button_box_get, GtkButtonBox_val, layout_style, + Val_button_box_style) +ML_2 (gtk_button_box_set_spacing, GtkButtonBox_val, Int_val, Unit) +ML_3 (gtk_button_box_set_child_size, GtkButtonBox_val, + Int_val, Int_val, Unit) +ML_3 (gtk_button_box_set_child_ipadding, GtkButtonBox_val, + Int_val, Int_val, Unit) +ML_2 (gtk_button_box_set_layout, GtkButtonBox_val, Button_box_style_val, Unit) +ML_2 (gtk_button_box_set_child_size_default, Int_val, Int_val, Unit) +ML_2 (gtk_button_box_set_child_ipadding_default, Int_val, Int_val, Unit) + +ML_0 (gtk_hbutton_box_new, Val_GtkWidget_sink) +ML_0 (gtk_vbutton_box_new, Val_GtkWidget_sink) + +/* gtkfixed.h */ + +#define GtkFixed_val(val) check_cast(GTK_FIXED,val) +ML_0 (gtk_fixed_new, Val_GtkWidget_sink) +ML_4 (gtk_fixed_put, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit) +ML_4 (gtk_fixed_move, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit) + +/* gtklayout.h */ + +#define GtkLayout_val(val) check_cast(GTK_LAYOUT,val) +ML_2 (gtk_layout_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink) +ML_4 (gtk_layout_put, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit) +ML_4 (gtk_layout_move, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit) +ML_3 (gtk_layout_set_size, GtkLayout_val, Int_val, Int_val, Unit) +ML_1 (gtk_layout_get_hadjustment, GtkLayout_val, Val_GtkAny) +ML_1 (gtk_layout_get_vadjustment, GtkLayout_val, Val_GtkAny) +ML_2 (gtk_layout_set_hadjustment, GtkLayout_val, GtkAdjustment_val, Unit) +ML_2 (gtk_layout_set_vadjustment, GtkLayout_val, GtkAdjustment_val, Unit) +ML_1 (gtk_layout_freeze, GtkLayout_val, Unit) +ML_1 (gtk_layout_thaw, GtkLayout_val, Unit) +Make_Extractor (gtk_layout_get, GtkLayout_val, width, Val_int) +Make_Extractor (gtk_layout_get, GtkLayout_val, height, Val_int) + +/* gtknotebook.h */ + +#define GtkNotebook_val(val) check_cast(GTK_NOTEBOOK,val) +ML_0 (gtk_notebook_new, Val_GtkWidget_sink) + +ML_5 (gtk_notebook_insert_page_menu, GtkNotebook_val, GtkWidget_val, + GtkWidget_val, GtkWidget_val, Int_val, Unit) +ML_2 (gtk_notebook_remove_page, GtkNotebook_val, Int_val, Unit) + +ML_2 (gtk_notebook_set_tab_pos, GtkNotebook_val, Position_val, Unit) +ML_2 (gtk_notebook_set_homogeneous_tabs, GtkNotebook_val, Bool_val, Unit) +ML_2 (gtk_notebook_set_show_tabs, GtkNotebook_val, Bool_val, Unit) +ML_2 (gtk_notebook_set_show_border, GtkNotebook_val, Bool_val, Unit) +ML_2 (gtk_notebook_set_scrollable, GtkNotebook_val, Bool_val, Unit) +ML_2 (gtk_notebook_set_tab_border, GtkNotebook_val, Int_val, Unit) +ML_1 (gtk_notebook_popup_enable, GtkNotebook_val, Unit) +ML_1 (gtk_notebook_popup_disable, GtkNotebook_val, Unit) + +ML_1 (gtk_notebook_get_current_page, GtkNotebook_val, Val_int) +ML_2 (gtk_notebook_set_page, GtkNotebook_val, Int_val, Unit) +ML_2 (gtk_notebook_get_nth_page, GtkNotebook_val, Int_val, Val_GtkWidget) +ML_2 (gtk_notebook_page_num, GtkNotebook_val, GtkWidget_val, Val_int) +ML_1 (gtk_notebook_next_page, GtkNotebook_val, Unit) +ML_1 (gtk_notebook_prev_page, GtkNotebook_val, Unit) + +ML_2 (gtk_notebook_get_tab_label, GtkNotebook_val, GtkWidget_val, + Val_GtkWidget) +ML_3 (gtk_notebook_set_tab_label, GtkNotebook_val, GtkWidget_val, + GtkWidget_val, Unit) +ML_2 (gtk_notebook_get_menu_label, GtkNotebook_val, GtkWidget_val, + Val_GtkWidget) +ML_3 (gtk_notebook_set_menu_label, GtkNotebook_val, GtkWidget_val, + GtkWidget_val, Unit) +ML_3 (gtk_notebook_reorder_child, GtkNotebook_val, GtkWidget_val, + Int_val, Unit) + + +/* gtkpacker.h */ + +Make_OptFlags_val(Packer_options_val) + +#define GtkPacker_val(val) check_cast(GTK_PACKER,val) +ML_0 (gtk_packer_new, Val_GtkWidget_sink) +ML_10 (gtk_packer_add, GtkPacker_val, GtkWidget_val, + Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore, + Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore, + OptFlags_Packer_options_val, + Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore, + Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore, + Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore, + Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore, + Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore, + Unit) +ML_bc10 (ml_gtk_packer_add) +ML_5 (gtk_packer_add_defaults, GtkPacker_val, GtkWidget_val, + Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore, + Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore, + OptFlags_Packer_options_val, Unit) +ML_10 (gtk_packer_set_child_packing, GtkPacker_val, GtkWidget_val, + Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore, + Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore, + OptFlags_Packer_options_val, + Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore, + Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore, + Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore, + Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore, + Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore, + Unit) +ML_bc10 (ml_gtk_packer_set_child_packing) +ML_3 (gtk_packer_reorder_child, GtkPacker_val, GtkWidget_val, + Int_val, Unit) +ML_2 (gtk_packer_set_spacing, GtkPacker_val, Int_val, Unit) +value ml_gtk_packer_set_defaults (value w, value border_width, + value pad_x, value pad_y, + value i_pad_x, value i_pad_y) +{ + GtkPacker *p = GtkPacker_val(w); + if (Is_block(border_width)) + gtk_packer_set_default_border_width (p,Int_val(Field(border_width,0))); + if (Is_block(pad_x) || Is_block(pad_y)) + gtk_packer_set_default_pad + (p, Option_val(pad_x,Int_val,p->default_pad_x), + Option_val(pad_y,Int_val,p->default_pad_y)); + if (Is_block(i_pad_x) || Is_block(i_pad_y)) + gtk_packer_set_default_ipad + (p, Option_val(pad_x,Int_val,p->default_i_pad_x), + Option_val(pad_y,Int_val,p->default_i_pad_y)); + return Val_unit; +} +ML_bc6 (ml_gtk_packer_set_defaults) + +/* gtkpaned.h */ + +#define GtkPaned_val(val) check_cast(GTK_PANED,val) +ML_0 (gtk_hpaned_new, Val_GtkWidget_sink) +ML_0 (gtk_vpaned_new, Val_GtkWidget_sink) +ML_2 (gtk_paned_add1, GtkPaned_val, GtkWidget_val, Unit) +ML_2 (gtk_paned_add2, GtkPaned_val, GtkWidget_val, Unit) +ML_2 (gtk_paned_set_handle_size, GtkPaned_val, (gint16)Int_val, Unit) +ML_2 (gtk_paned_set_gutter_size, GtkPaned_val, (gint16)Int_val, Unit) +Make_Extractor (gtk_paned, GtkPaned_val, child1, Val_GtkWidget) +Make_Extractor (gtk_paned, GtkPaned_val, child2, Val_GtkWidget) +Make_Extractor (gtk_paned, GtkPaned_val, handle_size, Val_int) +Make_Extractor (gtk_paned, GtkPaned_val, gutter_size, Val_int) + +/* gtktable.h */ + +#define GtkTable_val(val) check_cast(GTK_TABLE,val) +ML_3 (gtk_table_new, Int_val, Int_val, Int_val, Val_GtkWidget_sink) +ML_10 (gtk_table_attach, GtkTable_val, GtkWidget_val, + Int_val, Int_val, Int_val, Int_val, + Flags_Attach_options_val, Flags_Attach_options_val, + Int_val, Int_val, Unit) +ML_bc10 (ml_gtk_table_attach) +ML_3 (gtk_table_set_row_spacing, GtkTable_val, Int_val, Int_val, Unit) +ML_3 (gtk_table_set_col_spacing, GtkTable_val, Int_val, Int_val, Unit) +ML_2 (gtk_table_set_row_spacings, GtkTable_val, Int_val, Unit) +ML_2 (gtk_table_set_col_spacings, GtkTable_val, Int_val, Unit) +ML_2 (gtk_table_set_homogeneous, GtkTable_val, Bool_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c new file mode 100644 index 000000000..642d26909 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c @@ -0,0 +1,88 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtkprogress.h */ + +#define GtkProgress_val(val) check_cast(GTK_PROGRESS,val) +ML_2 (gtk_progress_set_show_text, GtkProgress_val, Bool_val, Unit) +ML_3 (gtk_progress_set_text_alignment, GtkProgress_val, + Option_val(arg2,Float_val,(GtkProgress_val(arg1))->x_align) Ignore, + Option_val(arg3,Float_val,(GtkProgress_val(arg1))->y_align) Ignore, Unit) +ML_2 (gtk_progress_set_format_string, GtkProgress_val, String_val, Unit) +ML_2 (gtk_progress_set_adjustment, GtkProgress_val, GtkAdjustment_val, Unit) +ML_4 (gtk_progress_configure, GtkProgress_val, + Float_val, Float_val, Float_val, Unit) +ML_2 (gtk_progress_set_percentage, GtkProgress_val, Float_val, Unit) +ML_2 (gtk_progress_set_value, GtkProgress_val, Float_val, Unit) +ML_1 (gtk_progress_get_value, GtkProgress_val, copy_double) +ML_1 (gtk_progress_get_current_percentage, GtkProgress_val, copy_double) +ML_2 (gtk_progress_set_activity_mode, GtkProgress_val, Bool_val, Unit) +ML_1 (gtk_progress_get_current_text, GtkProgress_val, Val_string) +Make_Extractor (gtk_progress_get, GtkProgress_val, adjustment, + Val_GtkAny) + +/* gtkprogressbar.h */ + +#define GtkProgressBar_val(val) check_cast(GTK_PROGRESS_BAR,val) +ML_0 (gtk_progress_bar_new, Val_GtkWidget_sink) +ML_1 (gtk_progress_bar_new_with_adjustment, GtkAdjustment_val, + Val_GtkWidget_sink) +ML_2 (gtk_progress_bar_set_bar_style, GtkProgressBar_val, + Progress_bar_style_val, Unit) +ML_2 (gtk_progress_bar_set_discrete_blocks, GtkProgressBar_val, Int_val, Unit) +ML_2 (gtk_progress_bar_set_activity_step, GtkProgressBar_val, Int_val, Unit) +ML_2 (gtk_progress_bar_set_activity_blocks, GtkProgressBar_val, Int_val, Unit) +ML_2 (gtk_progress_bar_set_orientation, GtkProgressBar_val, + Progress_bar_orientation_val, Unit) +/* ML_2 (gtk_progress_bar_update, GtkProgressBar_val, Float_val, Unit) */ + +/* gtkrange.h */ + +#define GtkRange_val(val) check_cast(GTK_RANGE,val) +ML_1 (gtk_range_get_adjustment, GtkRange_val, Val_GtkAny) +ML_2 (gtk_range_set_adjustment, GtkRange_val, GtkAdjustment_val, Unit) +ML_2 (gtk_range_set_update_policy, GtkRange_val, Update_type_val, Unit) + +/* gtkscale.h */ + +#define GtkScale_val(val) check_cast(GTK_SCALE,val) +ML_2 (gtk_scale_set_digits, GtkScale_val, Int_val, Unit) +ML_2 (gtk_scale_set_draw_value, GtkScale_val, Bool_val, Unit) +ML_2 (gtk_scale_set_value_pos, GtkScale_val, Position_val, Unit) +ML_1 (gtk_scale_get_value_width, GtkScale_val, Val_int) +ML_1 (gtk_scale_draw_value, GtkScale_val, Unit) +ML_1 (gtk_hscale_new, GtkAdjustment_val, Val_GtkWidget_sink) +ML_1 (gtk_vscale_new, GtkAdjustment_val, Val_GtkWidget_sink) + +/* gtkscrollbar.h */ + +ML_1 (gtk_hscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink) +ML_1 (gtk_vscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink) + +/* gtkruler.h */ + +#define GtkRuler_val(val) check_cast(GTK_RULER,val) +ML_2 (gtk_ruler_set_metric, GtkRuler_val, Metric_type_val, Unit) +ML_5 (gtk_ruler_set_range, GtkRuler_val, Float_val, + Float_val, Float_val, Float_val, Unit) +Make_Extractor (gtk_ruler_get, GtkRuler_val, lower, copy_double) +Make_Extractor (gtk_ruler_get, GtkRuler_val, upper, copy_double) +Make_Extractor (gtk_ruler_get, GtkRuler_val, position, copy_double) +Make_Extractor (gtk_ruler_get, GtkRuler_val, max_size, copy_double) +ML_1 (gtk_ruler_draw_ticks, GtkRuler_val, Unit) +ML_1 (gtk_ruler_draw_pos, GtkRuler_val, Unit) +ML_0 (gtk_hruler_new, Val_GtkWidget_sink) +ML_0 (gtk_vruler_new, Val_GtkWidget_sink) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c new file mode 100644 index 000000000..a1239c2a7 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c @@ -0,0 +1,53 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtk_tags.h" + +/* gtktreeitem.h */ + +#define GtkTreeItem_val(val) check_cast(GTK_TREE_ITEM,val) +ML_0 (gtk_tree_item_new, Val_GtkWidget_sink) +ML_1 (gtk_tree_item_new_with_label, String_val, Val_GtkWidget_sink) +ML_2 (gtk_tree_item_set_subtree, GtkTreeItem_val, GtkWidget_val, Unit) +ML_1 (gtk_tree_item_remove_subtree, GtkTreeItem_val, Unit) +ML_1 (gtk_tree_item_expand, GtkTreeItem_val, Unit) +ML_1 (gtk_tree_item_collapse, GtkTreeItem_val, Unit) +ML_1 (GTK_TREE_ITEM_SUBTREE, GtkTreeItem_val, Val_GtkWidget) + +/* gtktree.h */ + +#define GtkTree_val(val) check_cast(GTK_TREE,val) +ML_0 (gtk_tree_new, Val_GtkWidget_sink) +ML_3 (gtk_tree_insert, GtkTree_val, GtkWidget_val, Int_val, Unit) +ML_3 (gtk_tree_clear_items, GtkTree_val, Int_val, Int_val, Unit) +ML_2 (gtk_tree_select_item, GtkTree_val, Int_val, Unit) +ML_2 (gtk_tree_unselect_item, GtkTree_val, Int_val, Unit) +ML_2 (gtk_tree_child_position, GtkTree_val, GtkWidget_val, Val_int) +ML_2 (gtk_tree_set_selection_mode, GtkTree_val, Selection_mode_val, Unit) +ML_2 (gtk_tree_set_view_mode, GtkTree_val, Tree_view_mode_val, Unit) +ML_2 (gtk_tree_set_view_lines, GtkTree_val, Bool_val, Unit) + +static value val_gtkany (gpointer p) { return Val_GtkAny(p); } +value ml_gtk_tree_selection (value tree) +{ + GList *selection = GTK_TREE_SELECTION(GtkTree_val(tree)); + return Val_GList(selection, val_gtkany); +} +static gpointer gtkobject_val (value val) { return GtkObject_val(val); } +value ml_gtk_tree_remove_items (value tree, value items) +{ + GList *items_list = GList_val (items, gtkobject_val); + gtk_tree_remove_items (GtkTree_val(tree), items_list); + return Val_unit; +} diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c new file mode 100644 index 000000000..54bd51ed0 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c @@ -0,0 +1,76 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" +#include "ml_glib.h" +#include "ml_gdk.h" +#include "ml_gtk.h" +#include "gtkxmhtml_tags.h" + +/* conversion functions */ + +#include "gtkxmhtml_tags.c" + +Make_Flags_val (Line_type_val) + +#define GtkXmHTML_val(val) ((GtkXmHTML*)GtkObject_val(val)) + +ML_0 (gtk_xmhtml_new, Val_GtkAny_sink) +ML_1 (gtk_xmhtml_freeze, GtkXmHTML_val, Unit) +ML_1 (gtk_xmhtml_thaw, GtkXmHTML_val, Unit) +ML_2 (gtk_xmhtml_source, GtkXmHTML_val, String_val, Unit) +ML_2 (gtk_xmhtml_set_string_direction, GtkXmHTML_val, String_direction_val, + Unit) +ML_2 (gtk_xmhtml_set_alignment, GtkXmHTML_val, Alignment_val, Unit) +/* ML_2 (gtk_xmhtml_outline, GtkXmHTML_val, Bool_val, Unit) */ +ML_3 (gtk_xmhtml_set_font_familty, GtkXmHTML_val, String_val, String_val, Unit) +ML_3 (gtk_xmhtml_set_font_familty_fixed, GtkXmHTML_val, String_val, String_val, + Unit) +ML_2 (gtk_xmhtml_set_font_charset, GtkXmHTML_val, String_val, Unit) +ML_2 (gtk_xmhtml_set_allow_body_colors, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_hilight_on_enter, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_anchor_underline_type, GtkXmHTML_val, Flags_Line_type_val, + Unit) +ML_2 (gtk_xmhtml_set_anchor_visited_underline_type, GtkXmHTML_val, + Flags_Line_type_val, Unit) +ML_2 (gtk_xmhtml_set_anchor_target_underline_type, GtkXmHTML_val, + Flags_Line_type_val, Unit) +ML_2 (gtk_xmhtml_set_allow_color_switching, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_dithering, GtkXmHTML_val, Dither_type_val, Unit) +ML_2 (gtk_xmhtml_set_allow_font_switching, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_max_image_colors, GtkXmHTML_val, Int_val, Unit) +ML_2 (gtk_xmhtml_set_allow_images, GtkXmHTML_val, Bool_val, Unit) +ML_4 (gtk_xmhtml_set_plc_intervals, GtkXmHTML_val, Int_val, Int_val, Int_val, + Unit) +/* ML_2 (gtk_xmhtml_set_def_body_image_url, GtkXmHTML_val, String_val, Unit) */ +ML_2 (gtk_xmhtml_set_anchor_buttons, GtkXmHTML_val, Bool_val, Unit) +value ml_gtk_xmhtml_set_anchor_cursor(value html, value cursor) +{ + gtk_xmhtml_set_anchor_cursor + (GtkXmHTML_val(html), Option_val(cursor, GdkCursor_val, NULL), + Bool_val(cursor)); + return Val_unit; +} +ML_2 (gtk_xmhtml_set_topline, GtkXmHTML_val, Int_val, Unit) +ML_1 (gtk_xmhtml_get_topline, GtkXmHTML_val, Val_int) +ML_2 (gtk_xmhtml_set_freeze_animations, GtkXmHTML_val, Bool_val, Unit) +/* ML_1 (gtk_xmhtml_get_source, GtkXmHTML_val, copy_string) */ +ML_2 (gtk_xmhtml_set_screen_gamma, GtkXmHTML_val, Float_val, Unit) +/* ML_2 (gtk_xmhtml_set_event_proc, GtkXmHTML_val, ???, Unit) */ +ML_2 (gtk_xmhtml_set_perfect_colors, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_uncompress_command, GtkXmHTML_val, String_val, Unit) +ML_2 (gtk_xmhtml_set_strict_checking, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_bad_html_warnings, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_allow_form_coloring, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_imagemap_draw, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_mime_type, GtkXmHTML_val, String_val, Unit) +ML_2 (gtk_xmhtml_set_alpha_processing, GtkXmHTML_val, Bool_val, Unit) +ML_2 (gtk_xmhtml_set_rgb_conv_mode, GtkXmHTML_val, Dither_type_val, Unit) diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml new file mode 100644 index 000000000..100bee331 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml @@ -0,0 +1,157 @@ +(* $Id$ *) + +(* Compile a list of variant tags into CPP defines *) + +(* hash_variant, from ctype.ml *) + +let hash_variant s = + let accu = ref 0 in + for i = 0 to String.length s - 1 do + accu := 223 * !accu + Char.code s.[i] + done; + (* reduce to 31 bits *) + accu := !accu land (1 lsl 31 - 1); + (* make it signed for 64 bits architectures *) + if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu + +open Genlex + +let lexer = make_lexer ["type"; "public"; "="; "["; "]"; "`"; "|"] + +let may_string = parser + [< ' String s >] -> s + | [< >] -> "" + +let may_bar = parser + [< ' Kwd "|" >] -> () + | [< >] -> () + +let rec ident_list = parser + [< ' Kwd "`"; ' Ident x; trans = may_string; _ = may_bar; s >] -> + (x, trans) :: ident_list s + | [< >] -> [] + +let static = ref false +let may_public = parser + [< ' Kwd "public" >] -> true + | [< ' Kwd "private" >] -> false + | [< >] -> not !static + +open Printf + +let hashes = Hashtbl.create 57 + +let declaration ~hc ~cc = parser + [< ' Kwd "type"; public = may_public; ' Ident name; ' Kwd "="; + prefix = may_string; ' Kwd "["; _ = may_bar; + tags = ident_list; ' Kwd "]"; suffix = may_string >] -> + let oh x = fprintf hc x and oc x = fprintf cc x in + (* Output tag values to headers *) + let first = ref true in + List.iter tags ~f: + begin fun (tag, _) -> + let hash = hash_variant tag in + try + let tag' = Hashtbl.find hashes hash in + if tag <> tag' then + failwith (String.concat ~sep:" " ["Doublon tag:";tag;"and";tag']) + with Not_found -> + Hashtbl.add ~key:hash ~data:tag hashes; + if !first then begin + oh "/* %s : tags and macros */\n" name; first := false + end; + oh "#define MLTAG_%s\tVal_int(%d)\n" tag hash; + end; + (* compute C name *) + let ctag tag trans = + if trans <> "" then trans else + let tag = + if tag.[0] = '_' then + String.sub tag ~pos:1 ~len:(String.length tag -1) + else tag + in + match + if prefix = "" then None, "" + else + Some (prefix.[String.length prefix - 1]), + String.sub prefix ~pos:0 ~len:(String.length prefix - 1) + with + Some '#', prefix -> + prefix ^ String.uncapitalize tag ^ suffix + | Some '^', prefix -> + prefix ^ String.uppercase tag ^ suffix + | _ -> + prefix ^ tag ^ suffix + and cname = + String.capitalize name + in + let tags = + Sort.list tags + ~order:(fun (tag1,_) (tag2,_) -> hash_variant tag1 < hash_variant tag2) + in + (* Output table to code file *) + oc "/* %s : conversion table */\n" name; + let static = if not public then "static " else "" in + oc "%slookup_info ml_table_%s[] = {\n" static name; + oc " { 0, %d },\n" (List.length tags); + List.iter tags ~f: + begin fun (tag,trans) -> + oc " { MLTAG_%s, %s },\n" tag (ctag tag trans) + end; + oc "};\n\n"; + (* Output macros to headers *) + if not !first then oh "\n"; + if public then oh "extern lookup_info ml_table_%s[];\n" name; + oh "#define Val_%s(data) ml_lookup_from_c (ml_table_%s, data)\n" + name name; + oh "#define %s_val(key) ml_lookup_to_c (ml_table_%s, key)\n\n" + cname name; + | [< >] -> raise End_of_file + + +let process ic ~hc ~cc = + let chars = Stream.of_channel ic in + let s = lexer chars in + try + while true do declaration s ~hc ~cc done + with End_of_file -> () + | Stream.Error err -> + failwith + (Printf.sprintf "Parsing error \"%s\" at character %d on input stream" + err (Stream.count chars)) + +let main () = + let inputs = ref [] in + let header = ref "" in + let code = ref "" in + Arg.parse ~errmsg:"usage: varcc [options] file.var" ~keywords: + [ "-h", Arg.String ((:=) header), "file to output macros (file.h)"; + "-c", Arg.String ((:=) code), + "file to output conversion tables (file.c)"; + "-static", Arg.Set static, "do not export conversion tables" ] + ~others:(fun s -> inputs := s :: !inputs); + let inputs = List.rev !inputs in + begin match inputs with + | [] -> + if !header = "" then header := "a.h"; + if !code = "" then code := "a.c" + | ip :: _ -> + let rad = + if Filename.check_suffix ip ".var" then Filename.chop_extension ip + else ip in + if !header = "" then header := rad ^ ".h"; + if !code = "" then code := rad ^ ".c" + end; + let hc = open_out !header and cc = open_out !code in + let chars = Stream.of_channel stdin in + if inputs = [] then process stdin ~hc ~cc else begin + List.iter inputs ~f: + begin fun file -> + let ic = open_in file in + try process ic ~hc ~cc; close_in ic + with exn -> close_in ic; prerr_endline ("Error in " ^ file); raise exn + end + end; + close_out hc; close_out cc + +let _ = Printexc.print main () diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c new file mode 100644 index 000000000..ee0f56797 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c @@ -0,0 +1,90 @@ +/* $Id$ */ + +#include +#include +#include +#include +#include +#include + +#include "wrappers.h" + +value copy_memblock_indirected (void *src, asize_t size) +{ + value ret = alloc (Wosize_asize(size)+2, Abstract_tag); + if (!src) ml_raise_null_pointer (); + + Field(ret,1) = 2; + memcpy (&Field(ret,2), src, size); + return ret; +} + +value ml_some (value v) +{ + CAMLparam1(v); + value ret = alloc_small(1,0); + Field(ret,0) = v; + CAMLreturn(ret); +} + +void ml_raise_null_pointer () +{ + static value * exn = NULL; + if (exn == NULL) + exn = caml_named_value ("null_pointer"); + raise_constant (*exn); +} + +value Val_pointer (void *ptr) +{ + value ret = alloc_small (2, Abstract_tag); + if (!ptr) ml_raise_null_pointer (); + Field(ret,1) = (value)ptr; + return ret; +} + +value copy_string_check (const char*str) +{ + if (!str) ml_raise_null_pointer (); + return copy_string ((char*) str); +} + +value copy_string_or_null (const char*str) +{ + return copy_string (str ? (char*) str : ""); +} + +value *ml_global_root_new (value v) +{ + value *p = stat_alloc(sizeof(value)); + *p = v; + register_global_root (p); + return p; +} + +void ml_global_root_destroy (void *data) +{ + remove_global_root ((value *)data); + stat_free (data); +} + +value ml_lookup_from_c (lookup_info *table, int data) +{ + int i; + for (i = table[0].data; i > 0; i--) + if (table[i].data == data) return table[i].key; + invalid_argument ("ml_lookup_from_c"); +} + +int ml_lookup_to_c (lookup_info *table, value key) +{ + int first = 1, last = table[0].data, current; + + while (first < last) { + current = (first+last)/2; + if (table[current].key >= key) last = current; + else first = current + 1; + } + if (table[first].key == key) return table[first].data; + invalid_argument ("ml_lookup_to_c"); +} diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h new file mode 100644 index 000000000..2006bcbd5 --- /dev/null +++ b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h @@ -0,0 +1,225 @@ +/* $Id$ */ + +#ifndef _wrappers_ +#define _wrappers_ + +#include +#include + +value copy_memblock_indirected (void *src, asize_t size); +value ml_some (value); +void ml_raise_null_pointer (void) Noreturn; +value Val_pointer (void *); +value copy_string_check (const char*); +value copy_string_or_null (const char *); + +value *ml_global_root_new (value v); +void ml_global_root_destroy (void *data); + +typedef struct { value key; int data; } lookup_info; +value ml_lookup_from_c (lookup_info *table, int data); +int ml_lookup_to_c (lookup_info *table, value key); + +/* Wrapper generators */ + +#define ML_0(cname, conv) \ +value ml_##cname (value unit) { return conv (cname ()); } +#define ML_1(cname, conv1, conv) \ +value ml_##cname (value arg1) { return conv (cname (conv1 (arg1))); } +#define ML_1_post(cname, conv1, conv, post) \ +value ml_##cname (value arg1) \ +{ value ret = conv (cname (conv1(arg1))); post; return ret; } +#define ML_2(cname, conv1, conv2, conv) \ +value ml_##cname (value arg1, value arg2) \ +{ return conv (cname (conv1(arg1), conv2(arg2))); } +#define ML_2_name(mlname, cname, conv1, conv2, conv) \ +value mlname (value arg1, value arg2) \ +{ return conv (cname (conv1(arg1), conv2(arg2))); } +#define ML_3(cname, conv1, conv2, conv3, conv) \ +value ml_##cname (value arg1, value arg2, value arg3) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); } +#define ML_3_name(mlname, cname, conv1, conv2, conv3, conv) \ +value mlname (value arg1, value arg2, value arg3) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); } +#define ML_4(cname, conv1, conv2, conv3, conv4, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); } +#define ML_4_name(mlname, cname, conv1, conv2, conv3, conv4, conv) \ +value mlname (value arg1, value arg2, value arg3, value arg4) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); } +#define ML_5(cname, conv1, conv2, conv3, conv4, conv5, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5))); } +#define ML_6(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6))); } +#define ML_7(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7))); } +#define ML_8(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \ + conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7, value arg8) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8))); } +#define ML_9(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \ + conv9, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7, value arg8, value arg9) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \ + conv9(arg9))); } +#define ML_10(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \ + conv9, conv10, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7, value arg8, value arg9, value arg10)\ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \ + conv9(arg9), conv10(arg10))); } +#define ML_11(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \ + conv9, conv10, conv11, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7, value arg8, value arg9, value arg10,\ + value arg11) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \ + conv9(arg9), conv10(arg10), conv11(arg11))); } +#define ML_12(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \ + conv9, conv10, conv11, conv12, conv) \ +value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \ + value arg6, value arg7, value arg8, value arg9, value arg10,\ + value arg11, value arg12) \ +{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \ + conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \ + conv9(arg9), conv10(arg10), conv11(arg11), \ + conv12(arg12))); } + +/* Use with care: needs the argument index */ +#define Ignore(x) +#define Insert(x) (x), +#define Split(x,f,g) f(x), g(x) Ignore +#define Split3(x,f,g,h) f(x), g(x), h(x) Ignore +#define Pair(x,f,g) f(Field(x,0)), g(Field(x,1)) Ignore +#define Triple(x,f,g,h) f(Field(x,0)), g(Field(x,1)), h(Field(x,2)) Ignore + +/* For more than 5 arguments */ +#define ML_bc6(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5]); } +#define ML_bc7(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6]); } +#define ML_bc8(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \ + argv[7]); } +#define ML_bc9(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \ + argv[7],argv[8]); } +#define ML_bc10(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \ + argv[7],argv[8],argv[9]); } +#define ML_bc11(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \ + argv[7],argv[8],argv[9],argv[10]); } +#define ML_bc12(cname) \ +value cname##_bc (value *argv, int argn) \ +{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \ + argv[7],argv[8],argv[9],argv[10],argv[11]); } + +/* result conversion */ +#define Unit(x) ((x), Val_unit) +#define Id(x) x +#define Val_char Val_int + +/* parameter conversion */ +#define Bool_ptr(x) ((long) x - 1) +#define Char_val Int_val +#define Float_val(x) ((float)Double_val(x)) + +#define Option_val(val,unwrap,default) \ +((long)val-1 ? unwrap(Field(val,0)) : default) +#define String_option_val(s) Option_val(s,String_val,NULL) + +/* Utility */ + +#define Copy_array(ret,l,src,conv) \ + if (!l) ret = Atom(0); \ + else if (l <= Max_young_wosize) { int i; ret = alloc_tuple(l); \ + for(i=0;ifield); } + +#define Make_Setter(name,conv1,conv2,field) \ +value ml_##name##_##field (value val, value new) \ +{ (conv1(val))->field = conv2(new); return Val_unit; } + +#define Make_Array_Extractor(name,conv1,conv2,field,conv) \ +value ml_##name##_##field (value val, value index) \ +{ return conv ((conv1(val))->field[conv2(index)]); } + +#define Make_Array_Setter(name,conv1,conv2,conv3,field) \ +value ml_##name##_##field (value val, value index, value new) \ +{ (conv1(val))->field[conv2(index)] = conv3(new); return Val_unit; } + +/* ML value is [flag list] */ +#define Make_Flags_val(conv) \ +int Flags_##conv (value list) \ +{ int flags = 0L; \ + while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\ + return flags; } + +/* ML value is [flag list option] */ +#define Make_OptFlags_val(conv) \ +int OptFlags_##conv (value list) \ +{ int flags = 0L; \ + if Is_block(list) list = Field(list,0); \ + while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\ + return flags; } + +#define Val_copy(val) copy_memblock_indirected (&val, sizeof(val)) +#define Val_string copy_string_check +#define Val_optstring copy_string_or_null +#define Optstring_val(v) (string_length(v) ? String_val(v) : (char*)NULL) +#define Val_option(v,f) (v ? ml_some(f(v)) : Val_unit) + +#define Check_null(v) (v ? v : (ml_raise_null_pointer (), v)) + +#endif /* _wrappers_ */ -- 2.39.2