summaryrefslogtreecommitdiff
path: root/src/Gtk/Widgets/Sheet.icl
blob: f8ecabe0fc011f9bc01f4799922eebfcd1d0df0d (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
implementation module Gtk.Widgets.Sheet

import StdEnv
import StdMaybe

import Control.Monad
import System._Pointer

import Gtk
import Gtk.Widgets.Sheet.Internal

:: GtkSheet =: GtkSheet Pointer

instance gtkWidget GtkSheet    where gtkWidget (GtkSheet s) = GtkWidget s
instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = GtkContainer s

newSheet :: !Int !Int !String -> GtkM GtkSheet
newSheet nrows ncols title =
	toStateR (gtk_sheet_new nrows ncols title) >>= \s ->
	show (GtkSheet s)

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

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

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

setColumnTitles :: ![String] !GtkSheet -> GtkM GtkSheet
setColumnTitles titles sheet =
	sequence_ [setColumnTitle i t sheet \\ i <- [0..] & t <- titles] >>|
	pure sheet

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

setRowTitles :: ![String] !GtkSheet -> GtkM GtkSheet
setRowTitles titles sheet =
	sequence_ [setRowTitle i t sheet \\ i <- [0..] & t <- titles] >>|
	pure sheet

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

getCellText :: !Int !Int !GtkSheet -> GtkM (Maybe String)
getCellText row col (GtkSheet s) = toStateR (gtk_sheet_cell_get_text s row col)

setColumnJustification :: !GtkJustification !Int !GtkSheet -> GtkM GtkSheet
setColumnJustification justification col sheet=:(GtkSheet s) =
	toState (gtk_sheet_column_set_justification s col (toInt justification)) >>|
	pure sheet

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

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

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

setActiveCell :: !Int !Int !GtkSheet -> GtkM GtkSheet
setActiveCell row col sheet=:(GtkSheet s) =
	toState (gtk_sheet_set_active_cell s row col) >>|
	pure sheet

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

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

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

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