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) = unsafeToWidget s instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = unsafeToContainer 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 setRowVisibility :: !Bool !Int !GtkSheet -> GtkM GtkSheet setRowVisibility setting row sheet=:(GtkSheet s) = toState (gtk_sheet_row_set_visibility s row setting) >>| pure sheet isRowVisible :: !Int !GtkSheet -> GtkM Bool isRowVisible row (GtkSheet s) = toStateR (gtk_sheet_row_visible s row) 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 scrollToCell :: !GtkSheetScrollMode !Int !Int !GtkSheet -> GtkM GtkSheet scrollToCell scroll_mode row col sheet=:(GtkSheet s) = toState (gtk_sheet_moveto s row col row_align col_align) >>| pure sheet where (row_align,col_align) = case scroll_mode of CellInTopLeft -> (0,0) CellInTopRight -> (0,1) CellInBottomLeft -> (1,0) CellInBottomRight -> (1,1) getEntry :: !GtkSheet -> GtkM GtkEntry getEntry (GtkSheet s) = toStateR (gtk_sheet_get_entry s) >>= \e -> pure (unsafeToEntry e) 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