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.icl59
1 files changed, 52 insertions, 7 deletions
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index 0549c88..1ea63df 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -55,9 +55,10 @@ where
toPtr c = c
fromPtr c = c
-addToContainer :: !w !c -> GtkM () | gtkWidget w & gtkContainer c
-addToContainer widget container =
- toState ('I'.gtk_container_add (gtkContainer container) (gtkWidget widget))
+addToContainer :: !c !w -> GtkM w | gtkWidget w & gtkContainer c
+addToContainer container widget =
+ toState ('I'.gtk_container_add (gtkContainer container) (gtkWidget widget)) >>|
+ pure widget
:: GtkBox :== Pointer
@@ -69,10 +70,11 @@ newBox orientation spacing =
toStateR ('I'.gtk_box_new orientation=:Vertical spacing) >>=
show
-packBox :: !w !GtkBox !GtkDirection !GtkExpand -> GtkM () | gtkWidget w
-packBox widget box direction expand =
+packBox :: !GtkBox !GtkDirection !GtkExpand !w -> GtkM w | gtkWidget w
+packBox box direction expand widget =
toState (if direction=:StartToEnd 'I'.gtk_box_pack_start 'I'.gtk_box_pack_end
- box (gtkWidget widget) expand=:Expand True 0)
+ box (gtkWidget widget) expand=:Expand True 0) >>|
+ pure widget
:: GtkFrame :== Pointer
@@ -85,7 +87,7 @@ newFrame label widget =
(case label of
Label _ -> toState ('I'.gtk_frame_set_label_align frame 0.02 0.5)
NoLabel -> pure ()) >>|
- addToContainer widget frame >>|
+ addToContainer frame widget >>|
show frame
framed :: !GtkLabel !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w
@@ -93,6 +95,49 @@ framed label widgetf =
widgetf >>= \widget ->
tuple widget <$> newFrame label widget
+:: GtkMenu :== Pointer
+
+instance gtkWidget GtkMenu where gtkWidget m = m
+
+newMenu :: GtkM GtkMenu
+newMenu = toStateR 'I'.gtk_menu_new >>= show
+
+:: GtkMenuBar :== Pointer
+
+instance gtkWidget GtkMenuBar where gtkWidget mb = mb
+
+newMenuBar :: GtkM GtkMenuBar
+newMenuBar = toStateR 'I'.gtk_menu_bar_new >>= show
+
+:: GtkMenuItem :== Pointer
+
+instance gtkWidget GtkMenuItem where gtkWidget mi = mi
+
+newMenuItem :: !String -> GtkM GtkMenuItem
+newMenuItem label =
+ toStateR 'I'.gtk_menu_item_new >>= \item ->
+ toState ('I'.gtk_menu_item_set_label item label) >>|
+ toState ('I'.gtk_menu_item_set_use_underline item True) >>|
+ show item
+
+setSubMenu :: !GtkMenuItem !GtkMenu -> GtkM GtkMenu
+setSubMenu item menu =
+ toState ('I'.gtk_menu_item_set_submenu item menu) >>|
+ pure menu
+
+:: GtkMenuShell :== Pointer
+
+instance gtkWidget GtkMenuShell where gtkWidget ms = ms
+
+instance gtkMenuShell GtkMenu where gtkMenuShell m = m
+instance gtkMenuShell GtkMenuBar where gtkMenuShell mb = mb
+instance gtkMenuShell GtkMenuShell where gtkMenuShell ms = ms
+
+appendToMenuShell :: !s !GtkMenuItem -> GtkM GtkMenuItem | gtkMenuShell s
+appendToMenuShell shell item =
+ toState ('I'.gtk_menu_shell_append (gtkMenuShell shell) item) >>|
+ pure item
+
:: GtkPaned :== Pointer
instance gtkWidget GtkPaned where gtkWidget p = p