ARCHIVE = $(PACKAGE)
DLL = dll$(ARCHIVE).so
-TESTDIR = ./test
-TMPDIR = .test
-TMPPKGDIR = $(TMPDIR)/$(PACKAGE)
-
-all: $(ARCHIVE).cma
-opt: $(ARCHIVE).cmxa
-test: $(TESTDIR)/test
-test.opt: $(TESTDIR)/test.opt
+TESTDIR = test
+
+all: $(ARCHIVE).cma $(TESTDIR)/test
+opt: $(ARCHIVE).cmxa $(TESTDIR)/test.opt
+
world: all opt
+.PHONY: test/test test/test.opt
+test/test.opt:
+ $(MAKE) -C $(TESTDIR) test.opt
+test/test:
+ $(MAKE) -C $(TESTDIR) test
+
dist:
rm -rf $(DIST_DIR)/
mkdir $(DIST_DIR)/
$(ARCHIVE).cmxa $(ARCHIVE).a: $(OBJECTS_OPT)
$(OCAMLMKLIB) -o $(ARCHIVE) -L$(OCAML_STUB_DIR) $^ $(OBJECTS_C) $(SHARED_LIBS)
-$(TESTDIR)/test: $(OBJECTS_C) $(ARCHIVE).cma $(TESTDIR)/test.ml
- mkdir -p $(TMPPKGDIR)
- cp $(OBJECTS_C) $(DLL) $(ARCHIVE).cma $(INST) $(TMPPKGDIR)
- cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make
- rm -r $(TMPDIR)
-
-$(TESTDIR)/test.opt: $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(TESTDIR)/test.ml
- mkdir -p $(TMPPKGDIR)
- cp $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(INST) $(TMPPKGDIR)
- cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make opt
- rm -r $(TMPDIR)
-
install:
test ! -f $(ARCHIVE).cmxa || extra="$(ARCHIVE).a $(ARCHIVE).cmxa" ; \
if [ "$(PREFIX)" = "" ]; then \
clean:
rm -f *.[ao] *.cm[iaxo] *.cmxa *.so $(GENERATED_FILES)
- cd $(TESTDIR) ; make clean
- rm -rf $(TMPDIR)
+ make -C $(TESTDIR) clean
distclean: clean
rm -f config.log config.cache config.status Makefile META
let bool b = `BOOL b
let get_uint = function `INT i -> i | _ -> assert false
let uint i = `INT i
+let get_int = function `INT i -> i | _ -> assert false
+let int i = `INT i
-class source_view_signals obj_param =
+(** {2 GtkSourceBuffer} *)
+
+class source_buffer_signals obj_arg =
+object
+ inherit ['a] gobject_signals (obj_arg : [> Gtk_sourceview.source_buffer] obj)
+ inherit GText.buffer_signals obj_arg
+ inherit source_buffer_sigs
+end
+
+class source_buffer (obj: Gtk_sourceview.source_buffer obj) =
+object (self)
+ inherit GText.buffer_skel obj
+ method connect = new source_buffer_signals obj
+ method misc = new gobject_ops obj
+ method check_brackets = get_bool (self#misc#get_property "check-brackets")
+ method set_check_brackets x = self#misc#set_property "check-brackets" (bool x)
+ method highlight = get_bool (self#misc#get_property "highlight")
+ method set_highlight x = self#misc#set_property "highlight" (bool x)
+ method max_undo_levels = get_int (self#misc#get_property "max-undo-levels")
+ method set_max_undo_levels x =
+ self#misc#set_property "max-undo-levels" (int x)
+ method escape_char = get_uint (self#misc#get_property "escape-char")
+ method set_escape_char x = self#misc#set_property "escape-char" (uint x)
+ method can_undo = SourceBuffer.can_undo obj
+ method can_redo = SourceBuffer.can_redo obj
+ method undo () = SourceBuffer.undo obj
+ method redo () = SourceBuffer.redo obj
+ method begin_not_undoable_action () =
+ SourceBuffer.begin_not_undoable_action obj
+ method end_not_undoable_action () =
+ SourceBuffer.end_not_undoable_action obj
+end
+
+let source_buffer =
+ SourceBuffer.make_params [] ~cont:(fun pl () ->
+ new source_buffer (SourceBuffer.create pl))
+
+ (* alias used below, needed because "source_buffer" is a name in scope *)
+let source_buffer' = source_buffer
+
+(** {2 GtkSourceView} *)
+
+class source_view_signals obj_arg =
object
- inherit widget_signals_impl (obj_param : [> Gtk_sourceview.source_view] obj)
- inherit GText.view_signals obj_param
+ inherit widget_signals_impl (obj_arg : [> Gtk_sourceview.source_view] obj)
+ inherit GText.view_signals obj_arg
inherit source_view_sigs
end
method smart_home_end = get_bool (self#misc#get_property "smart_home_end")
end
-let source_view =
+let source_view ?source_buffer =
SourceView.make_params [] ~cont:(
GtkText.View.make_params ~cont:(
GContainer.pack_container ~create:(fun pl ->
- new source_view (SourceView.create pl))))
+ let buf =
+ match source_buffer with
+ | None -> source_buffer' ()
+ | Some source_buffer -> source_buffer
+ in
+ let obj = SourceView.create pl in
+ GtkText.View.set_buffer obj buf#as_buffer;
+ new source_view obj)))
open Gtk
+(** {2 GtkSourceBuffer} *)
+
+class source_buffer_signals:
+ ([> Gtk_sourceview.source_buffer ] as 'b) obj ->
+ object ('a)
+ method after : 'a
+ method apply_tag :
+ callback:(GText.tag -> start:GText.iter -> stop:GText.iter -> unit) ->
+ GtkSignal.id
+ method begin_user_action : callback:(unit -> unit) -> GtkSignal.id
+ method can_redo : callback:(bool -> unit) -> GtkSignal.id
+ method can_undo : callback:(bool -> unit) -> GtkSignal.id
+ method changed : callback:(unit -> unit) -> GtkSignal.id
+ method private connect :
+ 'c. ('b, 'c) GtkSignal.t -> callback:'c -> GtkSignal.id
+ method delete_range :
+ callback:(start:GText.iter -> stop:GText.iter -> unit) -> GtkSignal.id
+ method end_user_action : callback:(unit -> unit) -> GtkSignal.id
+ method highlight_updated :
+ callback:(Gtk.text_iter -> Gtk.text_iter -> unit) -> GtkSignal.id
+ method insert_child_anchor :
+ callback:(GText.iter -> Gtk.text_child_anchor -> unit) -> GtkSignal.id
+ method insert_pixbuf :
+ callback:(GText.iter -> GdkPixbuf.pixbuf -> unit) -> GtkSignal.id
+ method insert_text :
+ callback:(GText.iter -> string -> unit) -> GtkSignal.id
+ method mark_deleted : callback:(Gtk.text_mark -> unit) -> GtkSignal.id
+ method mark_set :
+ callback:(GText.iter -> Gtk.text_mark -> unit) -> GtkSignal.id
+ method marker_updated : callback:(Gtk.text_iter -> unit) -> GtkSignal.id
+ method modified_changed : callback:(unit -> unit) -> GtkSignal.id
+ method remove_tag :
+ callback:(GText.tag -> start:GText.iter -> stop:GText.iter -> unit) ->
+ GtkSignal.id
+ end
+
+class source_buffer:
+ Gtk_sourceview.source_buffer Gtk.obj ->
+ object
+ inherit GText.buffer_skel
+ method connect: source_buffer_signals
+ method misc: GObj.gobject_ops
+ method check_brackets: bool
+ method set_check_brackets: bool -> unit
+(* method set_bracket_match_style: tag_style -> unit *)
+ method highlight: bool
+ method set_highlight: bool -> unit
+ method max_undo_levels: int
+ method set_max_undo_levels: int -> unit
+(* method language: source_language *)
+(* method set_language: source_language -> unit *)
+ method escape_char: Glib.unichar
+ method set_escape_char: Glib.unichar -> unit
+ method can_undo: bool
+ method can_redo: bool
+ method undo: unit -> unit
+ method redo: unit -> unit
+ method begin_not_undoable_action: unit -> unit
+ method end_not_undoable_action: unit -> unit
+(* method create_marker: name:char -> typ:char -> source_marker *)
+(* method move_marker: source_marker -> Gtext.text_iter -> unit *)
+(* method delete_marker: source_marker -> unit *)
+(* method get_marker: name:char -> source_marker *)
+(* method get_markers_in_region:
+ start:text_iter -> stop:text_iter -> source_marker list *)
+(* method get_first_marker: unit -> source_marker *)
+(* method get_last_marker: unit -> source_marker *)
+(* method get_iter_at_marker: ... *)
+(* method get_next_marker: unit -> source_marker *)
+(* method get_prev_marker: unit -> source_marker *)
+ end
+
+val source_buffer :
+ ?check_brackets:bool ->
+ ?escape_char:int ->
+ ?highlight:bool ->
+ ?max_undo_levels:int ->
+(* ?tag_table:GText.tag_table ->
+ ?text:string -> *)
+ unit ->
+ source_buffer
+
+(** {2 GtkSourceView} *)
+
class source_view_signals :
([> Gtk_sourceview.source_view ] as 'b) obj ->
object ('a)
end
val source_view :
+ ?source_buffer:source_buffer ->
?auto_indent:bool ->
?insert_spaces_instead_of_tabs:bool ->
?margin:int ->
open GtkSourceViewProps
open GtkBase
-external _gtksourceview_init : unit -> unit = "ml_gtk_sourceview_init"
-let () = _gtksourceview_init ()
+external _gtk_source_view_init : unit -> unit = "ml_gtk_source_view_init"
+external _gtk_source_buffer_init : unit -> unit = "ml_gtk_source_buffer_init"
+
+let () =
+ _gtk_source_view_init ();
+ _gtk_source_buffer_init ()
module SourceView =
struct
module SourceBuffer =
struct
include SourceBuffer
+ external can_undo: [>`sourcebuffer] obj -> bool =
+ "ml_gtk_source_buffer_can_undo"
+ external can_redo: [>`sourcebuffer] obj -> bool =
+ "ml_gtk_source_buffer_can_redo"
+ external undo: [>`sourcebuffer] obj -> unit = "ml_gtk_source_buffer_undo"
+ external redo: [>`sourcebuffer] obj -> unit = "ml_gtk_source_buffer_redo"
+ external begin_not_undoable_action: [>`sourcebuffer] obj -> unit =
+ "ml_gtk_source_buffer_begin_not_undoable_action"
+ external end_not_undoable_action: [>`sourcebuffer] obj -> unit =
+ "ml_gtk_source_buffer_end_not_undoable_action"
end
"highlight" gboolean : Read / Write
"language" GtkSourceLanguage : Read / Write
"max-undo-levels" gint : Read / Write
+ signal can_redo: gboolean
+ signal can_undo: gboolean
+ signal highlight_updated: GtkTextIter GtkTextIter
+ signal marker_updated: GtkTextIter
}
/* Init all */
-CAMLprim value ml_gtk_sourceview_init(value unit)
-{
- /* Since these are declared const, must force gcc to call them! */
+CAMLprim value ml_gtk_source_view_init(value unit)
+{ /* Since these are declared const, must force gcc to call them! */
GType t = gtk_source_view_get_type();
return Val_GType(t);
}
+CAMLprim value ml_gtk_source_buffer_init(value unit)
+{ /* Since these are declared const, must force gcc to call them! */
+ GType t = gtk_source_buffer_get_type();
+ return Val_GType(t);
+}
+
#define GtkSourceView_val(val) check_cast(GTK_SOURCE_VIEW,val)
+#define GtkSourceBuffer_val(val) check_cast(GTK_SOURCE_BUFFER,val)
//#####################################
//
ML_2 (gtk_math_view_load_uri, GtkMathView_val, String_val, Val_bool)
ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit) */
-ML_1 (gtk_source_view_get_show_line_numbers, GtkSourceView_val,
- Val_bool)
-ML_2 (gtk_source_view_set_show_line_numbers, GtkSourceView_val,
- Bool_val, Unit)
+/* ML_1 (gtk_source_view_get_show_line_numbers, GtkSourceView_val, Val_bool) */
+/* ML_2 (gtk_source_view_set_show_line_numbers, GtkSourceView_val, Bool_val, Unit) */
+
+ML_1 (gtk_source_buffer_can_undo, GtkSourceBuffer_val, Bool_val)
+ML_1 (gtk_source_buffer_can_redo, GtkSourceBuffer_val, Bool_val)
+ML_1 (gtk_source_buffer_undo, GtkSourceBuffer_val, Unit)
+ML_1 (gtk_source_buffer_redo, GtkSourceBuffer_val, Unit)
+ML_1 (gtk_source_buffer_begin_not_undoable_action, GtkSourceBuffer_val, Unit)
+ML_1 (gtk_source_buffer_end_not_undoable_action, GtkSourceBuffer_val, Unit)
all: test
opt: test.opt
-test: test.ml
+test: test.ml ../$(PACKAGE).cma
$(OCAMLC) $(LINKFLAGS) $(PACKAGE).cma -o $@ $<
-test.opt: test.ml
+test.opt: test.ml ../$(PACKAGE).cmxa
$(OCAMLOPT) $(LINKFLAGS) $(PACKAGE).cmxa -o $@ $<
clean:
let win = GWindow.window ~title:"LablGtkSourceView test" ()
let vbox = GPack.vbox ~packing:win#add ()
+let source_buffer = GSourceView.source_buffer ~check_brackets:true ()
let source_view =
- GSourceView.source_view ~packing:vbox#add ~height:400 ~width:300
+ GSourceView.source_view
+ ~source_buffer
+ ~auto_indent:true ~insert_spaces_instead_of_tabs:true ~tabs_width:2
~show_line_numbers:true
+ ~margin:30 ~show_margin:true
+ ~smart_home_end:true
+ ~packing:vbox#add ~height:400 ~width:300
()
let _ =
ignore (win#connect#destroy (fun _ -> GMain.quit ()));
ignore (source_view#connect#move_cursor (fun _ _ ~extend ->
prerr_endline "move_cursor"));
ignore (source_view#connect#undo (fun _ -> prerr_endline "undo"));
- source_view#set_auto_indent true;
- source_view#set_insert_spaces_instead_of_tabs true;
- source_view#set_tabs_width 2;
- source_view#set_margin 30;
- source_view#set_show_margin true;
- source_view#set_smart_home_end true;
win#show ();
GMain.Main.main ()