summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2019-10-21 10:26:13 +0200
committerCamil Staps2019-10-21 10:26:13 +0200
commit4d9b0222942bd11c490d476ae60f3709017b804b (patch)
tree3cd20e0792c42429d786d5f38383d6996241a1a3
parentAdd GtkScrolledWindow (diff)
Add GtkSheet
-rw-r--r--config/Gtk.linux.env17
-rw-r--r--config/GtkSheet.linux.prt51
-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
8 files changed, 128 insertions, 0 deletions
diff --git a/config/Gtk.linux.env b/config/Gtk.linux.env
index 0122ec3..df905cb 100644
--- a/config/Gtk.linux.env
+++ b/config/Gtk.linux.env
@@ -17,3 +17,20 @@ Environments
EnvironmentCompileMethod: Pers
EnvironmentProcessor: I386
Environment64BitProcessor: True
+ Environment
+ EnvironmentName: Gtk with GtkSheet
+ EnvironmentPaths
+ Path: {Application}/lib/StdEnv
+ EnvironmentCompiler: lib/exe/cocl
+ EnvironmentABCOptimise: lib/exe/abcopt
+ EnvironmentByteCodeGen: lib/exe/bcgen
+ EnvironmentByteCodeLink: lib/exe/bclink
+ EnvironmentByteCodeStrip: lib/exe/bcstrip
+ EnvironmentByteCodePrelink: lib/exe/bcprelink
+ EnvironmentCodeGen: lib/exe/cg
+ EnvironmentLinker: /usr/bin/gcc::-Wl,--gc-sections -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-object -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgtksheet-4.0
+ EnvironmentVersion: 920
+ EnvironmentRedirect: False
+ EnvironmentCompileMethod: Pers
+ EnvironmentProcessor: I386
+ Environment64BitProcessor: True
diff --git a/config/GtkSheet.linux.prt b/config/GtkSheet.linux.prt
new file mode 100644
index 0000000..dc645de
--- /dev/null
+++ b/config/GtkSheet.linux.prt
@@ -0,0 +1,51 @@
+Version: 1.5
+Global
+ ProjectRoot: .
+ Target: Gtk with GtkSheet
+ CodeGen
+ CheckStacks: False
+ CheckIndexes: True
+ OptimiseABC: False
+ GenerateByteCode: False
+ Application
+ HeapSize: 2097152
+ StackSize: 512000
+ ExtraMemory: 8192
+ IntialHeapSize: 204800
+ HeapSizeMultiplier: 4096
+ ShowExecutionTime: False
+ ShowGC: False
+ ShowStackSize: False
+ MarkingCollector: False
+ DisableRTSFlags: False
+ StandardRuntimeEnv: True
+ Profile
+ Memory: False
+ MemoryMinimumHeapSize: 0
+ Time: False
+ Stack: False
+ Dynamics: False
+ GenericFusion: False
+ DescExL: False
+ Output
+ Output: ShowConstructors
+ Font: Courier
+ FontSize: 9
+ WriteStdErr: False
+ Link
+ LinkMethod: Static
+ GenerateRelocations: False
+ GenerateSymbolTable: False
+ GenerateLinkMap: False
+ LinkResources: False
+ ResourceSource:
+ GenerateDLL: False
+ ExportedNames:
+ StripByteCode: True
+ KeepByteCodeSymbols: True
+ PrelinkByteCode: True
+ Paths
+ Path: {Application}*lib*Platform
+ Path: {Application}*lib*Gtk
+ Precompile:
+ Postlink:
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"
+ }