{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.Gtk.Objects.Calendar
    ( 

-- * Exported types
    Calendar(..)                            ,
    CalendarK                               ,
    toCalendar                              ,
    noCalendar                              ,


 -- * Methods
-- ** calendarClearMarks
    calendarClearMarks                      ,


-- ** calendarGetDate
    calendarGetDate                         ,


-- ** calendarGetDayIsMarked
    calendarGetDayIsMarked                  ,


-- ** calendarGetDetailHeightRows
    calendarGetDetailHeightRows             ,


-- ** calendarGetDetailWidthChars
    calendarGetDetailWidthChars             ,


-- ** calendarGetDisplayOptions
    calendarGetDisplayOptions               ,


-- ** calendarMarkDay
    calendarMarkDay                         ,


-- ** calendarNew
    calendarNew                             ,


-- ** calendarSelectDay
    calendarSelectDay                       ,


-- ** calendarSelectMonth
    calendarSelectMonth                     ,


-- ** calendarSetDetailFunc
    calendarSetDetailFunc                   ,


-- ** calendarSetDetailHeightRows
    calendarSetDetailHeightRows             ,


-- ** calendarSetDetailWidthChars
    calendarSetDetailWidthChars             ,


-- ** calendarSetDisplayOptions
    calendarSetDisplayOptions               ,


-- ** calendarUnmarkDay
    calendarUnmarkDay                       ,




 -- * Properties
-- ** Day
    CalendarDayPropertyInfo                 ,
    constructCalendarDay                    ,
    getCalendarDay                          ,
    setCalendarDay                          ,


-- ** DetailHeightRows
    CalendarDetailHeightRowsPropertyInfo    ,
    constructCalendarDetailHeightRows       ,
    getCalendarDetailHeightRows             ,
    setCalendarDetailHeightRows             ,


-- ** DetailWidthChars
    CalendarDetailWidthCharsPropertyInfo    ,
    constructCalendarDetailWidthChars       ,
    getCalendarDetailWidthChars             ,
    setCalendarDetailWidthChars             ,


-- ** Month
    CalendarMonthPropertyInfo               ,
    constructCalendarMonth                  ,
    getCalendarMonth                        ,
    setCalendarMonth                        ,


-- ** NoMonthChange
    CalendarNoMonthChangePropertyInfo       ,
    constructCalendarNoMonthChange          ,
    getCalendarNoMonthChange                ,
    setCalendarNoMonthChange                ,


-- ** ShowDayNames
    CalendarShowDayNamesPropertyInfo        ,
    constructCalendarShowDayNames           ,
    getCalendarShowDayNames                 ,
    setCalendarShowDayNames                 ,


-- ** ShowDetails
    CalendarShowDetailsPropertyInfo         ,
    constructCalendarShowDetails            ,
    getCalendarShowDetails                  ,
    setCalendarShowDetails                  ,


-- ** ShowHeading
    CalendarShowHeadingPropertyInfo         ,
    constructCalendarShowHeading            ,
    getCalendarShowHeading                  ,
    setCalendarShowHeading                  ,


-- ** ShowWeekNumbers
    CalendarShowWeekNumbersPropertyInfo     ,
    constructCalendarShowWeekNumbers        ,
    getCalendarShowWeekNumbers              ,
    setCalendarShowWeekNumbers              ,


-- ** Year
    CalendarYearPropertyInfo                ,
    constructCalendarYear                   ,
    getCalendarYear                         ,
    setCalendarYear                         ,




 -- * Signals
-- ** DaySelected
    CalendarDaySelectedCallback             ,
    CalendarDaySelectedCallbackC            ,
    CalendarDaySelectedSignalInfo           ,
    afterCalendarDaySelected                ,
    calendarDaySelectedCallbackWrapper      ,
    calendarDaySelectedClosure              ,
    mkCalendarDaySelectedCallback           ,
    noCalendarDaySelectedCallback           ,
    onCalendarDaySelected                   ,


-- ** DaySelectedDoubleClick
    CalendarDaySelectedDoubleClickCallback  ,
    CalendarDaySelectedDoubleClickCallbackC ,
    CalendarDaySelectedDoubleClickSignalInfo,
    afterCalendarDaySelectedDoubleClick     ,
    calendarDaySelectedDoubleClickCallbackWrapper,
    calendarDaySelectedDoubleClickClosure   ,
    mkCalendarDaySelectedDoubleClickCallback,
    noCalendarDaySelectedDoubleClickCallback,
    onCalendarDaySelectedDoubleClick        ,


-- ** MonthChanged
    CalendarMonthChangedCallback            ,
    CalendarMonthChangedCallbackC           ,
    CalendarMonthChangedSignalInfo          ,
    afterCalendarMonthChanged               ,
    calendarMonthChangedCallbackWrapper     ,
    calendarMonthChangedClosure             ,
    mkCalendarMonthChangedCallback          ,
    noCalendarMonthChangedCallback          ,
    onCalendarMonthChanged                  ,


-- ** NextMonth
    CalendarNextMonthCallback               ,
    CalendarNextMonthCallbackC              ,
    CalendarNextMonthSignalInfo             ,
    afterCalendarNextMonth                  ,
    calendarNextMonthCallbackWrapper        ,
    calendarNextMonthClosure                ,
    mkCalendarNextMonthCallback             ,
    noCalendarNextMonthCallback             ,
    onCalendarNextMonth                     ,


-- ** NextYear
    CalendarNextYearCallback                ,
    CalendarNextYearCallbackC               ,
    CalendarNextYearSignalInfo              ,
    afterCalendarNextYear                   ,
    calendarNextYearCallbackWrapper         ,
    calendarNextYearClosure                 ,
    mkCalendarNextYearCallback              ,
    noCalendarNextYearCallback              ,
    onCalendarNextYear                      ,


-- ** PrevMonth
    CalendarPrevMonthCallback               ,
    CalendarPrevMonthCallbackC              ,
    CalendarPrevMonthSignalInfo             ,
    afterCalendarPrevMonth                  ,
    calendarPrevMonthCallbackWrapper        ,
    calendarPrevMonthClosure                ,
    mkCalendarPrevMonthCallback             ,
    noCalendarPrevMonthCallback             ,
    onCalendarPrevMonth                     ,


-- ** PrevYear
    CalendarPrevYearCallback                ,
    CalendarPrevYearCallbackC               ,
    CalendarPrevYearSignalInfo              ,
    afterCalendarPrevYear                   ,
    calendarPrevYearCallbackWrapper         ,
    calendarPrevYearClosure                 ,
    mkCalendarPrevYearCallback              ,
    noCalendarPrevYearCallback              ,
    onCalendarPrevYear                      ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.Atk as Atk
import qualified GI.GLib as GLib
import qualified GI.GObject as GObject

newtype Calendar = Calendar (ForeignPtr Calendar)
foreign import ccall "gtk_calendar_get_type"
    c_gtk_calendar_get_type :: IO GType

type instance ParentTypes Calendar = CalendarParentTypes
type CalendarParentTypes = '[Widget, GObject.Object, Atk.ImplementorIface, Buildable]

instance GObject Calendar where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_calendar_get_type
    

class GObject o => CalendarK o
instance (GObject o, IsDescendantOf Calendar o) => CalendarK o

toCalendar :: CalendarK o => o -> IO Calendar
toCalendar = unsafeCastTo Calendar

noCalendar :: Maybe Calendar
noCalendar = Nothing

-- signal Calendar::day-selected
type CalendarDaySelectedCallback =
    IO ()

noCalendarDaySelectedCallback :: Maybe CalendarDaySelectedCallback
noCalendarDaySelectedCallback = Nothing

type CalendarDaySelectedCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarDaySelectedCallback :: CalendarDaySelectedCallbackC -> IO (FunPtr CalendarDaySelectedCallbackC)

calendarDaySelectedClosure :: CalendarDaySelectedCallback -> IO Closure
calendarDaySelectedClosure cb = newCClosure =<< mkCalendarDaySelectedCallback wrapped
    where wrapped = calendarDaySelectedCallbackWrapper cb

calendarDaySelectedCallbackWrapper ::
    CalendarDaySelectedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarDaySelectedCallbackWrapper _cb _ _ = do
    _cb 

onCalendarDaySelected :: (GObject a, MonadIO m) => a -> CalendarDaySelectedCallback -> m SignalHandlerId
onCalendarDaySelected obj cb = liftIO $ connectCalendarDaySelected obj cb SignalConnectBefore
afterCalendarDaySelected :: (GObject a, MonadIO m) => a -> CalendarDaySelectedCallback -> m SignalHandlerId
afterCalendarDaySelected obj cb = connectCalendarDaySelected obj cb SignalConnectAfter

connectCalendarDaySelected :: (GObject a, MonadIO m) =>
                              a -> CalendarDaySelectedCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarDaySelected obj cb after = liftIO $ do
    cb' <- mkCalendarDaySelectedCallback (calendarDaySelectedCallbackWrapper cb)
    connectSignalFunPtr obj "day-selected" cb' after

-- signal Calendar::day-selected-double-click
type CalendarDaySelectedDoubleClickCallback =
    IO ()

noCalendarDaySelectedDoubleClickCallback :: Maybe CalendarDaySelectedDoubleClickCallback
noCalendarDaySelectedDoubleClickCallback = Nothing

type CalendarDaySelectedDoubleClickCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarDaySelectedDoubleClickCallback :: CalendarDaySelectedDoubleClickCallbackC -> IO (FunPtr CalendarDaySelectedDoubleClickCallbackC)

calendarDaySelectedDoubleClickClosure :: CalendarDaySelectedDoubleClickCallback -> IO Closure
calendarDaySelectedDoubleClickClosure cb = newCClosure =<< mkCalendarDaySelectedDoubleClickCallback wrapped
    where wrapped = calendarDaySelectedDoubleClickCallbackWrapper cb

calendarDaySelectedDoubleClickCallbackWrapper ::
    CalendarDaySelectedDoubleClickCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarDaySelectedDoubleClickCallbackWrapper _cb _ _ = do
    _cb 

onCalendarDaySelectedDoubleClick :: (GObject a, MonadIO m) => a -> CalendarDaySelectedDoubleClickCallback -> m SignalHandlerId
onCalendarDaySelectedDoubleClick obj cb = liftIO $ connectCalendarDaySelectedDoubleClick obj cb SignalConnectBefore
afterCalendarDaySelectedDoubleClick :: (GObject a, MonadIO m) => a -> CalendarDaySelectedDoubleClickCallback -> m SignalHandlerId
afterCalendarDaySelectedDoubleClick obj cb = connectCalendarDaySelectedDoubleClick obj cb SignalConnectAfter

connectCalendarDaySelectedDoubleClick :: (GObject a, MonadIO m) =>
                                         a -> CalendarDaySelectedDoubleClickCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarDaySelectedDoubleClick obj cb after = liftIO $ do
    cb' <- mkCalendarDaySelectedDoubleClickCallback (calendarDaySelectedDoubleClickCallbackWrapper cb)
    connectSignalFunPtr obj "day-selected-double-click" cb' after

-- signal Calendar::month-changed
type CalendarMonthChangedCallback =
    IO ()

noCalendarMonthChangedCallback :: Maybe CalendarMonthChangedCallback
noCalendarMonthChangedCallback = Nothing

type CalendarMonthChangedCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarMonthChangedCallback :: CalendarMonthChangedCallbackC -> IO (FunPtr CalendarMonthChangedCallbackC)

calendarMonthChangedClosure :: CalendarMonthChangedCallback -> IO Closure
calendarMonthChangedClosure cb = newCClosure =<< mkCalendarMonthChangedCallback wrapped
    where wrapped = calendarMonthChangedCallbackWrapper cb

calendarMonthChangedCallbackWrapper ::
    CalendarMonthChangedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarMonthChangedCallbackWrapper _cb _ _ = do
    _cb 

onCalendarMonthChanged :: (GObject a, MonadIO m) => a -> CalendarMonthChangedCallback -> m SignalHandlerId
onCalendarMonthChanged obj cb = liftIO $ connectCalendarMonthChanged obj cb SignalConnectBefore
afterCalendarMonthChanged :: (GObject a, MonadIO m) => a -> CalendarMonthChangedCallback -> m SignalHandlerId
afterCalendarMonthChanged obj cb = connectCalendarMonthChanged obj cb SignalConnectAfter

connectCalendarMonthChanged :: (GObject a, MonadIO m) =>
                               a -> CalendarMonthChangedCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarMonthChanged obj cb after = liftIO $ do
    cb' <- mkCalendarMonthChangedCallback (calendarMonthChangedCallbackWrapper cb)
    connectSignalFunPtr obj "month-changed" cb' after

-- signal Calendar::next-month
type CalendarNextMonthCallback =
    IO ()

noCalendarNextMonthCallback :: Maybe CalendarNextMonthCallback
noCalendarNextMonthCallback = Nothing

type CalendarNextMonthCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarNextMonthCallback :: CalendarNextMonthCallbackC -> IO (FunPtr CalendarNextMonthCallbackC)

calendarNextMonthClosure :: CalendarNextMonthCallback -> IO Closure
calendarNextMonthClosure cb = newCClosure =<< mkCalendarNextMonthCallback wrapped
    where wrapped = calendarNextMonthCallbackWrapper cb

calendarNextMonthCallbackWrapper ::
    CalendarNextMonthCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarNextMonthCallbackWrapper _cb _ _ = do
    _cb 

onCalendarNextMonth :: (GObject a, MonadIO m) => a -> CalendarNextMonthCallback -> m SignalHandlerId
onCalendarNextMonth obj cb = liftIO $ connectCalendarNextMonth obj cb SignalConnectBefore
afterCalendarNextMonth :: (GObject a, MonadIO m) => a -> CalendarNextMonthCallback -> m SignalHandlerId
afterCalendarNextMonth obj cb = connectCalendarNextMonth obj cb SignalConnectAfter

connectCalendarNextMonth :: (GObject a, MonadIO m) =>
                            a -> CalendarNextMonthCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarNextMonth obj cb after = liftIO $ do
    cb' <- mkCalendarNextMonthCallback (calendarNextMonthCallbackWrapper cb)
    connectSignalFunPtr obj "next-month" cb' after

-- signal Calendar::next-year
type CalendarNextYearCallback =
    IO ()

noCalendarNextYearCallback :: Maybe CalendarNextYearCallback
noCalendarNextYearCallback = Nothing

type CalendarNextYearCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarNextYearCallback :: CalendarNextYearCallbackC -> IO (FunPtr CalendarNextYearCallbackC)

calendarNextYearClosure :: CalendarNextYearCallback -> IO Closure
calendarNextYearClosure cb = newCClosure =<< mkCalendarNextYearCallback wrapped
    where wrapped = calendarNextYearCallbackWrapper cb

calendarNextYearCallbackWrapper ::
    CalendarNextYearCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarNextYearCallbackWrapper _cb _ _ = do
    _cb 

onCalendarNextYear :: (GObject a, MonadIO m) => a -> CalendarNextYearCallback -> m SignalHandlerId
onCalendarNextYear obj cb = liftIO $ connectCalendarNextYear obj cb SignalConnectBefore
afterCalendarNextYear :: (GObject a, MonadIO m) => a -> CalendarNextYearCallback -> m SignalHandlerId
afterCalendarNextYear obj cb = connectCalendarNextYear obj cb SignalConnectAfter

connectCalendarNextYear :: (GObject a, MonadIO m) =>
                           a -> CalendarNextYearCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarNextYear obj cb after = liftIO $ do
    cb' <- mkCalendarNextYearCallback (calendarNextYearCallbackWrapper cb)
    connectSignalFunPtr obj "next-year" cb' after

-- signal Calendar::prev-month
type CalendarPrevMonthCallback =
    IO ()

noCalendarPrevMonthCallback :: Maybe CalendarPrevMonthCallback
noCalendarPrevMonthCallback = Nothing

type CalendarPrevMonthCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarPrevMonthCallback :: CalendarPrevMonthCallbackC -> IO (FunPtr CalendarPrevMonthCallbackC)

calendarPrevMonthClosure :: CalendarPrevMonthCallback -> IO Closure
calendarPrevMonthClosure cb = newCClosure =<< mkCalendarPrevMonthCallback wrapped
    where wrapped = calendarPrevMonthCallbackWrapper cb

calendarPrevMonthCallbackWrapper ::
    CalendarPrevMonthCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarPrevMonthCallbackWrapper _cb _ _ = do
    _cb 

onCalendarPrevMonth :: (GObject a, MonadIO m) => a -> CalendarPrevMonthCallback -> m SignalHandlerId
onCalendarPrevMonth obj cb = liftIO $ connectCalendarPrevMonth obj cb SignalConnectBefore
afterCalendarPrevMonth :: (GObject a, MonadIO m) => a -> CalendarPrevMonthCallback -> m SignalHandlerId
afterCalendarPrevMonth obj cb = connectCalendarPrevMonth obj cb SignalConnectAfter

connectCalendarPrevMonth :: (GObject a, MonadIO m) =>
                            a -> CalendarPrevMonthCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarPrevMonth obj cb after = liftIO $ do
    cb' <- mkCalendarPrevMonthCallback (calendarPrevMonthCallbackWrapper cb)
    connectSignalFunPtr obj "prev-month" cb' after

-- signal Calendar::prev-year
type CalendarPrevYearCallback =
    IO ()

noCalendarPrevYearCallback :: Maybe CalendarPrevYearCallback
noCalendarPrevYearCallback = Nothing

type CalendarPrevYearCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCalendarPrevYearCallback :: CalendarPrevYearCallbackC -> IO (FunPtr CalendarPrevYearCallbackC)

calendarPrevYearClosure :: CalendarPrevYearCallback -> IO Closure
calendarPrevYearClosure cb = newCClosure =<< mkCalendarPrevYearCallback wrapped
    where wrapped = calendarPrevYearCallbackWrapper cb

calendarPrevYearCallbackWrapper ::
    CalendarPrevYearCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
calendarPrevYearCallbackWrapper _cb _ _ = do
    _cb 

onCalendarPrevYear :: (GObject a, MonadIO m) => a -> CalendarPrevYearCallback -> m SignalHandlerId
onCalendarPrevYear obj cb = liftIO $ connectCalendarPrevYear obj cb SignalConnectBefore
afterCalendarPrevYear :: (GObject a, MonadIO m) => a -> CalendarPrevYearCallback -> m SignalHandlerId
afterCalendarPrevYear obj cb = connectCalendarPrevYear obj cb SignalConnectAfter

connectCalendarPrevYear :: (GObject a, MonadIO m) =>
                           a -> CalendarPrevYearCallback -> SignalConnectMode -> m SignalHandlerId
connectCalendarPrevYear obj cb after = liftIO $ do
    cb' <- mkCalendarPrevYearCallback (calendarPrevYearCallbackWrapper cb)
    connectSignalFunPtr obj "prev-year" cb' after

-- VVV Prop "day"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarDay :: (MonadIO m, CalendarK o) => o -> m Int32
getCalendarDay obj = liftIO $ getObjectPropertyCInt obj "day"

setCalendarDay :: (MonadIO m, CalendarK o) => o -> Int32 -> m ()
setCalendarDay obj val = liftIO $ setObjectPropertyCInt obj "day" val

constructCalendarDay :: Int32 -> IO ([Char], GValue)
constructCalendarDay val = constructObjectPropertyCInt "day" val

data CalendarDayPropertyInfo
instance AttrInfo CalendarDayPropertyInfo where
    type AttrAllowedOps CalendarDayPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarDayPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CalendarDayPropertyInfo = CalendarK
    type AttrGetType CalendarDayPropertyInfo = Int32
    type AttrLabel CalendarDayPropertyInfo = "Calendar::day"
    attrGet _ = getCalendarDay
    attrSet _ = setCalendarDay
    attrConstruct _ = constructCalendarDay

-- VVV Prop "detail-height-rows"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarDetailHeightRows :: (MonadIO m, CalendarK o) => o -> m Int32
getCalendarDetailHeightRows obj = liftIO $ getObjectPropertyCInt obj "detail-height-rows"

setCalendarDetailHeightRows :: (MonadIO m, CalendarK o) => o -> Int32 -> m ()
setCalendarDetailHeightRows obj val = liftIO $ setObjectPropertyCInt obj "detail-height-rows" val

constructCalendarDetailHeightRows :: Int32 -> IO ([Char], GValue)
constructCalendarDetailHeightRows val = constructObjectPropertyCInt "detail-height-rows" val

data CalendarDetailHeightRowsPropertyInfo
instance AttrInfo CalendarDetailHeightRowsPropertyInfo where
    type AttrAllowedOps CalendarDetailHeightRowsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarDetailHeightRowsPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CalendarDetailHeightRowsPropertyInfo = CalendarK
    type AttrGetType CalendarDetailHeightRowsPropertyInfo = Int32
    type AttrLabel CalendarDetailHeightRowsPropertyInfo = "Calendar::detail-height-rows"
    attrGet _ = getCalendarDetailHeightRows
    attrSet _ = setCalendarDetailHeightRows
    attrConstruct _ = constructCalendarDetailHeightRows

-- VVV Prop "detail-width-chars"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarDetailWidthChars :: (MonadIO m, CalendarK o) => o -> m Int32
getCalendarDetailWidthChars obj = liftIO $ getObjectPropertyCInt obj "detail-width-chars"

setCalendarDetailWidthChars :: (MonadIO m, CalendarK o) => o -> Int32 -> m ()
setCalendarDetailWidthChars obj val = liftIO $ setObjectPropertyCInt obj "detail-width-chars" val

constructCalendarDetailWidthChars :: Int32 -> IO ([Char], GValue)
constructCalendarDetailWidthChars val = constructObjectPropertyCInt "detail-width-chars" val

data CalendarDetailWidthCharsPropertyInfo
instance AttrInfo CalendarDetailWidthCharsPropertyInfo where
    type AttrAllowedOps CalendarDetailWidthCharsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarDetailWidthCharsPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CalendarDetailWidthCharsPropertyInfo = CalendarK
    type AttrGetType CalendarDetailWidthCharsPropertyInfo = Int32
    type AttrLabel CalendarDetailWidthCharsPropertyInfo = "Calendar::detail-width-chars"
    attrGet _ = getCalendarDetailWidthChars
    attrSet _ = setCalendarDetailWidthChars
    attrConstruct _ = constructCalendarDetailWidthChars

-- VVV Prop "month"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarMonth :: (MonadIO m, CalendarK o) => o -> m Int32
getCalendarMonth obj = liftIO $ getObjectPropertyCInt obj "month"

setCalendarMonth :: (MonadIO m, CalendarK o) => o -> Int32 -> m ()
setCalendarMonth obj val = liftIO $ setObjectPropertyCInt obj "month" val

constructCalendarMonth :: Int32 -> IO ([Char], GValue)
constructCalendarMonth val = constructObjectPropertyCInt "month" val

data CalendarMonthPropertyInfo
instance AttrInfo CalendarMonthPropertyInfo where
    type AttrAllowedOps CalendarMonthPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarMonthPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CalendarMonthPropertyInfo = CalendarK
    type AttrGetType CalendarMonthPropertyInfo = Int32
    type AttrLabel CalendarMonthPropertyInfo = "Calendar::month"
    attrGet _ = getCalendarMonth
    attrSet _ = setCalendarMonth
    attrConstruct _ = constructCalendarMonth

-- VVV Prop "no-month-change"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarNoMonthChange :: (MonadIO m, CalendarK o) => o -> m Bool
getCalendarNoMonthChange obj = liftIO $ getObjectPropertyBool obj "no-month-change"

setCalendarNoMonthChange :: (MonadIO m, CalendarK o) => o -> Bool -> m ()
setCalendarNoMonthChange obj val = liftIO $ setObjectPropertyBool obj "no-month-change" val

constructCalendarNoMonthChange :: Bool -> IO ([Char], GValue)
constructCalendarNoMonthChange val = constructObjectPropertyBool "no-month-change" val

data CalendarNoMonthChangePropertyInfo
instance AttrInfo CalendarNoMonthChangePropertyInfo where
    type AttrAllowedOps CalendarNoMonthChangePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarNoMonthChangePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CalendarNoMonthChangePropertyInfo = CalendarK
    type AttrGetType CalendarNoMonthChangePropertyInfo = Bool
    type AttrLabel CalendarNoMonthChangePropertyInfo = "Calendar::no-month-change"
    attrGet _ = getCalendarNoMonthChange
    attrSet _ = setCalendarNoMonthChange
    attrConstruct _ = constructCalendarNoMonthChange

-- VVV Prop "show-day-names"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarShowDayNames :: (MonadIO m, CalendarK o) => o -> m Bool
getCalendarShowDayNames obj = liftIO $ getObjectPropertyBool obj "show-day-names"

setCalendarShowDayNames :: (MonadIO m, CalendarK o) => o -> Bool -> m ()
setCalendarShowDayNames obj val = liftIO $ setObjectPropertyBool obj "show-day-names" val

constructCalendarShowDayNames :: Bool -> IO ([Char], GValue)
constructCalendarShowDayNames val = constructObjectPropertyBool "show-day-names" val

data CalendarShowDayNamesPropertyInfo
instance AttrInfo CalendarShowDayNamesPropertyInfo where
    type AttrAllowedOps CalendarShowDayNamesPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarShowDayNamesPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CalendarShowDayNamesPropertyInfo = CalendarK
    type AttrGetType CalendarShowDayNamesPropertyInfo = Bool
    type AttrLabel CalendarShowDayNamesPropertyInfo = "Calendar::show-day-names"
    attrGet _ = getCalendarShowDayNames
    attrSet _ = setCalendarShowDayNames
    attrConstruct _ = constructCalendarShowDayNames

-- VVV Prop "show-details"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarShowDetails :: (MonadIO m, CalendarK o) => o -> m Bool
getCalendarShowDetails obj = liftIO $ getObjectPropertyBool obj "show-details"

setCalendarShowDetails :: (MonadIO m, CalendarK o) => o -> Bool -> m ()
setCalendarShowDetails obj val = liftIO $ setObjectPropertyBool obj "show-details" val

constructCalendarShowDetails :: Bool -> IO ([Char], GValue)
constructCalendarShowDetails val = constructObjectPropertyBool "show-details" val

data CalendarShowDetailsPropertyInfo
instance AttrInfo CalendarShowDetailsPropertyInfo where
    type AttrAllowedOps CalendarShowDetailsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarShowDetailsPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CalendarShowDetailsPropertyInfo = CalendarK
    type AttrGetType CalendarShowDetailsPropertyInfo = Bool
    type AttrLabel CalendarShowDetailsPropertyInfo = "Calendar::show-details"
    attrGet _ = getCalendarShowDetails
    attrSet _ = setCalendarShowDetails
    attrConstruct _ = constructCalendarShowDetails

-- VVV Prop "show-heading"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarShowHeading :: (MonadIO m, CalendarK o) => o -> m Bool
getCalendarShowHeading obj = liftIO $ getObjectPropertyBool obj "show-heading"

setCalendarShowHeading :: (MonadIO m, CalendarK o) => o -> Bool -> m ()
setCalendarShowHeading obj val = liftIO $ setObjectPropertyBool obj "show-heading" val

constructCalendarShowHeading :: Bool -> IO ([Char], GValue)
constructCalendarShowHeading val = constructObjectPropertyBool "show-heading" val

data CalendarShowHeadingPropertyInfo
instance AttrInfo CalendarShowHeadingPropertyInfo where
    type AttrAllowedOps CalendarShowHeadingPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarShowHeadingPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CalendarShowHeadingPropertyInfo = CalendarK
    type AttrGetType CalendarShowHeadingPropertyInfo = Bool
    type AttrLabel CalendarShowHeadingPropertyInfo = "Calendar::show-heading"
    attrGet _ = getCalendarShowHeading
    attrSet _ = setCalendarShowHeading
    attrConstruct _ = constructCalendarShowHeading

-- VVV Prop "show-week-numbers"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarShowWeekNumbers :: (MonadIO m, CalendarK o) => o -> m Bool
getCalendarShowWeekNumbers obj = liftIO $ getObjectPropertyBool obj "show-week-numbers"

setCalendarShowWeekNumbers :: (MonadIO m, CalendarK o) => o -> Bool -> m ()
setCalendarShowWeekNumbers obj val = liftIO $ setObjectPropertyBool obj "show-week-numbers" val

constructCalendarShowWeekNumbers :: Bool -> IO ([Char], GValue)
constructCalendarShowWeekNumbers val = constructObjectPropertyBool "show-week-numbers" val

data CalendarShowWeekNumbersPropertyInfo
instance AttrInfo CalendarShowWeekNumbersPropertyInfo where
    type AttrAllowedOps CalendarShowWeekNumbersPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarShowWeekNumbersPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CalendarShowWeekNumbersPropertyInfo = CalendarK
    type AttrGetType CalendarShowWeekNumbersPropertyInfo = Bool
    type AttrLabel CalendarShowWeekNumbersPropertyInfo = "Calendar::show-week-numbers"
    attrGet _ = getCalendarShowWeekNumbers
    attrSet _ = setCalendarShowWeekNumbers
    attrConstruct _ = constructCalendarShowWeekNumbers

-- VVV Prop "year"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCalendarYear :: (MonadIO m, CalendarK o) => o -> m Int32
getCalendarYear obj = liftIO $ getObjectPropertyCInt obj "year"

setCalendarYear :: (MonadIO m, CalendarK o) => o -> Int32 -> m ()
setCalendarYear obj val = liftIO $ setObjectPropertyCInt obj "year" val

constructCalendarYear :: Int32 -> IO ([Char], GValue)
constructCalendarYear val = constructObjectPropertyCInt "year" val

data CalendarYearPropertyInfo
instance AttrInfo CalendarYearPropertyInfo where
    type AttrAllowedOps CalendarYearPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CalendarYearPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CalendarYearPropertyInfo = CalendarK
    type AttrGetType CalendarYearPropertyInfo = Int32
    type AttrLabel CalendarYearPropertyInfo = "Calendar::year"
    attrGet _ = getCalendarYear
    attrSet _ = setCalendarYear
    attrConstruct _ = constructCalendarYear

type instance AttributeList Calendar = CalendarAttributeList
type CalendarAttributeList = ('[ '("app-paintable", WidgetAppPaintablePropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("day", CalendarDayPropertyInfo), '("detail-height-rows", CalendarDetailHeightRowsPropertyInfo), '("detail-width-chars", CalendarDetailWidthCharsPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("margin", WidgetMarginPropertyInfo), '("margin-bottom", WidgetMarginBottomPropertyInfo), '("margin-end", WidgetMarginEndPropertyInfo), '("margin-left", WidgetMarginLeftPropertyInfo), '("margin-right", WidgetMarginRightPropertyInfo), '("margin-start", WidgetMarginStartPropertyInfo), '("margin-top", WidgetMarginTopPropertyInfo), '("month", CalendarMonthPropertyInfo), '("name", WidgetNamePropertyInfo), '("no-month-change", CalendarNoMonthChangePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("parent", WidgetParentPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("show-day-names", CalendarShowDayNamesPropertyInfo), '("show-details", CalendarShowDetailsPropertyInfo), '("show-heading", CalendarShowHeadingPropertyInfo), '("show-week-numbers", CalendarShowWeekNumbersPropertyInfo), '("style", WidgetStylePropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo), '("year", CalendarYearPropertyInfo)] :: [(Symbol, *)])

data CalendarDaySelectedSignalInfo
instance SignalInfo CalendarDaySelectedSignalInfo where
    type HaskellCallbackType CalendarDaySelectedSignalInfo = CalendarDaySelectedCallback
    connectSignal _ = connectCalendarDaySelected

data CalendarDaySelectedDoubleClickSignalInfo
instance SignalInfo CalendarDaySelectedDoubleClickSignalInfo where
    type HaskellCallbackType CalendarDaySelectedDoubleClickSignalInfo = CalendarDaySelectedDoubleClickCallback
    connectSignal _ = connectCalendarDaySelectedDoubleClick

data CalendarMonthChangedSignalInfo
instance SignalInfo CalendarMonthChangedSignalInfo where
    type HaskellCallbackType CalendarMonthChangedSignalInfo = CalendarMonthChangedCallback
    connectSignal _ = connectCalendarMonthChanged

data CalendarNextMonthSignalInfo
instance SignalInfo CalendarNextMonthSignalInfo where
    type HaskellCallbackType CalendarNextMonthSignalInfo = CalendarNextMonthCallback
    connectSignal _ = connectCalendarNextMonth

data CalendarNextYearSignalInfo
instance SignalInfo CalendarNextYearSignalInfo where
    type HaskellCallbackType CalendarNextYearSignalInfo = CalendarNextYearCallback
    connectSignal _ = connectCalendarNextYear

data CalendarPrevMonthSignalInfo
instance SignalInfo CalendarPrevMonthSignalInfo where
    type HaskellCallbackType CalendarPrevMonthSignalInfo = CalendarPrevMonthCallback
    connectSignal _ = connectCalendarPrevMonth

data CalendarPrevYearSignalInfo
instance SignalInfo CalendarPrevYearSignalInfo where
    type HaskellCallbackType CalendarPrevYearSignalInfo = CalendarPrevYearCallback
    connectSignal _ = connectCalendarPrevYear

type instance SignalList Calendar = CalendarSignalList
type CalendarSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("day-selected", CalendarDaySelectedSignalInfo), '("day-selected-double-click", CalendarDaySelectedDoubleClickSignalInfo), '("delete-event", WidgetDeleteEventSignalInfo), '("destroy", WidgetDestroySignalInfo), '("destroy-event", WidgetDestroyEventSignalInfo), '("direction-changed", WidgetDirectionChangedSignalInfo), '("drag-begin", WidgetDragBeginSignalInfo), '("drag-data-delete", WidgetDragDataDeleteSignalInfo), '("drag-data-get", WidgetDragDataGetSignalInfo), '("drag-data-received", WidgetDragDataReceivedSignalInfo), '("drag-drop", WidgetDragDropSignalInfo), '("drag-end", WidgetDragEndSignalInfo), '("drag-failed", WidgetDragFailedSignalInfo), '("drag-leave", WidgetDragLeaveSignalInfo), '("drag-motion", WidgetDragMotionSignalInfo), '("draw", WidgetDrawSignalInfo), '("enter-notify-event", WidgetEnterNotifyEventSignalInfo), '("event", WidgetEventSignalInfo), '("event-after", WidgetEventAfterSignalInfo), '("focus", WidgetFocusSignalInfo), '("focus-in-event", WidgetFocusInEventSignalInfo), '("focus-out-event", WidgetFocusOutEventSignalInfo), '("grab-broken-event", WidgetGrabBrokenEventSignalInfo), '("grab-focus", WidgetGrabFocusSignalInfo), '("grab-notify", WidgetGrabNotifySignalInfo), '("hide", WidgetHideSignalInfo), '("hierarchy-changed", WidgetHierarchyChangedSignalInfo), '("key-press-event", WidgetKeyPressEventSignalInfo), '("key-release-event", WidgetKeyReleaseEventSignalInfo), '("keynav-failed", WidgetKeynavFailedSignalInfo), '("leave-notify-event", WidgetLeaveNotifyEventSignalInfo), '("map", WidgetMapSignalInfo), '("map-event", WidgetMapEventSignalInfo), '("mnemonic-activate", WidgetMnemonicActivateSignalInfo), '("month-changed", CalendarMonthChangedSignalInfo), '("motion-notify-event", WidgetMotionNotifyEventSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("next-month", CalendarNextMonthSignalInfo), '("next-year", CalendarNextYearSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("parent-set", WidgetParentSetSignalInfo), '("popup-menu", WidgetPopupMenuSignalInfo), '("prev-month", CalendarPrevMonthSignalInfo), '("prev-year", CalendarPrevYearSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("screen-changed", WidgetScreenChangedSignalInfo), '("scroll-event", WidgetScrollEventSignalInfo), '("selection-clear-event", WidgetSelectionClearEventSignalInfo), '("selection-get", WidgetSelectionGetSignalInfo), '("selection-notify-event", WidgetSelectionNotifyEventSignalInfo), '("selection-received", WidgetSelectionReceivedSignalInfo), '("selection-request-event", WidgetSelectionRequestEventSignalInfo), '("show", WidgetShowSignalInfo), '("show-help", WidgetShowHelpSignalInfo), '("size-allocate", WidgetSizeAllocateSignalInfo), '("state-changed", WidgetStateChangedSignalInfo), '("state-flags-changed", WidgetStateFlagsChangedSignalInfo), '("style-set", WidgetStyleSetSignalInfo), '("style-updated", WidgetStyleUpdatedSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Calendar::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TInterface "Gtk" "Calendar"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_new" gtk_calendar_new :: 
    IO (Ptr Calendar)


calendarNew ::
    (MonadIO m) =>
    m Calendar
calendarNew  = liftIO $ do
    result <- gtk_calendar_new
    checkUnexpectedReturnNULL "gtk_calendar_new" result
    result' <- (newObject Calendar) result
    return result'

-- method Calendar::clear_marks
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_clear_marks" gtk_calendar_clear_marks :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    IO ()


calendarClearMarks ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    m ()
calendarClearMarks _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_clear_marks _obj'
    touchManagedPtr _obj
    return ()

-- method Calendar::get_date
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "year", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything},Arg {argName = "month", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_get_date" gtk_calendar_get_date :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Ptr Word32 ->                           -- year : TBasicType TUInt32
    Ptr Word32 ->                           -- month : TBasicType TUInt32
    Ptr Word32 ->                           -- day : TBasicType TUInt32
    IO ()


calendarGetDate ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    m (Word32,Word32,Word32)
calendarGetDate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    year <- allocMem :: IO (Ptr Word32)
    month <- allocMem :: IO (Ptr Word32)
    day <- allocMem :: IO (Ptr Word32)
    gtk_calendar_get_date _obj' year month day
    year' <- peek year
    month' <- peek month
    day' <- peek day
    touchManagedPtr _obj
    freeMem year
    freeMem month
    freeMem day
    return (year', month', day')

-- method Calendar::get_day_is_marked
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_get_day_is_marked" gtk_calendar_get_day_is_marked :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Word32 ->                               -- day : TBasicType TUInt32
    IO CInt


calendarGetDayIsMarked ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- day
    m Bool
calendarGetDayIsMarked _obj day = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_calendar_get_day_is_marked _obj' day
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method Calendar::get_detail_height_rows
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_get_detail_height_rows" gtk_calendar_get_detail_height_rows :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    IO Int32


calendarGetDetailHeightRows ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    m Int32
calendarGetDetailHeightRows _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_calendar_get_detail_height_rows _obj'
    touchManagedPtr _obj
    return result

-- method Calendar::get_detail_width_chars
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_get_detail_width_chars" gtk_calendar_get_detail_width_chars :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    IO Int32


calendarGetDetailWidthChars ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    m Int32
calendarGetDetailWidthChars _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_calendar_get_detail_width_chars _obj'
    touchManagedPtr _obj
    return result

-- method Calendar::get_display_options
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "CalendarDisplayOptions"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_get_display_options" gtk_calendar_get_display_options :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    IO CUInt


calendarGetDisplayOptions ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    m [CalendarDisplayOptions]
calendarGetDisplayOptions _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_calendar_get_display_options _obj'
    let result' = wordToGFlags result
    touchManagedPtr _obj
    return result'

-- method Calendar::mark_day
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_mark_day" gtk_calendar_mark_day :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Word32 ->                               -- day : TBasicType TUInt32
    IO ()


calendarMarkDay ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- day
    m ()
calendarMarkDay _obj day = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_mark_day _obj' day
    touchManagedPtr _obj
    return ()

-- method Calendar::select_day
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_select_day" gtk_calendar_select_day :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Word32 ->                               -- day : TBasicType TUInt32
    IO ()


calendarSelectDay ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- day
    m ()
calendarSelectDay _obj day = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_select_day _obj' day
    touchManagedPtr _obj
    return ()

-- method Calendar::select_month
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "month", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "year", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "month", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "year", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_select_month" gtk_calendar_select_month :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Word32 ->                               -- month : TBasicType TUInt32
    Word32 ->                               -- year : TBasicType TUInt32
    IO ()


calendarSelectMonth ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- month
    Word32 ->                               -- year
    m ()
calendarSelectMonth _obj month year = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_select_month _obj' month year
    touchManagedPtr _obj
    return ()

-- method Calendar::set_detail_func
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "CalendarDetailFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, transfer = TransferNothing},Arg {argName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "destroy", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "CalendarDetailFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_set_detail_func" gtk_calendar_set_detail_func :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    FunPtr CalendarDetailFuncC ->           -- func : TInterface "Gtk" "CalendarDetailFunc"
    Ptr () ->                               -- data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- destroy : TInterface "GLib" "DestroyNotify"
    IO ()


calendarSetDetailFunc ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    CalendarDetailFunc ->                   -- func
    m ()
calendarSetDetailFunc _obj func = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    func' <- mkCalendarDetailFunc (calendarDetailFuncWrapper Nothing func)
    let data_ = castFunPtrToPtr func'
    let destroy = safeFreeFunPtrPtr
    gtk_calendar_set_detail_func _obj' func' data_ destroy
    touchManagedPtr _obj
    return ()

-- method Calendar::set_detail_height_rows
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "rows", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "rows", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_set_detail_height_rows" gtk_calendar_set_detail_height_rows :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Int32 ->                                -- rows : TBasicType TInt32
    IO ()


calendarSetDetailHeightRows ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- rows
    m ()
calendarSetDetailHeightRows _obj rows = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_set_detail_height_rows _obj' rows
    touchManagedPtr _obj
    return ()

-- method Calendar::set_detail_width_chars
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "chars", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "chars", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_set_detail_width_chars" gtk_calendar_set_detail_width_chars :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Int32 ->                                -- chars : TBasicType TInt32
    IO ()


calendarSetDetailWidthChars ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- chars
    m ()
calendarSetDetailWidthChars _obj chars = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_set_detail_width_chars _obj' chars
    touchManagedPtr _obj
    return ()

-- method Calendar::set_display_options
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "Gtk" "CalendarDisplayOptions", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "Gtk" "CalendarDisplayOptions", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_set_display_options" gtk_calendar_set_display_options :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    CUInt ->                                -- flags : TInterface "Gtk" "CalendarDisplayOptions"
    IO ()


calendarSetDisplayOptions ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    [CalendarDisplayOptions] ->             -- flags
    m ()
calendarSetDisplayOptions _obj flags = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let flags' = gflagsToWord flags
    gtk_calendar_set_display_options _obj' flags'
    touchManagedPtr _obj
    return ()

-- method Calendar::unmark_day
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Calendar", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "day", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_calendar_unmark_day" gtk_calendar_unmark_day :: 
    Ptr Calendar ->                         -- _obj : TInterface "Gtk" "Calendar"
    Word32 ->                               -- day : TBasicType TUInt32
    IO ()


calendarUnmarkDay ::
    (MonadIO m, CalendarK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- day
    m ()
calendarUnmarkDay _obj day = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_calendar_unmark_day _obj' day
    touchManagedPtr _obj
    return ()