summaryrefslogtreecommitdiff
path: root/body/fltk-widgets-groups-text_displays-text_editors.adb
diff options
context:
space:
mode:
Diffstat (limited to 'body/fltk-widgets-groups-text_displays-text_editors.adb')
-rw-r--r--body/fltk-widgets-groups-text_displays-text_editors.adb1232
1 files changed, 1232 insertions, 0 deletions
diff --git a/body/fltk-widgets-groups-text_displays-text_editors.adb b/body/fltk-widgets-groups-text_displays-text_editors.adb
new file mode 100644
index 0000000..15066f9
--- /dev/null
+++ b/body/fltk-widgets-groups-text_displays-text_editors.adb
@@ -0,0 +1,1232 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+with
+
+ Ada.Assertions,
+ Ada.Characters.Latin_1,
+ FLTK.Event,
+ Interfaces.C;
+
+
+package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
+
+
+ package Chk renames Ada.Assertions;
+ package Latin renames Ada.Characters.Latin_1;
+
+
+
+
+ ------------------------
+ -- Functions From C --
+ ------------------------
+
+ function new_fl_text_editor
+ (X, Y, W, H : in Interfaces.C.int;
+ Text : in Interfaces.C.char_array)
+ return Storage.Integer_Address;
+ pragma Import (C, new_fl_text_editor, "new_fl_text_editor");
+ pragma Inline (new_fl_text_editor);
+
+ procedure free_fl_text_editor
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, free_fl_text_editor, "free_fl_text_editor");
+ pragma Inline (free_fl_text_editor);
+
+
+
+
+ procedure fl_text_editor_default
+ (TE : in Storage.Integer_Address;
+ K : in Interfaces.C.int);
+ pragma Import (C, fl_text_editor_default, "fl_text_editor_default");
+ pragma Inline (fl_text_editor_default);
+
+
+
+
+ procedure fl_text_editor_undo
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_undo, "fl_text_editor_undo");
+ pragma Inline (fl_text_editor_undo);
+
+ procedure fl_text_editor_cut
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_cut, "fl_text_editor_cut");
+ pragma Inline (fl_text_editor_cut);
+
+ procedure fl_text_editor_copy
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_copy, "fl_text_editor_copy");
+ pragma Inline (fl_text_editor_copy);
+
+ procedure fl_text_editor_paste
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_paste, "fl_text_editor_paste");
+ pragma Inline (fl_text_editor_paste);
+
+ procedure fl_text_editor_delete
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_delete, "fl_text_editor_delete");
+ pragma Inline (fl_text_editor_delete);
+
+ procedure fl_text_editor_select_all
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_select_all, "fl_text_editor_select_all");
+ pragma Inline (fl_text_editor_select_all);
+
+
+
+
+ procedure fl_text_editor_backspace
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_backspace, "fl_text_editor_backspace");
+ pragma Inline (fl_text_editor_backspace);
+
+ procedure fl_text_editor_insert
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_insert, "fl_text_editor_insert");
+ pragma Inline (fl_text_editor_insert);
+
+ procedure fl_text_editor_enter
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_enter, "fl_text_editor_enter");
+ pragma Inline (fl_text_editor_enter);
+
+ procedure fl_text_editor_ignore
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ignore, "fl_text_editor_ignore");
+ pragma Inline (fl_text_editor_ignore);
+
+
+
+
+ procedure fl_text_editor_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_home, "fl_text_editor_home");
+ pragma Inline (fl_text_editor_home);
+
+ procedure fl_text_editor_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_end, "fl_text_editor_end");
+ pragma Inline (fl_text_editor_end);
+
+ procedure fl_text_editor_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_page_down, "fl_text_editor_page_down");
+ pragma Inline (fl_text_editor_page_down);
+
+ procedure fl_text_editor_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_page_up, "fl_text_editor_page_up");
+ pragma Inline (fl_text_editor_page_up);
+
+ procedure fl_text_editor_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_down, "fl_text_editor_down");
+ pragma Inline (fl_text_editor_down);
+
+ procedure fl_text_editor_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_left, "fl_text_editor_left");
+ pragma Inline (fl_text_editor_left);
+
+ procedure fl_text_editor_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_right, "fl_text_editor_right");
+ pragma Inline (fl_text_editor_right);
+
+ procedure fl_text_editor_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_up, "fl_text_editor_up");
+ pragma Inline (fl_text_editor_up);
+
+
+
+
+ procedure fl_text_editor_shift_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_home, "fl_text_editor_shift_home");
+ pragma Inline (fl_text_editor_shift_home);
+
+ procedure fl_text_editor_shift_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_end, "fl_text_editor_shift_end");
+ pragma Inline (fl_text_editor_shift_end);
+
+ procedure fl_text_editor_shift_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_page_down, "fl_text_editor_shift_page_down");
+ pragma Inline (fl_text_editor_shift_page_down);
+
+ procedure fl_text_editor_shift_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_page_up, "fl_text_editor_shift_page_up");
+ pragma Inline (fl_text_editor_shift_page_up);
+
+ procedure fl_text_editor_shift_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_down, "fl_text_editor_shift_down");
+ pragma Inline (fl_text_editor_shift_down);
+
+ procedure fl_text_editor_shift_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_left, "fl_text_editor_shift_left");
+ pragma Inline (fl_text_editor_shift_left);
+
+ procedure fl_text_editor_shift_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_right, "fl_text_editor_shift_right");
+ pragma Inline (fl_text_editor_shift_right);
+
+ procedure fl_text_editor_shift_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_shift_up, "fl_text_editor_shift_up");
+ pragma Inline (fl_text_editor_shift_up);
+
+
+
+
+ procedure fl_text_editor_ctrl_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_home, "fl_text_editor_ctrl_home");
+ pragma Inline (fl_text_editor_ctrl_home);
+
+ procedure fl_text_editor_ctrl_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_end, "fl_text_editor_ctrl_end");
+ pragma Inline (fl_text_editor_ctrl_end);
+
+ procedure fl_text_editor_ctrl_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_page_down, "fl_text_editor_ctrl_page_down");
+ pragma Inline (fl_text_editor_ctrl_page_down);
+
+ procedure fl_text_editor_ctrl_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_page_up, "fl_text_editor_ctrl_page_up");
+ pragma Inline (fl_text_editor_ctrl_page_up);
+
+ procedure fl_text_editor_ctrl_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_down, "fl_text_editor_ctrl_down");
+ pragma Inline (fl_text_editor_ctrl_down);
+
+ procedure fl_text_editor_ctrl_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_left, "fl_text_editor_ctrl_left");
+ pragma Inline (fl_text_editor_ctrl_left);
+
+ procedure fl_text_editor_ctrl_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_right, "fl_text_editor_ctrl_right");
+ pragma Inline (fl_text_editor_ctrl_right);
+
+ procedure fl_text_editor_ctrl_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_up, "fl_text_editor_ctrl_up");
+ pragma Inline (fl_text_editor_ctrl_up);
+
+
+
+
+ procedure fl_text_editor_ctrl_shift_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_home, "fl_text_editor_ctrl_shift_home");
+ pragma Inline (fl_text_editor_ctrl_shift_home);
+
+ procedure fl_text_editor_ctrl_shift_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_end, "fl_text_editor_ctrl_shift_end");
+ pragma Inline (fl_text_editor_ctrl_shift_end);
+
+ procedure fl_text_editor_ctrl_shift_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_page_down, "fl_text_editor_ctrl_shift_page_down");
+ pragma Inline (fl_text_editor_ctrl_shift_page_down);
+
+ procedure fl_text_editor_ctrl_shift_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_page_up, "fl_text_editor_ctrl_shift_page_up");
+ pragma Inline (fl_text_editor_ctrl_shift_page_up);
+
+ procedure fl_text_editor_ctrl_shift_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_down, "fl_text_editor_ctrl_shift_down");
+ pragma Inline (fl_text_editor_ctrl_shift_down);
+
+ procedure fl_text_editor_ctrl_shift_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_left, "fl_text_editor_ctrl_shift_left");
+ pragma Inline (fl_text_editor_ctrl_shift_left);
+
+ procedure fl_text_editor_ctrl_shift_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_right, "fl_text_editor_ctrl_shift_right");
+ pragma Inline (fl_text_editor_ctrl_shift_right);
+
+ procedure fl_text_editor_ctrl_shift_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_ctrl_shift_up, "fl_text_editor_ctrl_shift_up");
+ pragma Inline (fl_text_editor_ctrl_shift_up);
+
+
+
+
+ procedure fl_text_editor_meta_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_home, "fl_text_editor_meta_home");
+ pragma Inline (fl_text_editor_meta_home);
+
+ procedure fl_text_editor_meta_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_end, "fl_text_editor_meta_end");
+ pragma Inline (fl_text_editor_meta_end);
+
+ procedure fl_text_editor_meta_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_page_down, "fl_text_editor_meta_page_down");
+ pragma Inline (fl_text_editor_meta_page_down);
+
+ procedure fl_text_editor_meta_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_page_up, "fl_text_editor_meta_page_up");
+ pragma Inline (fl_text_editor_meta_page_up);
+
+ procedure fl_text_editor_meta_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_down, "fl_text_editor_meta_down");
+ pragma Inline (fl_text_editor_meta_down);
+
+ procedure fl_text_editor_meta_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_left, "fl_text_editor_meta_left");
+ pragma Inline (fl_text_editor_meta_left);
+
+ procedure fl_text_editor_meta_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_right, "fl_text_editor_meta_right");
+ pragma Inline (fl_text_editor_meta_right);
+
+ procedure fl_text_editor_meta_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_up, "fl_text_editor_meta_up");
+ pragma Inline (fl_text_editor_meta_up);
+
+
+
+
+ procedure fl_text_editor_meta_shift_home
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_home, "fl_text_editor_meta_shift_home");
+ pragma Inline (fl_text_editor_meta_shift_home);
+
+ procedure fl_text_editor_meta_shift_end
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_end, "fl_text_editor_meta_shift_end");
+ pragma Inline (fl_text_editor_meta_shift_end);
+
+ procedure fl_text_editor_meta_shift_page_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_page_down, "fl_text_editor_meta_shift_page_down");
+ pragma Inline (fl_text_editor_meta_shift_page_down);
+
+ procedure fl_text_editor_meta_shift_page_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_page_up, "fl_text_editor_meta_shift_page_up");
+ pragma Inline (fl_text_editor_meta_shift_page_up);
+
+ procedure fl_text_editor_meta_shift_down
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_down, "fl_text_editor_meta_shift_down");
+ pragma Inline (fl_text_editor_meta_shift_down);
+
+ procedure fl_text_editor_meta_shift_left
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_left, "fl_text_editor_meta_shift_left");
+ pragma Inline (fl_text_editor_meta_shift_left);
+
+ procedure fl_text_editor_meta_shift_right
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_right, "fl_text_editor_meta_shift_right");
+ pragma Inline (fl_text_editor_meta_shift_right);
+
+ procedure fl_text_editor_meta_shift_up
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_meta_shift_up, "fl_text_editor_meta_shift_up");
+ pragma Inline (fl_text_editor_meta_shift_up);
+
+
+
+
+ procedure fl_text_editor_add_key_binding
+ (TE : in Storage.Integer_Address;
+ K, S : in Interfaces.C.int;
+ F : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_add_key_binding, "fl_text_editor_add_key_binding");
+ pragma Inline (fl_text_editor_add_key_binding);
+
+ procedure fl_text_editor_remove_all_key_bindings
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_remove_all_key_bindings,
+ "fl_text_editor_remove_all_key_bindings");
+ pragma Inline (fl_text_editor_remove_all_key_bindings);
+
+ procedure fl_text_editor_set_default_key_function
+ (TE, F : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_set_default_key_function,
+ "fl_text_editor_set_default_key_function");
+ pragma Inline (fl_text_editor_set_default_key_function);
+
+
+
+
+ function fl_text_editor_get_insert_mode
+ (TE : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_text_editor_get_insert_mode, "fl_text_editor_get_insert_mode");
+ pragma Inline (fl_text_editor_get_insert_mode);
+
+ procedure fl_text_editor_set_insert_mode
+ (TE : in Storage.Integer_Address;
+ I : in Interfaces.C.int);
+ pragma Import (C, fl_text_editor_set_insert_mode, "fl_text_editor_set_insert_mode");
+ pragma Inline (fl_text_editor_set_insert_mode);
+
+
+
+
+ function fl_text_editor_get_tab_nav
+ (TE : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_text_editor_get_tab_nav, "fl_text_editor_get_tab_nav");
+ pragma Inline (fl_text_editor_get_tab_nav);
+
+ procedure fl_text_editor_set_tab_nav
+ (TE : in Storage.Integer_Address;
+ T : in Interfaces.C.int);
+ pragma Import (C, fl_text_editor_set_tab_nav, "fl_text_editor_set_tab_nav");
+ pragma Inline (fl_text_editor_set_tab_nav);
+
+
+
+
+ procedure fl_text_editor_draw
+ (W : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_draw, "fl_text_editor_draw");
+ pragma Inline (fl_text_editor_draw);
+
+ function fl_text_editor_handle
+ (W : in Storage.Integer_Address;
+ E : in Interfaces.C.int)
+ return Interfaces.C.int;
+ pragma Import (C, fl_text_editor_handle, "fl_text_editor_handle");
+ pragma Inline (fl_text_editor_handle);
+
+ function fl_text_editor_handle_key
+ (TE : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_text_editor_handle_key, "fl_text_editor_handle_key");
+ pragma Inline (fl_text_editor_handle_key);
+
+ procedure fl_text_editor_maybe_do_callback
+ (TE : in Storage.Integer_Address);
+ pragma Import (C, fl_text_editor_maybe_do_callback, "fl_text_editor_maybe_do_callback");
+ pragma Inline (fl_text_editor_maybe_do_callback);
+
+
+
+
+ ----------------------
+ -- Callback Hooks --
+ ----------------------
+
+ function Key_Func_Hook
+ (K : in Interfaces.C.int;
+ E : in Storage.Integer_Address)
+ return Interfaces.C.int
+ is
+ Editor_Ptr : Storage.Integer_Address := fl_widget_get_user_data (E);
+ Ada_Editor : access Text_Editor'Class;
+
+ Extra_Keys : Modifier := FLTK.Event.Last_Modifier;
+ Actual_Key : Keypress := FLTK.Event.Last_Key; -- fuck you FLTK, give me the real code
+ Ada_Key : Key_Combo := Extra_Keys + Actual_Key;
+
+ -- For whatever reason, if a regular key function is used then FLTK will
+ -- give you the key code, but if a default key function is used instead it
+ -- will give you the first character in the textual representation, which
+ -- is not ideal. This is why we have to grab the Last_Key manually.
+ begin
+ pragma Assert (Editor_Ptr /= Null_Pointer);
+ Ada_Editor := Editor_Convert.To_Pointer (Storage.To_Address (Editor_Ptr));
+ for B of Global_Key_Bindings loop
+ if B.Key = Ada_Key and B.Func /= null then
+ B.Func (Ada_Editor.all);
+ return Event_Outcome'Pos (Handled);
+ end if;
+ end loop;
+ for B of Ada_Editor.Bindings loop
+ if B.Key = Ada_Key then
+ B.Func (Ada_Editor.all);
+ return Event_Outcome'Pos (Handled);
+ end if;
+ end loop;
+ if Ada_Editor.Default_Func /= null then
+ Ada_Editor.Default_Func (Ada_Editor.all, Ada_Key);
+ return Event_Outcome'Pos (Handled);
+ end if;
+ return Event_Outcome'Pos (Not_Handled);
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Fl_Text_Editor C++ object had no user data reference back to the " &
+ "corresponding Ada object in the Key_Func hook";
+ end Key_Func_Hook;
+
+
+
+
+ -------------------
+ -- Destructors --
+ -------------------
+
+ procedure Extra_Final
+ (This : in out Text_Editor) is
+ begin
+ Extra_Final (Text_Display (This));
+ end Extra_Final;
+
+
+ procedure Finalize
+ (This : in out Text_Editor) is
+ begin
+ Extra_Final (This);
+ if This.Void_Ptr /= Null_Pointer and This.Needs_Dealloc then
+ free_fl_text_editor (This.Void_Ptr);
+ This.Void_Ptr := Null_Pointer;
+ if This.Raw_Buffer /= Null_Pointer then
+ free_fl_text_buffer (This.Raw_Buffer); -- buffer is reference counted
+ This.Raw_Buffer := Null_Pointer;
+ end if;
+ end if;
+ end Finalize;
+
+
+
+
+ --------------------
+ -- Constructors --
+ --------------------
+
+ procedure Extra_Init
+ (This : in out Text_Editor;
+ X, Y, W, H : in Integer;
+ Text : in String) is
+ begin
+ for B of Default_Key_Bindings loop
+ This.Bindings.Append (B);
+ end loop;
+ This.Default_Func := KF_Default'Access;
+
+ -- change things over so key bindings are all handled from the Ada side
+ fl_text_editor_remove_all_key_bindings (This.Void_Ptr);
+ fl_text_editor_set_default_key_function
+ (This.Void_Ptr, Storage.To_Integer (Key_Func_Hook'Address));
+
+ Extra_Init (Text_Display (This), X, Y, W, H, Text);
+ end Extra_Init;
+
+
+ procedure Initialize
+ (This : in out Text_Editor) is
+ begin
+ This.Draw_Ptr := fl_text_editor_draw'Address;
+ This.Handle_Ptr := fl_text_editor_handle'Address;
+ end Initialize;
+
+
+ package body Forge is
+
+ function Create
+ (X, Y, W, H : in Integer;
+ Text : in String := "")
+ return Text_Editor
+ is
+ use type Interfaces.C.int;
+ begin
+ return This : Text_Editor do
+ This.Void_Ptr := new_fl_text_editor
+ (Interfaces.C.int (X),
+ Interfaces.C.int (Y),
+ Interfaces.C.int (W),
+ Interfaces.C.int (H),
+ Interfaces.C.To_C (Text));
+ Extra_Init (This, X, Y, W, H, Text);
+ end return;
+ end Create;
+
+
+ function Create
+ (Parent : in out Group'Class;
+ X, Y, W, H : in Integer;
+ Text : in String := "")
+ return Text_Editor is
+ begin
+ return This : Text_Editor := Create (X, Y, W, H, Text) do
+ Parent.Add (This);
+ end return;
+ end Create;
+
+ end Forge;
+
+
+
+
+ -----------------------
+ -- API Subprograms --
+ -----------------------
+
+ procedure KF_Default
+ (This : in out Text_Editor'Class;
+ Key : in Key_Combo) is
+ begin
+ fl_text_editor_default
+ (This.Void_Ptr,
+ Interfaces.C.int (Key.Keycode));
+ end KF_Default;
+
+
+
+
+ procedure KF_Undo
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_undo (This.Void_Ptr);
+ end KF_Undo;
+
+
+ procedure KF_Cut
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_cut (This.Void_Ptr);
+ end KF_Cut;
+
+
+ procedure KF_Copy
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_copy (This.Void_Ptr);
+ end KF_Copy;
+
+
+ procedure KF_Paste
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_paste (This.Void_Ptr);
+ end KF_Paste;
+
+
+ procedure KF_Delete
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_delete (This.Void_Ptr);
+ end KF_Delete;
+
+
+ procedure KF_Select_All
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_select_all (This.Void_Ptr);
+ end KF_Select_All;
+
+
+
+
+ procedure KF_Backspace
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_backspace (This.Void_Ptr);
+ end KF_Backspace;
+
+
+ procedure KF_Insert
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_insert (This.Void_Ptr);
+ end KF_Insert;
+
+
+ procedure KF_Enter
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_enter (This.Void_Ptr);
+ end KF_Enter;
+
+
+ procedure KF_Ignore
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ignore (This.Void_Ptr);
+ end KF_Ignore;
+
+
+ procedure KF_Tab
+ (This : in out Text_Editor'Class) is
+ begin
+ This.Insert_Text (Latin.HT & "");
+ end KF_Tab;
+
+
+
+
+ procedure KF_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_home (This.Void_Ptr);
+ end KF_Home;
+
+
+ procedure KF_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_end (This.Void_Ptr);
+ end KF_End;
+
+
+ procedure KF_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_page_down (This.Void_Ptr);
+ end KF_Page_Down;
+
+
+ procedure KF_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_page_up (This.Void_Ptr);
+ end KF_Page_Up;
+
+
+ procedure KF_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_down (This.Void_Ptr);
+ end KF_Down;
+
+
+ procedure KF_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_left (This.Void_Ptr);
+ end KF_Left;
+
+
+ procedure KF_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_right (This.Void_Ptr);
+ end KF_Right;
+
+
+ procedure KF_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_up (This.Void_Ptr);
+ end KF_Up;
+
+
+
+
+ procedure KF_Shift_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_home (This.Void_Ptr);
+ end KF_Shift_Home;
+
+
+ procedure KF_Shift_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_end (This.Void_Ptr);
+ end KF_Shift_End;
+
+
+ procedure KF_Shift_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_page_down (This.Void_Ptr);
+ end KF_Shift_Page_Down;
+
+
+ procedure KF_Shift_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_page_up (This.Void_Ptr);
+ end KF_Shift_Page_Up;
+
+
+ procedure KF_Shift_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_down (This.Void_Ptr);
+ end KF_Shift_Down;
+
+
+ procedure KF_Shift_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_left (This.Void_Ptr);
+ end KF_Shift_Left;
+
+
+ procedure KF_Shift_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_right (This.Void_Ptr);
+ end KF_Shift_Right;
+
+
+ procedure KF_Shift_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_shift_up (This.Void_Ptr);
+ end KF_Shift_Up;
+
+
+
+
+ procedure KF_Ctrl_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_home (This.Void_Ptr);
+ end KF_Ctrl_Home;
+
+
+ procedure KF_Ctrl_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_end (This.Void_Ptr);
+ end KF_Ctrl_End;
+
+
+ procedure KF_Ctrl_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_page_down (This.Void_Ptr);
+ end KF_Ctrl_Page_Down;
+
+
+ procedure KF_Ctrl_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_page_up (This.Void_Ptr);
+ end KF_Ctrl_Page_Up;
+
+
+ procedure KF_Ctrl_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_down (This.Void_Ptr);
+ end KF_Ctrl_Down;
+
+
+ procedure KF_Ctrl_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_left (This.Void_Ptr);
+ end KF_Ctrl_Left;
+
+
+ procedure KF_Ctrl_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_right (This.Void_Ptr);
+ end KF_Ctrl_Right;
+
+
+ procedure KF_Ctrl_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_up (This.Void_Ptr);
+ end KF_Ctrl_Up;
+
+
+
+
+ procedure KF_Ctrl_Shift_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_home (This.Void_Ptr);
+ end KF_Ctrl_Shift_Home;
+
+
+ procedure KF_Ctrl_Shift_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_end (This.Void_Ptr);
+ end KF_Ctrl_Shift_End;
+
+
+ procedure KF_Ctrl_Shift_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_page_down (This.Void_Ptr);
+ end KF_Ctrl_Shift_Page_Down;
+
+
+ procedure KF_Ctrl_Shift_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_page_up (This.Void_Ptr);
+ end KF_Ctrl_Shift_Page_Up;
+
+
+ procedure KF_Ctrl_Shift_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_down (This.Void_Ptr);
+ end KF_Ctrl_Shift_Down;
+
+
+ procedure KF_Ctrl_Shift_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_left (This.Void_Ptr);
+ end KF_Ctrl_Shift_Left;
+
+
+ procedure KF_Ctrl_Shift_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_right (This.Void_Ptr);
+ end KF_Ctrl_Shift_Right;
+
+
+ procedure KF_Ctrl_Shift_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_ctrl_shift_up (This.Void_Ptr);
+ end KF_Ctrl_Shift_Up;
+
+
+
+
+ procedure KF_Meta_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_home (This.Void_Ptr);
+ end KF_Meta_Home;
+
+
+ procedure KF_Meta_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_end (This.Void_Ptr);
+ end KF_Meta_End;
+
+
+ procedure KF_Meta_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_page_down (This.Void_Ptr);
+ end KF_Meta_Page_Down;
+
+
+ procedure KF_Meta_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_page_up (This.Void_Ptr);
+ end KF_Meta_Page_Up;
+
+
+ procedure KF_Meta_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_down (This.Void_Ptr);
+ end KF_Meta_Down;
+
+
+ procedure KF_Meta_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_left (This.Void_Ptr);
+ end KF_Meta_Left;
+
+
+ procedure KF_Meta_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_right (This.Void_Ptr);
+ end KF_Meta_Right;
+
+
+ procedure KF_Meta_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_up (This.Void_Ptr);
+ end KF_Meta_Up;
+
+
+
+
+ procedure KF_Meta_Shift_Home
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_home (This.Void_Ptr);
+ end KF_Meta_Shift_Home;
+
+
+ procedure KF_Meta_Shift_End
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_end (This.Void_Ptr);
+ end KF_Meta_Shift_End;
+
+
+ procedure KF_Meta_Shift_Page_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_page_down (This.Void_Ptr);
+ end KF_Meta_Shift_Page_Down;
+
+
+ procedure KF_Meta_Shift_Page_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_page_up (This.Void_Ptr);
+ end KF_Meta_Shift_Page_Up;
+
+
+ procedure KF_Meta_Shift_Down
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_down (This.Void_Ptr);
+ end KF_Meta_Shift_Down;
+
+
+ procedure KF_Meta_Shift_Left
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_left (This.Void_Ptr);
+ end KF_Meta_Shift_Left;
+
+
+ procedure KF_Meta_Shift_Right
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_right (This.Void_Ptr);
+ end KF_Meta_Shift_Right;
+
+
+ procedure KF_Meta_Shift_Up
+ (This : in out Text_Editor'Class) is
+ begin
+ fl_text_editor_meta_shift_up (This.Void_Ptr);
+ end KF_Meta_Shift_Up;
+
+
+
+
+ procedure Add_Key_Binding
+ (This : in out Text_Editor;
+ Key : in Key_Combo;
+ Func : in Key_Func) is
+ begin
+ if Func /= null then
+ This.Bindings.Append ((Key, Func));
+ end if;
+ end Add_Key_Binding;
+
+
+ procedure Add_Key_Binding
+ (This : in out Text_Editor;
+ Bind : in Key_Binding) is
+ begin
+ if Bind.Func /= null then
+ This.Bindings.Append (Bind);
+ end if;
+ end Add_Key_Binding;
+
+
+ procedure Add_Key_Bindings
+ (This : in out Text_Editor;
+ Bind : in Key_Binding_Array) is
+ begin
+ for Item of Bind loop
+ if Item.Func /= null then
+ This.Bindings.Append (Item);
+ end if;
+ end loop;
+ end Add_Key_Bindings;
+
+
+ function Get_Bound_Key_Function
+ (This : in Text_Editor;
+ Key : in Key_Combo)
+ return Key_Func is
+ begin
+ for I in 1 .. Integer (This.Bindings.Length) loop
+ if This.Bindings.Element (I).Key = Key then
+ return This.Bindings.Element (I).Func;
+ end if;
+ end loop;
+ return null;
+ end Get_Bound_Key_Function;
+
+
+ function Get_All_Bound_Key_Functions
+ (This : in Text_Editor)
+ return Key_Binding_Array is
+ begin
+ return Result : Key_Binding_Array (1 .. Integer (This.Bindings.Length)) do
+ for Place in Result'Range loop
+ Result (Place) := This.Bindings.Element (Place);
+ end loop;
+ end return;
+ end Get_All_Bound_Key_Functions;
+
+
+ procedure Remove_Key_Binding
+ (This : in out Text_Editor;
+ Key : in Key_Combo) is
+ begin
+ for I in reverse 1 .. Integer (This.Bindings.Length) loop
+ if This.Bindings.Element (I).Key = Key then
+ This.Bindings.Delete (I);
+ end if;
+ end loop;
+ end Remove_Key_Binding;
+
+
+ procedure Remove_Key_Binding
+ (This : in out Text_Editor;
+ Bind : in Key_Binding) is
+ begin
+ for I in reverse 1 .. Integer (This.Bindings.Length) loop
+ if This.Bindings.Element (I) = Bind then
+ This.Bindings.Delete (I);
+ end if;
+ end loop;
+ end Remove_Key_Binding;
+
+
+ procedure Remove_Key_Bindings
+ (This : in out Text_Editor;
+ Bind : in Key_Binding_Array) is
+ begin
+ for Item of Bind loop
+ This.Remove_Key_Binding (Item);
+ end loop;
+ end Remove_Key_Bindings;
+
+
+ procedure Remove_All_Key_Bindings
+ (This : in out Text_Editor) is
+ begin
+ This.Bindings.Clear;
+ end Remove_All_Key_Bindings;
+
+
+ function Get_Default_Key_Function
+ (This : in Text_Editor)
+ return Default_Key_Func is
+ begin
+ return This.Default_Func;
+ end Get_Default_Key_Function;
+
+
+ procedure Set_Default_Key_Function
+ (This : in out Text_Editor;
+ Func : in Default_Key_Func) is
+ begin
+ This.Default_Func := Func;
+ end Set_Default_Key_Function;
+
+
+
+
+ function Get_Insert_Mode
+ (This : in Text_Editor)
+ return Insert_Mode
+ is
+ Result : Interfaces.C.int := fl_text_editor_get_insert_mode (This.Void_Ptr);
+ begin
+ return Insert_Mode'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl_Text_Editor::insert_mode returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end Get_Insert_Mode;
+
+
+ procedure Set_Insert_Mode
+ (This : in out Text_Editor;
+ To : in Insert_Mode) is
+ begin
+ fl_text_editor_set_insert_mode (This.Void_Ptr, Insert_Mode'Pos (To));
+ end Set_Insert_Mode;
+
+
+
+
+ function Get_Tab_Mode
+ (This : in Text_Editor)
+ return Tab_Navigation
+ is
+ Result : Interfaces.C.int := fl_text_editor_get_tab_nav (This.Void_Ptr);
+ begin
+ return Tab_Navigation'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl_Text_Editor::tab_nav returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end Get_Tab_Mode;
+
+
+ procedure Set_Tab_Mode
+ (This : in out Text_Editor;
+ To : in Tab_Navigation) is
+ begin
+ fl_text_editor_set_tab_nav (This.Void_Ptr, Tab_Navigation'Pos (To));
+ end Set_Tab_Mode;
+
+
+
+
+ function Handle
+ (This : in out Text_Editor;
+ Event : in Event_Kind)
+ return Event_Outcome is
+ begin
+ return Text_Display (This).Handle (Event);
+ end Handle;
+
+
+ function Handle_Key
+ (This : in out Text_Editor)
+ return Event_Outcome
+ is
+ Result : Interfaces.C.int := fl_text_editor_handle_key (This.Void_Ptr);
+ begin
+ return Event_Outcome'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl_Text_Editor::handle_key returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end Handle_Key;
+
+
+ procedure Maybe_Do_Callback
+ (This : in out Text_Editor) is
+ begin
+ fl_text_editor_maybe_do_callback (This.Void_Ptr);
+ end Maybe_Do_Callback;
+
+
+end FLTK.Widgets.Groups.Text_Displays.Text_Editors;
+
+