summaryrefslogtreecommitdiff
path: root/src/Gtk/Widgets/Sheet.icl
blob: d4625a3abc387fb10f63aca60c81f9c123cb21f5 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
implementation module Gtk.Widgets.Sheet

import StdEnv
import StdMaybe

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_clear sheet row col) >>|
	toState (gtk_sheet_set_cell_text sheet row col text) >>|
	pure sheet

setCSSClassForRange :: !GtkCSSClass !(!Int,!Int) !(!Int,!Int) !GtkSheet -> GtkM GtkSheet
setCSSClassForRange (Class cls) top_left bottom_right sheet =
	toState (gtk_sheet_range_set_css_class sheet top_left bottom_right cls) >>|
	pure sheet

setRangeEditable :: !Bool !(!Int,!Int) !(!Int,!Int) !GtkSheet -> GtkM GtkSheet
setRangeEditable setting top_left bottom_right sheet =
	toState (gtk_sheet_range_set_editable sheet top_left bottom_right setting) >>|
	pure sheet

getActiveCell :: !GtkSheet -> GtkM (Maybe (Int,Int))
getActiveCell sheet =
	toStateR (gtk_sheet_get_active_cell sheet) >>= \cell=:(row,col)
		| row < 0 || col < 0
			-> pure Nothing
			-> pure (Just cell)

setActiveCell :: !Int !Int !GtkSheet -> GtkM GtkSheet
setActiveCell row col sheet =
	toState (gtk_sheet_set_active_cell sheet row col) >>|
	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