diff options
-rw-r--r-- | config/Gtk.linux.env | 17 | ||||
-rw-r--r-- | config/GtkSheet.linux.prt | 51 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 2 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 5 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet.dcl | 13 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet.icl | 24 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet/Internal.dcl | 5 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet/Internal.icl | 11 |
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" + } |