summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Gtk/Internal.dcl4
-rw-r--r--src/Gtk/Internal.icl47
-rw-r--r--src/Gtk/Widgets.dcl5
-rw-r--r--src/Gtk/Widgets.icl23
4 files changed, 72 insertions, 7 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl
index 94c9bc1..8ffe98e 100644
--- a/src/Gtk/Internal.dcl
+++ b/src/Gtk/Internal.dcl
@@ -67,7 +67,11 @@ gtk_style_context_add_provider :: !Pointer !Pointer !Int !.a -> .a
gtk_style_context_add_provider_for_screen :: !Pointer !Pointer !Int !.a -> .a
gtk_style_context_remove_class :: !Pointer !String !.a -> .a
+gtk_text_buffer_delete :: !Pointer !{#Int} !{#Int} !.a -> .a
+gtk_text_buffer_get_start_iter :: !Pointer !.a -> (!{#Int}, !.a)
+gtk_text_buffer_get_end_iter :: !Pointer !.a -> (!{#Int}, !.a)
gtk_text_buffer_insert_at_cursor :: !Pointer !String !Int !.a -> .a
+gtk_text_buffer_insert_markup :: !Pointer !{#Int} !String !.a -> .a
gtk_text_buffer_set_text :: !Pointer !String !Int !.a -> .a
gtk_text_view_new :: !.a -> (!Pointer, !.a)
diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl
index a4a503f..dab7f62 100644
--- a/src/Gtk/Internal.icl
+++ b/src/Gtk/Internal.icl
@@ -292,11 +292,49 @@ where
ccall gtk_style_context_remove_class "ps:V:A"
}
+gtk_text_buffer_delete :: !Pointer !{#Int} !{#Int} !.a -> .a
+gtk_text_buffer_delete buffer start end env =
+ delete buffer (get_array_pointer start) (get_array_pointer end) env
+where
+ delete :: !Pointer !Pointer !Pointer !.a -> .a
+ delete _ _ _ _ = code {
+ ccall gtk_text_buffer_delete "ppp:V:A"
+ }
+
+gtk_text_buffer_get_start_iter :: !Pointer !.a -> (!{#Int}, !.a)
+gtk_text_buffer_get_start_iter buffer env
+ # iter = createArray (IF_INT_64_OR_32 10 14) 0 /* large enough to hold GtkTextIter */
+ = (iter, get buffer (get_array_pointer iter) env)
+where
+ get :: !Pointer !Pointer !.a -> .a
+ get _ _ _ = code {
+ ccall gtk_text_buffer_get_start_iter "pp:V:A"
+ }
+
+gtk_text_buffer_get_end_iter :: !Pointer !.a -> (!{#Int}, !.a)
+gtk_text_buffer_get_end_iter buffer env
+ # iter = createArray (IF_INT_64_OR_32 10 14) 0 /* large enough to hold GtkTextIter */
+ = (iter, get buffer (get_array_pointer iter) env)
+where
+ get :: !Pointer !Pointer !.a -> .a
+ get _ _ _ = code {
+ ccall gtk_text_buffer_get_end_iter "pp:V:A"
+ }
+
gtk_text_buffer_insert_at_cursor :: !Pointer !String !Int !.a -> .a
gtk_text_buffer_insert_at_cursor buffer string len env = code {
ccall gtk_text_buffer_insert_at_cursor "psI:V:A"
}
+gtk_text_buffer_insert_markup :: !Pointer !{#Int} !String !.a -> .a
+gtk_text_buffer_insert_markup buffer iter string env =
+ insert buffer (get_array_pointer iter) (packString string) (size string) env
+where
+ insert :: !Pointer !Int !String !Int !.a -> .a
+ insert _ _ _ _ _ = code {
+ ccall gtk_text_buffer_insert_markup "pIsI:V:A"
+ }
+
gtk_text_buffer_set_text :: !Pointer !String !Int !.a -> .a
gtk_text_buffer_set_text buffer string len env = code {
ccall gtk_text_buffer_set_text "psI:V:A"
@@ -384,3 +422,12 @@ gtk_window_set_transient_for :: !Pointer !Pointer !.a -> .a
gtk_window_set_transient_for window parent env = code {
ccall gtk_window_set_transient_for "pp:V:A"
}
+
+get_array_pointer :: !{#Int} -> Pointer
+get_array_pointer arr = get arr + IF_INT_64_OR_32 24 12
+where
+ get :: !{#Int} -> Pointer
+ get _ = code {
+ push_a_b 0
+ pop_a 1
+ }
diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl
index bfed0c6..1140c75 100644
--- a/src/Gtk/Widgets.dcl
+++ b/src/Gtk/Widgets.dcl
@@ -106,8 +106,9 @@ stopSpinner :: !GtkSpinner -> GtkM GtkSpinner
:: GtkTextBuffer
-insertAtCursor :: !String !GtkTextBuffer -> GtkM ()
-setText :: !String !GtkTextBuffer -> GtkM ()
+setText :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
+setMarkup :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
+insertAtCursor :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
:: GtkTextView
instance gtkWidget GtkTextView
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index adb655e..b7e4798 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -200,11 +200,24 @@ stopSpinner spinner = toState (gtk_spinner_stop spinner) >>| pure spinner
:: GtkTextBuffer :== Pointer
-insertAtCursor :: !String !GtkTextBuffer -> GtkM ()
-insertAtCursor s buffer = toState (gtk_text_buffer_insert_at_cursor buffer s (size s))
-
-setText :: !String !GtkTextBuffer -> GtkM ()
-setText s buffer = toState (gtk_text_buffer_set_text buffer s (size s))
+setText :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
+setText s buffer =
+ toState (gtk_text_buffer_set_text buffer s (size s)) >>|
+ pure buffer
+
+setMarkup :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
+setMarkup s buffer =
+ toStateR (gtk_text_buffer_get_start_iter buffer) >>= \start ->
+ toStateR (gtk_text_buffer_get_end_iter buffer) >>= \end ->
+ toState (gtk_text_buffer_delete buffer start end) >>|
+ toStateR (gtk_text_buffer_get_start_iter buffer) >>= \start ->
+ toState (gtk_text_buffer_insert_markup buffer start s) >>|
+ pure buffer
+
+insertAtCursor :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
+insertAtCursor s buffer =
+ toState (gtk_text_buffer_insert_at_cursor buffer s (size s)) >>|
+ pure buffer
:: GtkTextView :== Pointer