summaryrefslogtreecommitdiff
path: root/src/Gtk/Widgets/Sheet.icl
blob: e34a304276ce8192f7c1c4ff54f5eb5f4b4ea2a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
implementation module Gtk.Widgets.Sheet

import StdEnv

import Control.Monad
import System._Pointer

import Gtk
import Gtk.Widgets.Sheet.Internal

:: 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 (gtk_sheet_new nrows ncols title) >>= show

whileFrozen :: !(GtkM a) !GtkSheet -> GtkM a
whileFrozen m sheet =
	toState (gtk_sheet_freeze sheet) >>|
	m >>= \r ->
	toState (gtk_sheet_unfreeze sheet) >>|
	pure r

ensureDimensions :: !Int !Int !GtkSheet -> GtkM GtkSheet
ensureDimensions nrows ncols sheet =
	toStateR (gtk_sheet_get_rows_count sheet) >>= \current_nrows ->
	if (nrows < current_nrows)
		(toState (gtk_sheet_delete_rows sheet nrows (current_nrows-nrows)))
		(toState (gtk_sheet_add_rows sheet (nrows-current_nrows))) >>|
	toStateR (gtk_sheet_get_columns_count sheet) >>= \current_ncols ->
	if (ncols < current_ncols)
		(toState (gtk_sheet_delete_columns sheet ncols (current_ncols-ncols)))
		(toState (gtk_sheet_add_columns sheet (ncols-current_ncols))) >>|
	pure sheet

setColumnTitle :: !Int !String !GtkSheet -> GtkM GtkSheet
setColumnTitle col title sheet =
	toState (gtk_sheet_set_column_title sheet col title) >>|
	pure sheet

setRowTitle :: !Int !String !GtkSheet -> GtkM GtkSheet
setRowTitle row title sheet =
	toState (gtk_sheet_row_button_add_label sheet row title) >>|
	pure sheet

setCellText :: !Int !Int !String !GtkSheet -> GtkM GtkSheet
setCellText row col text sheet =
	toState (gtk_sheet_cell_delete sheet row col) >>|
	toState (gtk_sheet_set_cell_text sheet row col text) >>|
	pure sheet

instance tune GtkSheet GtkSheetColumnResizability
where
	tune setting sheet =
		toState (gtk_sheet_columns_set_resizable sheet setting=:ColumnsResizable) >>|
		pure sheet

instance tune GtkSheet GtkSheetColumnSensitity
where
	tune setting sheet =
		toState (gtk_sheet_columns_set_sensitivity sheet setting=:ColumnsSensitive) >>|
		pure sheet

instance tune GtkSheet GtkSheetRowResizability
where
	tune setting sheet =
		toState (gtk_sheet_rows_set_resizable sheet setting=:RowsResizable) >>|
		pure sheet

instance tune GtkSheet GtkSheetRowSensitity
where
	tune setting sheet =
		toState (gtk_sheet_rows_set_sensitivity sheet setting=:RowsSensitive) >>|
		pure sheet