summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Gtk/Internal.dcl8
-rw-r--r--src/Gtk/Internal.icl36
-rw-r--r--src/Gtk/Tune.dcl4
-rw-r--r--src/Gtk/Tune.icl12
-rw-r--r--src/Gtk/Types.dcl18
-rw-r--r--src/Gtk/Types.icl9
-rw-r--r--src/Gtk/Widgets.dcl23
-rw-r--r--src/Gtk/Widgets.icl56
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