summaryrefslogtreecommitdiff
path: root/src/Gtk/Widgets.icl
diff options
context:
space:
mode:
Diffstat (limited to 'src/Gtk/Widgets.icl')
-rw-r--r--src/Gtk/Widgets.icl38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index f2c942f..0848122 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -127,6 +127,27 @@ framed label widgetf =
widgetf >>= \widget ->
tuple widget <$> newFrame label widget
+:: GtkListStore :== Pointer
+
+newListStore :: ![GType] -> GtkM GtkListStore
+newListStore types = toStateR (gtk_list_store_newv {toInt t \\ t <- types})
+
+appendToListStore :: ![GValue] !GtkListStore -> GtkM GtkListStore
+appendToListStore values store =
+ set 0 values (gtk_list_store_append store) >>|
+ pure store
+where
+ set :: !Int ![GValue] !.{#Int} -> GtkM ()
+ set col [v:vs] iter = set` >>| set (col+1) vs iter
+ where
+ set` = case v of
+ GValueBool b -> toState (gtk_list_store_set_bool store iter col b)
+ GValueChar c -> toState (gtk_list_store_set_char store iter col c)
+ GValueInt i -> toState (gtk_list_store_set_int store iter col i)
+ GValueReal r -> toState (gtk_list_store_set_real store iter col r)
+ GValueString s -> toState (gtk_list_store_set_string store iter col s)
+ set _ [] _ = pure ()
+
:: GtkMenu :== Pointer
instance gtkWidget GtkMenu where gtkWidget m = m
@@ -308,6 +329,23 @@ where
toState (gtk_text_view_set_wrap_mode text_view (toInt mode)) >>|
pure text_view
+:: GtkTreeView :== Pointer
+
+instance gtkWidget GtkTreeView where gtkWidget tv = tv
+
+newTreeView :: !GtkListStore -> GtkM GtkTreeView
+newTreeView store = toStateR (gtk_tree_view_new_with_model store) >>= show
+
+appendColumnToTreeView :: !String !Int !GtkExpand !GtkTreeView -> GtkM GtkTreeView
+appendColumnToTreeView title col expand tree_view =
+ toStateR gtk_cell_renderer_text_new >>= \renderer ->
+ toStateR gtk_tree_view_column_new >>= \column ->
+ toState (gtk_tree_view_column_set_title column title) >>|
+ toState (gtk_tree_view_column_pack_start column renderer expand=:Expand) >>|
+ toState (gtk_tree_view_column_add_attribute column renderer "text" col) >>|
+ toState (gtk_tree_view_append_column tree_view column) >>|
+ pure tree_view
+
:: GtkWidget :== Pointer
instance gtkWidget GtkWidget where gtkWidget w = w