diff options
-rw-r--r-- | src/Gtk/Internal.dcl | 8 | ||||
-rw-r--r-- | src/Gtk/Internal.icl | 36 | ||||
-rw-r--r-- | src/Gtk/Tune.dcl | 4 | ||||
-rw-r--r-- | src/Gtk/Tune.icl | 12 | ||||
-rw-r--r-- | src/Gtk/Types.dcl | 18 | ||||
-rw-r--r-- | src/Gtk/Types.icl | 9 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 23 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 56 |
8 files changed, 129 insertions, 37 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl index 11c79e9..7a565e8 100644 --- a/src/Gtk/Internal.dcl +++ b/src/Gtk/Internal.dcl @@ -53,8 +53,14 @@ gtk_file_filter_add_pattern :: !Pointer !String !.a -> .a gtk_frame_new :: !(Maybe String) !.a -> (!Pointer, !.a) gtk_frame_set_label_align :: !Pointer !Real !Real !.a -> .a +gtk_grid_attach :: !Pointer !Pointer !Int !Int !Int !Int !.a -> .a +gtk_grid_new :: !.a -> (!Pointer, !.a) + gtk_init :: !.a -> .a +gtk_label_new :: !.a -> (!Pointer, !.a) +gtk_label_set_markup :: !Pointer !String !.a -> .a + gtk_list_store_append :: !Pointer -> .{#Int} gtk_list_store_clear :: !Pointer !.a -> .a gtk_list_store_newv :: !{#Int} !.a -> (!Pointer, !.a) @@ -134,12 +140,14 @@ gtk_widget_destroy :: !Pointer !.a -> .a gtk_widget_get_screen :: !Pointer !.a -> (!Pointer, !.a) gtk_widget_get_style_context :: !Pointer !.a -> (!Pointer, !.a) gtk_widget_hide :: !Pointer !.a -> .a +gtk_widget_set_halign :: !Pointer !Int !.a -> .a gtk_widget_set_margin_bottom :: !Pointer !Int !.a -> .a gtk_widget_set_margin_left :: !Pointer !Int !.a -> .a gtk_widget_set_margin_right :: !Pointer !Int !.a -> .a gtk_widget_set_margin_top :: !Pointer !Int !.a -> .a gtk_widget_set_sensitive :: !Pointer !Bool !.a -> .a gtk_widget_set_size_request :: !Pointer !Int !Int !.a -> .a +gtk_widget_set_valign :: !Pointer !Int !.a -> .a gtk_widget_show :: !Pointer !.a -> .a gtk_window_new :: !Bool !.a -> (!Pointer, !.a) diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl index f77299e..976e6c3 100644 --- a/src/Gtk/Internal.icl +++ b/src/Gtk/Internal.icl @@ -233,6 +233,16 @@ gtk_frame_set_label_align frame xalign yalign env = code { ccall gtk_frame_set_label_align "prr:V:A" } +gtk_grid_attach :: !Pointer !Pointer !Int !Int !Int !Int !.a -> .a +gtk_grid_attach grid child left top width height env = code { + ccall gtk_grid_attach "ppIIII:V:A" +} + +gtk_grid_new :: !.a -> (!Pointer, !.a) +gtk_grid_new env = code { + ccall gtk_grid_new ":p:A" +} + gtk_init :: !.a -> .a gtk_init env = init 0 0 env where @@ -241,6 +251,22 @@ where ccall gtk_init "pp:V:A" } +gtk_label_new :: !.a -> (!Pointer, !.a) +gtk_label_new env = new 0 env +where + new :: !Pointer !.a -> (!Pointer, !.a) + new _ _ = code { + ccall gtk_label_new "p:p:A" + } + +gtk_label_set_markup :: !Pointer !String !.a -> .a +gtk_label_set_markup label text env = set label (packString text) env +where + set :: !Pointer !String !.a -> .a + set _ _ _ = code { + ccall gtk_label_set_markup "ps:V:A" + } + gtk_list_store_append :: !Pointer -> .{#Int} gtk_list_store_append store # iter = createArray 4 0 // size of GtkTreeIter @@ -634,6 +660,11 @@ gtk_widget_hide widget env = code { ccall gtk_widget_hide "p:V:A" } +gtk_widget_set_halign :: !Pointer !Int !.a -> .a +gtk_widget_set_halign widget align env = code { + ccall gtk_widget_set_halign "pI:V:A" +} + gtk_widget_set_margin_bottom :: !Pointer !Int !.a -> .a gtk_widget_set_margin_bottom widget padding env = code { ccall gtk_widget_set_margin_bottom "pI:V:A" @@ -664,6 +695,11 @@ gtk_widget_set_size_request widget hsize vsize env = code { ccall gtk_widget_set_size_request "pII:V:A" } +gtk_widget_set_valign :: !Pointer !Int !.a -> .a +gtk_widget_set_valign widget align env = code { + ccall gtk_widget_set_valign "pI:V:A" +} + gtk_widget_show :: !Pointer !.a -> .a gtk_widget_show widget env = code { ccall gtk_widget_show "p:V:A" diff --git a/src/Gtk/Tune.dcl b/src/Gtk/Tune.dcl index 61014a8..f5966ec 100644 --- a/src/Gtk/Tune.dcl +++ b/src/Gtk/Tune.dcl @@ -6,10 +6,6 @@ from Gtk.Widgets import :: GtkWidget, class gtkWidget class tune elem option :: !option !elem -> GtkM elem -instance tune elem (oa,ob) | tune elem oa & tune elem ob -instance tune elem (oa,ob,oc) | tune elem oa & tune elem ob & tune elem oc -instance tune elem (oa,ob,oc,od) | tune elem oa & tune elem ob & tune elem oc & tune elem od - (<<@) infixl 2 :: !(GtkM elem) !option -> GtkM elem | tune elem option instance tune w GtkMargins | gtkWidget w diff --git a/src/Gtk/Tune.icl b/src/Gtk/Tune.icl index d04d691..a275ea2 100644 --- a/src/Gtk/Tune.icl +++ b/src/Gtk/Tune.icl @@ -7,18 +7,6 @@ import Control.Monad import Gtk -instance tune elem (oa,ob) | tune elem oa & tune elem ob -where - tune (a,b) elem = tune a elem >>= tune b - -instance tune elem (oa,ob,oc) | tune elem oa & tune elem ob & tune elem oc -where - tune (a,b,c) elem = tune a elem >>= tune b >>= tune c - -instance tune elem (oa,ob,oc,od) | tune elem oa & tune elem ob & tune elem oc & tune elem od -where - tune (a,b,c,d) elem = tune a elem >>= tune b >>= tune c >>= tune d - (<<@) infixl 2 :: !(GtkM elem) !option -> GtkM elem | tune elem option (<<@) elemf option = elemf >>= tune option diff --git a/src/Gtk/Types.dcl b/src/Gtk/Types.dcl index 40bf899..6f141a4 100644 --- a/src/Gtk/Types.dcl +++ b/src/Gtk/Types.dcl @@ -20,6 +20,15 @@ instance toInt GType | GValueReal !Real | GValueString !String +:: GtkAlign + = AlignFill + | AlignStart + | AlignEnd + | AlignCenter + | AlignBaseline + +instance toInt GtkAlign + :: GtkButtonsType = NoButtons | OkButton @@ -67,10 +76,6 @@ instance toInt GtkIconSize instance toInt GtkJustification -:: GtkLabel - = Label !String - | NoLabel - :: GtkMargins = { left :: !Int , top :: !Int @@ -148,12 +153,13 @@ instance toInt GtkScrollbarPolicy instance toInt GtkStylePriority +:: GtkText =: Text String + :: GtkTimeout = Milliseconds !Int | Seconds !Int -:: GtkTitle - = Title !String +:: GtkTitle =: Title String :: GtkWrapMode = WrapNone diff --git a/src/Gtk/Types.icl b/src/Gtk/Types.icl index 7d6e6ac..e7cc233 100644 --- a/src/Gtk/Types.icl +++ b/src/Gtk/Types.icl @@ -14,6 +14,15 @@ where GTypeReal -> 15 GTypeString -> 16 +instance toInt GtkAlign +where + toInt align = case align of + AlignFill -> 0 + AlignStart -> 1 + AlignEnd -> 2 + AlignCenter -> 3 + AlignBaseline -> 4 + instance toInt GtkButtonsType where toInt type = case type of diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl index b0a0448..10de329 100644 --- a/src/Gtk/Widgets.dcl +++ b/src/Gtk/Widgets.dcl @@ -9,11 +9,11 @@ from Gtk.State import :: GtkM from Gtk.Tune import class tune from Gtk.Types import :: GType, :: GValue, - :: GtkButtonsType, :: GtkCSSClass, :: GtkDirection, :: GtkExpand, - :: GtkFileChooserAction, :: GtkLabel, :: GtkMargins, :: GtkMessageType, + :: GtkAlign, :: GtkButtonsType, :: GtkCSSClass, :: GtkDirection, + :: GtkExpand, :: GtkFileChooserAction, :: GtkMargins, :: GtkMessageType, :: GtkModal, :: GtkOrientation, :: GtkPanedHandleWidth, :: GtkResize, :: GtkResponse, :: GtkScrollbarPolicy, :: GtkSensitivity, :: GtkShrink, - :: GtkSpacing, :: GtkStylePriority, :: GtkTitle, :: GtkWrapMode + :: GtkSpacing, :: GtkStylePriority, :: GtkText, :: GtkTitle, :: GtkWrapMode class ptr a where @@ -77,8 +77,20 @@ instance gtkWidget GtkFrame instance gtkContainer GtkFrame instance ptr GtkFrame -newFrame :: !GtkLabel !w -> GtkM GtkFrame | gtkWidget w -framed :: !GtkLabel !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w +newFrame :: !GtkTitle !w -> GtkM GtkFrame | gtkWidget w +framed :: !GtkTitle !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w + +:: GtkGrid +instance gtkWidget GtkGrid + +newGrid :: GtkM GtkGrid +attachGrid :: !GtkGrid !(!Int,!Int) !(!Int,!Int) !w -> GtkM w | gtkWidget w + +:: GtkLabel +instance gtkWidget GtkLabel + +newLabel :: GtkM GtkLabel +instance tune GtkLabel GtkText :: GtkListStore @@ -203,6 +215,7 @@ removeCSSClass :: !GtkCSSClass !w -> GtkM () | gtkWidget w setMargins :: !GtkMargins !w -> GtkM w | gtkWidget w instance tune w GtkSensitivity | gtkWidget w +instance tune w (GtkAlign,GtkAlign) | gtkWidget w :: GtkWindow diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl index 4bf537b..c63eabf 100644 --- a/src/Gtk/Widgets.icl +++ b/src/Gtk/Widgets.icl @@ -148,19 +148,44 @@ where toPtr f = f fromPtr f = f -newFrame :: !GtkLabel !w -> GtkM GtkFrame | gtkWidget w -newFrame label widget = - toStateR (gtk_frame_new (case label of Label l -> Just l; _ -> Nothing)) >>= \frame -> - (case label of - Label _ -> toState (gtk_frame_set_label_align frame 0.02 0.5) - NoLabel -> pure ()) >>| +newFrame :: !GtkTitle !w -> GtkM GtkFrame | gtkWidget w +newFrame (Title title) widget = + toStateR (gtk_frame_new (case title of "" -> Nothing; _ -> Just title)) >>= \frame -> + (case title of + "" -> pure () + _ -> toState (gtk_frame_set_label_align frame 0.02 0.5)) >>| addToContainer frame widget >>| show frame -framed :: !GtkLabel !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w -framed label widgetf = +framed :: !GtkTitle !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w +framed title widgetf = widgetf >>= \widget -> - tuple widget <$> newFrame label widget + tuple widget <$> newFrame title widget + +:: GtkGrid :== Pointer + +instance gtkWidget GtkGrid where gtkWidget g = g + +newGrid :: GtkM GtkGrid +newGrid = toStateR gtk_grid_new >>= show + +attachGrid :: !GtkGrid !(!Int,!Int) !(!Int,!Int) !w -> GtkM w | gtkWidget w +attachGrid grid (left,top) (width,height) widget = + toState (gtk_grid_attach grid (gtkWidget widget) left top width height) >>| + pure widget + +:: GtkLabel :== Pointer + +instance gtkWidget GtkLabel where gtkWidget l = l + +newLabel :: GtkM GtkLabel +newLabel = toStateR gtk_label_new >>= show + +instance tune GtkLabel GtkText +where + tune (Text text) label = + toState (gtk_label_set_markup label text) >>| + pure label :: GtkListStore :== Pointer @@ -392,7 +417,10 @@ where instance gtkWidget GtkTreeView where gtkWidget tv = tv newTreeView :: !GtkListStore -> GtkM GtkTreeView -newTreeView store = toStateR (gtk_tree_view_new_with_model store) >>= show +newTreeView store = + toStateR (gtk_tree_view_new_with_model store) >>= \view -> + toState (g_object_unref store) >>| + show view appendColumnToTreeView :: !String !Int !GtkExpand !GtkTreeView -> GtkM GtkTreeView appendColumnToTreeView title col expand tree_view = @@ -478,6 +506,14 @@ where toState (gtk_widget_set_sensitive (gtkWidget widget) sens=:Sensitive) >>| pure widget +instance tune w (GtkAlign,GtkAlign) | gtkWidget w +where + tune (halign,valign) widget = + let ptr = gtkWidget widget in + toState (gtk_widget_set_halign ptr (toInt halign)) >>| + toState (gtk_widget_set_valign ptr (toInt valign)) >>| + pure widget + :: GtkWindow :== Pointer instance gtkWidget GtkWindow where gtkWidget w = w |