diff options
author | Camil Staps | 2019-10-20 12:43:09 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-20 12:43:09 +0200 |
commit | 19622ae72b27d70a79e31e8454c8edcdb0d6c05b (patch) | |
tree | 5bae67ec2f6e3544e0dbb4d9890a4e7e984190ff /src/Gtk | |
parent | Add mother Gtk module to collect all imports (diff) |
Add GtkBox support
Diffstat (limited to 'src/Gtk')
-rw-r--r-- | src/Gtk/Internal.dcl | 4 | ||||
-rw-r--r-- | src/Gtk/Internal.icl | 15 | ||||
-rw-r--r-- | src/Gtk/Types.dcl | 8 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 11 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 29 |
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 |