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