summaryrefslogtreecommitdiff
path: root/src/Gtk
diff options
context:
space:
mode:
authorCamil Staps2019-10-20 12:43:09 +0200
committerCamil Staps2019-10-20 12:43:09 +0200
commit19622ae72b27d70a79e31e8454c8edcdb0d6c05b (patch)
tree5bae67ec2f6e3544e0dbb4d9890a4e7e984190ff /src/Gtk
parentAdd mother Gtk module to collect all imports (diff)
Add GtkBox support
Diffstat (limited to 'src/Gtk')
-rw-r--r--src/Gtk/Internal.dcl4
-rw-r--r--src/Gtk/Internal.icl15
-rw-r--r--src/Gtk/Types.dcl8
-rw-r--r--src/Gtk/Widgets.dcl11
-rw-r--r--src/Gtk/Widgets.icl29
5 files changed, 57 insertions, 10 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl
index d0c938a..9671870 100644
--- a/src/Gtk/Internal.dcl
+++ b/src/Gtk/Internal.dcl
@@ -13,6 +13,10 @@ g_object_unref :: !Pointer !.a -> .a
g_signal_connect_void :: !Pointer !String !Int !.a -> .a
g_signal_pop :: !.a -> (!Maybe GSignalArgs, !.a)
+gtk_box_new :: !Bool !Int !.a -> (!Pointer, !.a)
+gtk_box_pack_start :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a
+gtk_box_pack_end :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a
+
gtk_container_add :: !Pointer !Pointer !.a -> .a
gtk_init :: !.a -> .a
diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl
index b88a703..bd68e1e 100644
--- a/src/Gtk/Internal.icl
+++ b/src/Gtk/Internal.icl
@@ -35,6 +35,21 @@ where
ccall clean_g_signal_pop ":p:A"
}
+gtk_box_new :: !Bool !Int !.a -> (!Pointer, !.a)
+gtk_box_new vertical spacing env = code {
+ ccall gtk_box_new "II:p:A"
+}
+
+gtk_box_pack_start :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a
+gtk_box_pack_start box child expand fill spacing env = code {
+ ccall gtk_box_pack_start "ppIII:V:A"
+}
+
+gtk_box_pack_end :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a
+gtk_box_pack_end box child expand fill spacing env = code {
+ ccall gtk_box_pack_end "ppIII:V:A"
+}
+
gtk_container_add :: !Pointer !Pointer !.a -> .a
gtk_container_add container widget env = code {
ccall gtk_container_add "pp:V:A"
diff --git a/src/Gtk/Types.dcl b/src/Gtk/Types.dcl
index c331bf8..439359e 100644
--- a/src/Gtk/Types.dcl
+++ b/src/Gtk/Types.dcl
@@ -1,5 +1,13 @@
definition module Gtk.Types
+:: GtkDirection
+ = StartToEnd
+ | EndToStart
+
+:: GtkExpand
+ = Expand
+ | NoExpand
+
:: GtkOrientation
= Horizontal
| Vertical
diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl
index 8147c41..914b90b 100644
--- a/src/Gtk/Widgets.dcl
+++ b/src/Gtk/Widgets.dcl
@@ -5,8 +5,8 @@ from StdMaybe import :: Maybe
from System._Pointer import :: Pointer
from Gtk.State import :: State, :: StateT, :: Identity, :: GtkState
-from Gtk.Types import :: GtkOrientation, :: GtkPanedHandleWidth, :: GtkResize,
- :: GtkShrink
+from Gtk.Types import :: GtkDirection, :: GtkExpand, :: GtkOrientation,
+ :: GtkPanedHandleWidth, :: GtkResize, :: GtkShrink
class ptr a :: !a -> Pointer
@@ -26,6 +26,13 @@ instance gtkContainer GtkContainer
addToContainer :: !w !c -> State GtkState () | gtkWidget w & gtkContainer c
+:: GtkBox
+instance gtkWidget GtkBox
+instance gtkContainer GtkBox
+
+newBox :: !GtkOrientation !Int -> State GtkState GtkBox
+packBox :: !w !GtkBox !GtkDirection !GtkExpand -> State GtkState () | gtkWidget w
+
:: GtkPaned
instance gtkWidget GtkPaned
instance gtkContainer GtkPaned
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index 0438525..b7deab5 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -17,6 +17,9 @@ import Gtk.Types
instance gtkWidget GtkWidget where gtkWidget w = w
instance ptr GtkWidget where ptr w = w
+show :: !w -> State GtkState w | gtkWidget w
+show widget = toState ('I'.gtk_widget_show (gtkWidget widget)) >>| pure widget
+
:: GtkContainer :== Pointer
instance gtkWidget GtkContainer where gtkWidget c = c
@@ -26,6 +29,21 @@ addToContainer :: !w !c -> State GtkState () | gtkWidget w & gtkContainer c
addToContainer widget container =
toState ('I'.gtk_container_add (gtkContainer container) (gtkWidget widget))
+:: GtkBox :== Pointer
+
+instance gtkWidget GtkBox where gtkWidget b = b
+instance gtkContainer GtkBox where gtkContainer b = b
+
+newBox :: !GtkOrientation !Int -> State GtkState GtkBox
+newBox orientation spacing =
+ toStateR ('I'.gtk_box_new orientation=:Vertical spacing) >>=
+ show
+
+packBox :: !w !GtkBox !GtkDirection !GtkExpand -> State GtkState () | gtkWidget w
+packBox widget box direction expand =
+ toState (if direction=:StartToEnd 'I'.gtk_box_pack_start 'I'.gtk_box_pack_end
+ box (gtkWidget widget) expand=:Expand True 0)
+
:: GtkPaned :== Pointer
instance gtkWidget GtkPaned where gtkWidget p = p
@@ -35,8 +53,7 @@ newPaned :: !GtkOrientation !GtkPanedHandleWidth -> State GtkState GtkPaned
newPaned orientation handle_width =
toStateR ('I'.gtk_paned_new orientation=:Vertical) >>= \paned ->
toState ('I'.gtk_paned_set_wide_handle paned handle_width=:WideHandle) >>|
- toState ('I'.gtk_widget_show paned) >>|
- pure paned
+ show paned
packPane1 :: !w !GtkPaned !GtkResize !GtkShrink -> State GtkState () | gtkWidget w
packPane1 widget paned resize shrink =
@@ -57,10 +74,7 @@ instance gtkWidget GtkTextView where gtkWidget tv = tv
instance gtkContainer GtkTextView where gtkContainer tv = tv
newTextView :: State GtkState GtkTextView
-newTextView =
- toStateR 'I'.gtk_text_view_new >>= \text_view ->
- toState ('I'.gtk_widget_show text_view) >>|
- pure text_view
+newTextView = toStateR 'I'.gtk_text_view_new >>= show
getTextBuffer :: !GtkTextView -> GtkTextBuffer
getTextBuffer text_view = 'I'.gtk_text_view_get_buffer text_view
@@ -83,5 +97,4 @@ new_window_or_popup is_popup title size =
(case size of
Nothing -> pure ()
Just (h,v) -> toState ('I'.gtk_widget_set_size_request window h v)) >>|
- toState ('I'.gtk_widget_show window) >>|
- pure window
+ show window