summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Gtk/Widgets.dcl2
-rw-r--r--src/Gtk/Widgets.icl5
-rw-r--r--src/Gtk/Widgets/Sheet.dcl13
-rw-r--r--src/Gtk/Widgets/Sheet.icl24
-rw-r--r--src/Gtk/Widgets/Sheet/Internal.dcl5
-rw-r--r--src/Gtk/Widgets/Sheet/Internal.icl11
6 files changed, 60 insertions, 0 deletions
diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl
index 5b594a3..42f65c1 100644
--- a/src/Gtk/Widgets.dcl
+++ b/src/Gtk/Widgets.dcl
@@ -25,6 +25,7 @@ instance ptr GtkWidget
addCSSClass :: !GtkCSSClass !w -> GtkM () | gtkWidget w
removeCSSClass :: !GtkCSSClass !w -> GtkM () | gtkWidget w
setMargins :: !GtkMargins !w -> GtkM () | gtkWidget w
+show :: !w -> GtkM w | gtkWidget w
:: GtkContainer
@@ -32,6 +33,7 @@ class gtkContainer a :: !a -> GtkContainer
instance gtkWidget GtkContainer
instance gtkContainer GtkContainer
+instance ptr GtkContainer
addToContainer :: !w !c -> GtkM () | gtkWidget w & gtkContainer c
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index 4e2f2c4..0549c88 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -50,6 +50,11 @@ show widget = toState ('I'.gtk_widget_show (gtkWidget widget)) >>| pure widget
instance gtkWidget GtkContainer where gtkWidget c = c
instance gtkContainer GtkContainer where gtkContainer c = c
+instance ptr GtkContainer
+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))
diff --git a/src/Gtk/Widgets/Sheet.dcl b/src/Gtk/Widgets/Sheet.dcl
new file mode 100644
index 0000000..a567276
--- /dev/null
+++ b/src/Gtk/Widgets/Sheet.dcl
@@ -0,0 +1,13 @@
+definition module Gtk.Widgets.Sheet
+
+from Gtk.State import :: State, :: StateT, :: Identity, :: GtkState, :: GtkM
+from Gtk.Widgets import
+ class gtkWidget, :: GtkWidget,
+ class gtkContainer, :: GtkContainer
+
+:: GtkSheet
+
+instance gtkWidget GtkSheet
+instance gtkContainer GtkSheet
+
+newSheet :: !Int !Int !String -> GtkM GtkSheet
diff --git a/src/Gtk/Widgets/Sheet.icl b/src/Gtk/Widgets/Sheet.icl
new file mode 100644
index 0000000..9d8a50c
--- /dev/null
+++ b/src/Gtk/Widgets/Sheet.icl
@@ -0,0 +1,24 @@
+implementation module Gtk.Widgets.Sheet
+
+/**
+ * This module provides support for GtkSheet; a spreadsheet widget. See
+ * https://fpaquet.github.io/gtksheet/ for more details and installation
+ * instructions. Use the 'Gtk with GtkSheet' environment.
+ */
+
+import Control.Monad
+import Control.Monad.Identity
+import Control.Monad.State
+import System._Pointer
+
+import Gtk
+import qualified Gtk.Widgets.Sheet.Internal as I
+
+:: GtkSheet :== Pointer
+
+instance gtkWidget GtkSheet where gtkWidget s = fromPtr s
+instance gtkContainer GtkSheet where gtkContainer s = fromPtr s
+
+newSheet :: !Int !Int !String -> GtkM GtkSheet
+newSheet nrows ncols title =
+ toStateR ('I'.gtk_sheet_new nrows ncols title) >>= show
diff --git a/src/Gtk/Widgets/Sheet/Internal.dcl b/src/Gtk/Widgets/Sheet/Internal.dcl
new file mode 100644
index 0000000..b356f5b
--- /dev/null
+++ b/src/Gtk/Widgets/Sheet/Internal.dcl
@@ -0,0 +1,5 @@
+definition module Gtk.Widgets.Sheet.Internal
+
+from System._Pointer import :: Pointer
+
+gtk_sheet_new :: !Int !Int !String !.a -> (!Pointer, !.a)
diff --git a/src/Gtk/Widgets/Sheet/Internal.icl b/src/Gtk/Widgets/Sheet/Internal.icl
new file mode 100644
index 0000000..e0df1e5
--- /dev/null
+++ b/src/Gtk/Widgets/Sheet/Internal.icl
@@ -0,0 +1,11 @@
+implementation module Gtk.Widgets.Sheet.Internal
+
+import System._Pointer
+
+gtk_sheet_new :: !Int !Int !String !.a -> (!Pointer, !.a)
+gtk_sheet_new rows cols title env = new rows cols (packString title) env
+where
+ new :: !Int !Int !String !.a -> (!Pointer, !.a)
+ new _ _ _ _ = code {
+ ccall gtk_sheet_new "IIs:p:A"
+ }