{- |
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.SpinButton
    ( 

-- * Exported types
    SpinButton(..)                          ,
    SpinButtonK                             ,
    toSpinButton                            ,
    noSpinButton                            ,


 -- * Methods
-- ** spinButtonConfigure
    spinButtonConfigure                     ,


-- ** spinButtonGetAdjustment
    spinButtonGetAdjustment                 ,


-- ** spinButtonGetDigits
    spinButtonGetDigits                     ,


-- ** spinButtonGetIncrements
    spinButtonGetIncrements                 ,


-- ** spinButtonGetNumeric
    spinButtonGetNumeric                    ,


-- ** spinButtonGetRange
    spinButtonGetRange                      ,


-- ** spinButtonGetSnapToTicks
    spinButtonGetSnapToTicks                ,


-- ** spinButtonGetUpdatePolicy
    spinButtonGetUpdatePolicy               ,


-- ** spinButtonGetValue
    spinButtonGetValue                      ,


-- ** spinButtonGetValueAsInt
    spinButtonGetValueAsInt                 ,


-- ** spinButtonGetWrap
    spinButtonGetWrap                       ,


-- ** spinButtonNew
    spinButtonNew                           ,


-- ** spinButtonNewWithRange
    spinButtonNewWithRange                  ,


-- ** spinButtonSetAdjustment
    spinButtonSetAdjustment                 ,


-- ** spinButtonSetDigits
    spinButtonSetDigits                     ,


-- ** spinButtonSetIncrements
    spinButtonSetIncrements                 ,


-- ** spinButtonSetNumeric
    spinButtonSetNumeric                    ,


-- ** spinButtonSetRange
    spinButtonSetRange                      ,


-- ** spinButtonSetSnapToTicks
    spinButtonSetSnapToTicks                ,


-- ** spinButtonSetUpdatePolicy
    spinButtonSetUpdatePolicy               ,


-- ** spinButtonSetValue
    spinButtonSetValue                      ,


-- ** spinButtonSetWrap
    spinButtonSetWrap                       ,


-- ** spinButtonSpin
    spinButtonSpin                          ,


-- ** spinButtonUpdate
    spinButtonUpdate                        ,




 -- * Properties
-- ** Adjustment
    SpinButtonAdjustmentPropertyInfo        ,
    constructSpinButtonAdjustment           ,
    getSpinButtonAdjustment                 ,
    setSpinButtonAdjustment                 ,


-- ** ClimbRate
    SpinButtonClimbRatePropertyInfo         ,
    constructSpinButtonClimbRate            ,
    getSpinButtonClimbRate                  ,
    setSpinButtonClimbRate                  ,


-- ** Digits
    SpinButtonDigitsPropertyInfo            ,
    constructSpinButtonDigits               ,
    getSpinButtonDigits                     ,
    setSpinButtonDigits                     ,


-- ** Numeric
    SpinButtonNumericPropertyInfo           ,
    constructSpinButtonNumeric              ,
    getSpinButtonNumeric                    ,
    setSpinButtonNumeric                    ,


-- ** SnapToTicks
    SpinButtonSnapToTicksPropertyInfo       ,
    constructSpinButtonSnapToTicks          ,
    getSpinButtonSnapToTicks                ,
    setSpinButtonSnapToTicks                ,


-- ** UpdatePolicy
    SpinButtonUpdatePolicyPropertyInfo      ,
    constructSpinButtonUpdatePolicy         ,
    getSpinButtonUpdatePolicy               ,
    setSpinButtonUpdatePolicy               ,


-- ** Value
    SpinButtonValuePropertyInfo             ,
    constructSpinButtonValue                ,
    getSpinButtonValue                      ,
    setSpinButtonValue                      ,


-- ** Wrap
    SpinButtonWrapPropertyInfo              ,
    constructSpinButtonWrap                 ,
    getSpinButtonWrap                       ,
    setSpinButtonWrap                       ,




 -- * Signals
-- ** ChangeValue
    SpinButtonChangeValueCallback           ,
    SpinButtonChangeValueCallbackC          ,
    SpinButtonChangeValueSignalInfo         ,
    afterSpinButtonChangeValue              ,
    mkSpinButtonChangeValueCallback         ,
    noSpinButtonChangeValueCallback         ,
    onSpinButtonChangeValue                 ,
    spinButtonChangeValueCallbackWrapper    ,
    spinButtonChangeValueClosure            ,


-- ** Input
    SpinButtonInputCallback                 ,
    SpinButtonInputCallbackC                ,
    SpinButtonInputSignalInfo               ,
    afterSpinButtonInput                    ,
    mkSpinButtonInputCallback               ,
    noSpinButtonInputCallback               ,
    onSpinButtonInput                       ,
    spinButtonInputCallbackWrapper          ,
    spinButtonInputClosure                  ,


-- ** Output
    SpinButtonOutputCallback                ,
    SpinButtonOutputCallbackC               ,
    SpinButtonOutputSignalInfo              ,
    afterSpinButtonOutput                   ,
    mkSpinButtonOutputCallback              ,
    noSpinButtonOutputCallback              ,
    onSpinButtonOutput                      ,
    spinButtonOutputCallbackWrapper         ,
    spinButtonOutputClosure                 ,


-- ** ValueChanged
    SpinButtonValueChangedCallback          ,
    SpinButtonValueChangedCallbackC         ,
    SpinButtonValueChangedSignalInfo        ,
    afterSpinButtonValueChanged             ,
    mkSpinButtonValueChangedCallback        ,
    noSpinButtonValueChangedCallback        ,
    onSpinButtonValueChanged                ,
    spinButtonValueChangedCallbackWrapper   ,
    spinButtonValueChangedClosure           ,


-- ** Wrapped
    SpinButtonWrappedCallback               ,
    SpinButtonWrappedCallbackC              ,
    SpinButtonWrappedSignalInfo             ,
    afterSpinButtonWrapped                  ,
    mkSpinButtonWrappedCallback             ,
    noSpinButtonWrappedCallback             ,
    onSpinButtonWrapped                     ,
    spinButtonWrappedCallbackWrapper        ,
    spinButtonWrappedClosure                ,




    ) 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.GObject as GObject

newtype SpinButton = SpinButton (ForeignPtr SpinButton)
foreign import ccall "gtk_spin_button_get_type"
    c_gtk_spin_button_get_type :: IO GType

type instance ParentTypes SpinButton = SpinButtonParentTypes
type SpinButtonParentTypes = '[Entry, Widget, GObject.Object, Atk.ImplementorIface, Buildable, CellEditable, Editable, Orientable]

instance GObject SpinButton where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_spin_button_get_type
    

class GObject o => SpinButtonK o
instance (GObject o, IsDescendantOf SpinButton o) => SpinButtonK o

toSpinButton :: SpinButtonK o => o -> IO SpinButton
toSpinButton = unsafeCastTo SpinButton

noSpinButton :: Maybe SpinButton
noSpinButton = Nothing

-- signal SpinButton::change-value
type SpinButtonChangeValueCallback =
    ScrollType ->
    IO ()

noSpinButtonChangeValueCallback :: Maybe SpinButtonChangeValueCallback
noSpinButtonChangeValueCallback = Nothing

type SpinButtonChangeValueCallbackC =
    Ptr () ->                               -- object
    CUInt ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkSpinButtonChangeValueCallback :: SpinButtonChangeValueCallbackC -> IO (FunPtr SpinButtonChangeValueCallbackC)

spinButtonChangeValueClosure :: SpinButtonChangeValueCallback -> IO Closure
spinButtonChangeValueClosure cb = newCClosure =<< mkSpinButtonChangeValueCallback wrapped
    where wrapped = spinButtonChangeValueCallbackWrapper cb

spinButtonChangeValueCallbackWrapper ::
    SpinButtonChangeValueCallback ->
    Ptr () ->
    CUInt ->
    Ptr () ->
    IO ()
spinButtonChangeValueCallbackWrapper _cb _ scroll _ = do
    let scroll' = (toEnum . fromIntegral) scroll
    _cb  scroll'

onSpinButtonChangeValue :: (GObject a, MonadIO m) => a -> SpinButtonChangeValueCallback -> m SignalHandlerId
onSpinButtonChangeValue obj cb = liftIO $ connectSpinButtonChangeValue obj cb SignalConnectBefore
afterSpinButtonChangeValue :: (GObject a, MonadIO m) => a -> SpinButtonChangeValueCallback -> m SignalHandlerId
afterSpinButtonChangeValue obj cb = connectSpinButtonChangeValue obj cb SignalConnectAfter

connectSpinButtonChangeValue :: (GObject a, MonadIO m) =>
                                a -> SpinButtonChangeValueCallback -> SignalConnectMode -> m SignalHandlerId
connectSpinButtonChangeValue obj cb after = liftIO $ do
    cb' <- mkSpinButtonChangeValueCallback (spinButtonChangeValueCallbackWrapper cb)
    connectSignalFunPtr obj "change-value" cb' after

-- signal SpinButton::input
type SpinButtonInputCallback =
    IO (Int32,Double)

noSpinButtonInputCallback :: Maybe SpinButtonInputCallback
noSpinButtonInputCallback = Nothing

type SpinButtonInputCallbackC =
    Ptr () ->                               -- object
    Ptr CDouble ->
    Ptr () ->                               -- user_data
    IO Int32

foreign import ccall "wrapper"
    mkSpinButtonInputCallback :: SpinButtonInputCallbackC -> IO (FunPtr SpinButtonInputCallbackC)

spinButtonInputClosure :: SpinButtonInputCallback -> IO Closure
spinButtonInputClosure cb = newCClosure =<< mkSpinButtonInputCallback wrapped
    where wrapped = spinButtonInputCallbackWrapper cb

spinButtonInputCallbackWrapper ::
    SpinButtonInputCallback ->
    Ptr () ->
    Ptr CDouble ->
    Ptr () ->
    IO Int32
spinButtonInputCallbackWrapper _cb _ new_value _ = do
    (result, outnew_value) <- _cb 
    let outnew_value' = realToFrac outnew_value
    poke new_value outnew_value'
    return result

onSpinButtonInput :: (GObject a, MonadIO m) => a -> SpinButtonInputCallback -> m SignalHandlerId
onSpinButtonInput obj cb = liftIO $ connectSpinButtonInput obj cb SignalConnectBefore
afterSpinButtonInput :: (GObject a, MonadIO m) => a -> SpinButtonInputCallback -> m SignalHandlerId
afterSpinButtonInput obj cb = connectSpinButtonInput obj cb SignalConnectAfter

connectSpinButtonInput :: (GObject a, MonadIO m) =>
                          a -> SpinButtonInputCallback -> SignalConnectMode -> m SignalHandlerId
connectSpinButtonInput obj cb after = liftIO $ do
    cb' <- mkSpinButtonInputCallback (spinButtonInputCallbackWrapper cb)
    connectSignalFunPtr obj "input" cb' after

-- signal SpinButton::output
type SpinButtonOutputCallback =
    IO Bool

noSpinButtonOutputCallback :: Maybe SpinButtonOutputCallback
noSpinButtonOutputCallback = Nothing

type SpinButtonOutputCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO CInt

foreign import ccall "wrapper"
    mkSpinButtonOutputCallback :: SpinButtonOutputCallbackC -> IO (FunPtr SpinButtonOutputCallbackC)

spinButtonOutputClosure :: SpinButtonOutputCallback -> IO Closure
spinButtonOutputClosure cb = newCClosure =<< mkSpinButtonOutputCallback wrapped
    where wrapped = spinButtonOutputCallbackWrapper cb

spinButtonOutputCallbackWrapper ::
    SpinButtonOutputCallback ->
    Ptr () ->
    Ptr () ->
    IO CInt
spinButtonOutputCallbackWrapper _cb _ _ = do
    result <- _cb 
    let result' = (fromIntegral . fromEnum) result
    return result'

onSpinButtonOutput :: (GObject a, MonadIO m) => a -> SpinButtonOutputCallback -> m SignalHandlerId
onSpinButtonOutput obj cb = liftIO $ connectSpinButtonOutput obj cb SignalConnectBefore
afterSpinButtonOutput :: (GObject a, MonadIO m) => a -> SpinButtonOutputCallback -> m SignalHandlerId
afterSpinButtonOutput obj cb = connectSpinButtonOutput obj cb SignalConnectAfter

connectSpinButtonOutput :: (GObject a, MonadIO m) =>
                           a -> SpinButtonOutputCallback -> SignalConnectMode -> m SignalHandlerId
connectSpinButtonOutput obj cb after = liftIO $ do
    cb' <- mkSpinButtonOutputCallback (spinButtonOutputCallbackWrapper cb)
    connectSignalFunPtr obj "output" cb' after

-- signal SpinButton::value-changed
type SpinButtonValueChangedCallback =
    IO ()

noSpinButtonValueChangedCallback :: Maybe SpinButtonValueChangedCallback
noSpinButtonValueChangedCallback = Nothing

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

foreign import ccall "wrapper"
    mkSpinButtonValueChangedCallback :: SpinButtonValueChangedCallbackC -> IO (FunPtr SpinButtonValueChangedCallbackC)

spinButtonValueChangedClosure :: SpinButtonValueChangedCallback -> IO Closure
spinButtonValueChangedClosure cb = newCClosure =<< mkSpinButtonValueChangedCallback wrapped
    where wrapped = spinButtonValueChangedCallbackWrapper cb

spinButtonValueChangedCallbackWrapper ::
    SpinButtonValueChangedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
spinButtonValueChangedCallbackWrapper _cb _ _ = do
    _cb 

onSpinButtonValueChanged :: (GObject a, MonadIO m) => a -> SpinButtonValueChangedCallback -> m SignalHandlerId
onSpinButtonValueChanged obj cb = liftIO $ connectSpinButtonValueChanged obj cb SignalConnectBefore
afterSpinButtonValueChanged :: (GObject a, MonadIO m) => a -> SpinButtonValueChangedCallback -> m SignalHandlerId
afterSpinButtonValueChanged obj cb = connectSpinButtonValueChanged obj cb SignalConnectAfter

connectSpinButtonValueChanged :: (GObject a, MonadIO m) =>
                                 a -> SpinButtonValueChangedCallback -> SignalConnectMode -> m SignalHandlerId
connectSpinButtonValueChanged obj cb after = liftIO $ do
    cb' <- mkSpinButtonValueChangedCallback (spinButtonValueChangedCallbackWrapper cb)
    connectSignalFunPtr obj "value-changed" cb' after

-- signal SpinButton::wrapped
type SpinButtonWrappedCallback =
    IO ()

noSpinButtonWrappedCallback :: Maybe SpinButtonWrappedCallback
noSpinButtonWrappedCallback = Nothing

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

foreign import ccall "wrapper"
    mkSpinButtonWrappedCallback :: SpinButtonWrappedCallbackC -> IO (FunPtr SpinButtonWrappedCallbackC)

spinButtonWrappedClosure :: SpinButtonWrappedCallback -> IO Closure
spinButtonWrappedClosure cb = newCClosure =<< mkSpinButtonWrappedCallback wrapped
    where wrapped = spinButtonWrappedCallbackWrapper cb

spinButtonWrappedCallbackWrapper ::
    SpinButtonWrappedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
spinButtonWrappedCallbackWrapper _cb _ _ = do
    _cb 

onSpinButtonWrapped :: (GObject a, MonadIO m) => a -> SpinButtonWrappedCallback -> m SignalHandlerId
onSpinButtonWrapped obj cb = liftIO $ connectSpinButtonWrapped obj cb SignalConnectBefore
afterSpinButtonWrapped :: (GObject a, MonadIO m) => a -> SpinButtonWrappedCallback -> m SignalHandlerId
afterSpinButtonWrapped obj cb = connectSpinButtonWrapped obj cb SignalConnectAfter

connectSpinButtonWrapped :: (GObject a, MonadIO m) =>
                            a -> SpinButtonWrappedCallback -> SignalConnectMode -> m SignalHandlerId
connectSpinButtonWrapped obj cb after = liftIO $ do
    cb' <- mkSpinButtonWrappedCallback (spinButtonWrappedCallbackWrapper cb)
    connectSignalFunPtr obj "wrapped" cb' after

-- VVV Prop "adjustment"
   -- Type: TInterface "Gtk" "Adjustment"
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonAdjustment :: (MonadIO m, SpinButtonK o) => o -> m Adjustment
getSpinButtonAdjustment obj = liftIO $ getObjectPropertyObject obj "adjustment" Adjustment

setSpinButtonAdjustment :: (MonadIO m, SpinButtonK o, AdjustmentK a) => o -> a -> m ()
setSpinButtonAdjustment obj val = liftIO $ setObjectPropertyObject obj "adjustment" val

constructSpinButtonAdjustment :: (AdjustmentK a) => a -> IO ([Char], GValue)
constructSpinButtonAdjustment val = constructObjectPropertyObject "adjustment" val

data SpinButtonAdjustmentPropertyInfo
instance AttrInfo SpinButtonAdjustmentPropertyInfo where
    type AttrAllowedOps SpinButtonAdjustmentPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonAdjustmentPropertyInfo = AdjustmentK
    type AttrBaseTypeConstraint SpinButtonAdjustmentPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonAdjustmentPropertyInfo = Adjustment
    type AttrLabel SpinButtonAdjustmentPropertyInfo = "SpinButton::adjustment"
    attrGet _ = getSpinButtonAdjustment
    attrSet _ = setSpinButtonAdjustment
    attrConstruct _ = constructSpinButtonAdjustment

-- VVV Prop "climb-rate"
   -- Type: TBasicType TDouble
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonClimbRate :: (MonadIO m, SpinButtonK o) => o -> m Double
getSpinButtonClimbRate obj = liftIO $ getObjectPropertyDouble obj "climb-rate"

setSpinButtonClimbRate :: (MonadIO m, SpinButtonK o) => o -> Double -> m ()
setSpinButtonClimbRate obj val = liftIO $ setObjectPropertyDouble obj "climb-rate" val

constructSpinButtonClimbRate :: Double -> IO ([Char], GValue)
constructSpinButtonClimbRate val = constructObjectPropertyDouble "climb-rate" val

data SpinButtonClimbRatePropertyInfo
instance AttrInfo SpinButtonClimbRatePropertyInfo where
    type AttrAllowedOps SpinButtonClimbRatePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonClimbRatePropertyInfo = (~) Double
    type AttrBaseTypeConstraint SpinButtonClimbRatePropertyInfo = SpinButtonK
    type AttrGetType SpinButtonClimbRatePropertyInfo = Double
    type AttrLabel SpinButtonClimbRatePropertyInfo = "SpinButton::climb-rate"
    attrGet _ = getSpinButtonClimbRate
    attrSet _ = setSpinButtonClimbRate
    attrConstruct _ = constructSpinButtonClimbRate

-- VVV Prop "digits"
   -- Type: TBasicType TUInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonDigits :: (MonadIO m, SpinButtonK o) => o -> m Word32
getSpinButtonDigits obj = liftIO $ getObjectPropertyCUInt obj "digits"

setSpinButtonDigits :: (MonadIO m, SpinButtonK o) => o -> Word32 -> m ()
setSpinButtonDigits obj val = liftIO $ setObjectPropertyCUInt obj "digits" val

constructSpinButtonDigits :: Word32 -> IO ([Char], GValue)
constructSpinButtonDigits val = constructObjectPropertyCUInt "digits" val

data SpinButtonDigitsPropertyInfo
instance AttrInfo SpinButtonDigitsPropertyInfo where
    type AttrAllowedOps SpinButtonDigitsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonDigitsPropertyInfo = (~) Word32
    type AttrBaseTypeConstraint SpinButtonDigitsPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonDigitsPropertyInfo = Word32
    type AttrLabel SpinButtonDigitsPropertyInfo = "SpinButton::digits"
    attrGet _ = getSpinButtonDigits
    attrSet _ = setSpinButtonDigits
    attrConstruct _ = constructSpinButtonDigits

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

getSpinButtonNumeric :: (MonadIO m, SpinButtonK o) => o -> m Bool
getSpinButtonNumeric obj = liftIO $ getObjectPropertyBool obj "numeric"

setSpinButtonNumeric :: (MonadIO m, SpinButtonK o) => o -> Bool -> m ()
setSpinButtonNumeric obj val = liftIO $ setObjectPropertyBool obj "numeric" val

constructSpinButtonNumeric :: Bool -> IO ([Char], GValue)
constructSpinButtonNumeric val = constructObjectPropertyBool "numeric" val

data SpinButtonNumericPropertyInfo
instance AttrInfo SpinButtonNumericPropertyInfo where
    type AttrAllowedOps SpinButtonNumericPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonNumericPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint SpinButtonNumericPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonNumericPropertyInfo = Bool
    type AttrLabel SpinButtonNumericPropertyInfo = "SpinButton::numeric"
    attrGet _ = getSpinButtonNumeric
    attrSet _ = setSpinButtonNumeric
    attrConstruct _ = constructSpinButtonNumeric

-- VVV Prop "snap-to-ticks"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonSnapToTicks :: (MonadIO m, SpinButtonK o) => o -> m Bool
getSpinButtonSnapToTicks obj = liftIO $ getObjectPropertyBool obj "snap-to-ticks"

setSpinButtonSnapToTicks :: (MonadIO m, SpinButtonK o) => o -> Bool -> m ()
setSpinButtonSnapToTicks obj val = liftIO $ setObjectPropertyBool obj "snap-to-ticks" val

constructSpinButtonSnapToTicks :: Bool -> IO ([Char], GValue)
constructSpinButtonSnapToTicks val = constructObjectPropertyBool "snap-to-ticks" val

data SpinButtonSnapToTicksPropertyInfo
instance AttrInfo SpinButtonSnapToTicksPropertyInfo where
    type AttrAllowedOps SpinButtonSnapToTicksPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonSnapToTicksPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint SpinButtonSnapToTicksPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonSnapToTicksPropertyInfo = Bool
    type AttrLabel SpinButtonSnapToTicksPropertyInfo = "SpinButton::snap-to-ticks"
    attrGet _ = getSpinButtonSnapToTicks
    attrSet _ = setSpinButtonSnapToTicks
    attrConstruct _ = constructSpinButtonSnapToTicks

-- VVV Prop "update-policy"
   -- Type: TInterface "Gtk" "SpinButtonUpdatePolicy"
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonUpdatePolicy :: (MonadIO m, SpinButtonK o) => o -> m SpinButtonUpdatePolicy
getSpinButtonUpdatePolicy obj = liftIO $ getObjectPropertyEnum obj "update-policy"

setSpinButtonUpdatePolicy :: (MonadIO m, SpinButtonK o) => o -> SpinButtonUpdatePolicy -> m ()
setSpinButtonUpdatePolicy obj val = liftIO $ setObjectPropertyEnum obj "update-policy" val

constructSpinButtonUpdatePolicy :: SpinButtonUpdatePolicy -> IO ([Char], GValue)
constructSpinButtonUpdatePolicy val = constructObjectPropertyEnum "update-policy" val

data SpinButtonUpdatePolicyPropertyInfo
instance AttrInfo SpinButtonUpdatePolicyPropertyInfo where
    type AttrAllowedOps SpinButtonUpdatePolicyPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonUpdatePolicyPropertyInfo = (~) SpinButtonUpdatePolicy
    type AttrBaseTypeConstraint SpinButtonUpdatePolicyPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonUpdatePolicyPropertyInfo = SpinButtonUpdatePolicy
    type AttrLabel SpinButtonUpdatePolicyPropertyInfo = "SpinButton::update-policy"
    attrGet _ = getSpinButtonUpdatePolicy
    attrSet _ = setSpinButtonUpdatePolicy
    attrConstruct _ = constructSpinButtonUpdatePolicy

-- VVV Prop "value"
   -- Type: TBasicType TDouble
   -- Flags: [PropertyReadable,PropertyWritable]

getSpinButtonValue :: (MonadIO m, SpinButtonK o) => o -> m Double
getSpinButtonValue obj = liftIO $ getObjectPropertyDouble obj "value"

setSpinButtonValue :: (MonadIO m, SpinButtonK o) => o -> Double -> m ()
setSpinButtonValue obj val = liftIO $ setObjectPropertyDouble obj "value" val

constructSpinButtonValue :: Double -> IO ([Char], GValue)
constructSpinButtonValue val = constructObjectPropertyDouble "value" val

data SpinButtonValuePropertyInfo
instance AttrInfo SpinButtonValuePropertyInfo where
    type AttrAllowedOps SpinButtonValuePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonValuePropertyInfo = (~) Double
    type AttrBaseTypeConstraint SpinButtonValuePropertyInfo = SpinButtonK
    type AttrGetType SpinButtonValuePropertyInfo = Double
    type AttrLabel SpinButtonValuePropertyInfo = "SpinButton::value"
    attrGet _ = getSpinButtonValue
    attrSet _ = setSpinButtonValue
    attrConstruct _ = constructSpinButtonValue

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

getSpinButtonWrap :: (MonadIO m, SpinButtonK o) => o -> m Bool
getSpinButtonWrap obj = liftIO $ getObjectPropertyBool obj "wrap"

setSpinButtonWrap :: (MonadIO m, SpinButtonK o) => o -> Bool -> m ()
setSpinButtonWrap obj val = liftIO $ setObjectPropertyBool obj "wrap" val

constructSpinButtonWrap :: Bool -> IO ([Char], GValue)
constructSpinButtonWrap val = constructObjectPropertyBool "wrap" val

data SpinButtonWrapPropertyInfo
instance AttrInfo SpinButtonWrapPropertyInfo where
    type AttrAllowedOps SpinButtonWrapPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpinButtonWrapPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint SpinButtonWrapPropertyInfo = SpinButtonK
    type AttrGetType SpinButtonWrapPropertyInfo = Bool
    type AttrLabel SpinButtonWrapPropertyInfo = "SpinButton::wrap"
    attrGet _ = getSpinButtonWrap
    attrSet _ = setSpinButtonWrap
    attrConstruct _ = constructSpinButtonWrap

type instance AttributeList SpinButton = SpinButtonAttributeList
type SpinButtonAttributeList = ('[ '("activates-default", EntryActivatesDefaultPropertyInfo), '("adjustment", SpinButtonAdjustmentPropertyInfo), '("app-paintable", WidgetAppPaintablePropertyInfo), '("attributes", EntryAttributesPropertyInfo), '("buffer", EntryBufferPropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("caps-lock-warning", EntryCapsLockWarningPropertyInfo), '("climb-rate", SpinButtonClimbRatePropertyInfo), '("completion", EntryCompletionPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("cursor-position", EntryCursorPositionPropertyInfo), '("digits", SpinButtonDigitsPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("editable", EntryEditablePropertyInfo), '("editing-canceled", CellEditableEditingCanceledPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-frame", EntryHasFramePropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("im-module", EntryImModulePropertyInfo), '("inner-border", EntryInnerBorderPropertyInfo), '("input-hints", EntryInputHintsPropertyInfo), '("input-purpose", EntryInputPurposePropertyInfo), '("invisible-char", EntryInvisibleCharPropertyInfo), '("invisible-char-set", EntryInvisibleCharSetPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("margin", WidgetMarginPropertyInfo), '("margin-bottom", WidgetMarginBottomPropertyInfo), '("margin-end", WidgetMarginEndPropertyInfo), '("margin-left", WidgetMarginLeftPropertyInfo), '("margin-right", WidgetMarginRightPropertyInfo), '("margin-start", WidgetMarginStartPropertyInfo), '("margin-top", WidgetMarginTopPropertyInfo), '("max-length", EntryMaxLengthPropertyInfo), '("max-width-chars", EntryMaxWidthCharsPropertyInfo), '("name", WidgetNamePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("numeric", SpinButtonNumericPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("orientation", OrientableOrientationPropertyInfo), '("overwrite-mode", EntryOverwriteModePropertyInfo), '("parent", WidgetParentPropertyInfo), '("placeholder-text", EntryPlaceholderTextPropertyInfo), '("populate-all", EntryPopulateAllPropertyInfo), '("primary-icon-activatable", EntryPrimaryIconActivatablePropertyInfo), '("primary-icon-gicon", EntryPrimaryIconGiconPropertyInfo), '("primary-icon-name", EntryPrimaryIconNamePropertyInfo), '("primary-icon-pixbuf", EntryPrimaryIconPixbufPropertyInfo), '("primary-icon-sensitive", EntryPrimaryIconSensitivePropertyInfo), '("primary-icon-stock", EntryPrimaryIconStockPropertyInfo), '("primary-icon-storage-type", EntryPrimaryIconStorageTypePropertyInfo), '("primary-icon-tooltip-markup", EntryPrimaryIconTooltipMarkupPropertyInfo), '("primary-icon-tooltip-text", EntryPrimaryIconTooltipTextPropertyInfo), '("progress-fraction", EntryProgressFractionPropertyInfo), '("progress-pulse-step", EntryProgressPulseStepPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("scroll-offset", EntryScrollOffsetPropertyInfo), '("secondary-icon-activatable", EntrySecondaryIconActivatablePropertyInfo), '("secondary-icon-gicon", EntrySecondaryIconGiconPropertyInfo), '("secondary-icon-name", EntrySecondaryIconNamePropertyInfo), '("secondary-icon-pixbuf", EntrySecondaryIconPixbufPropertyInfo), '("secondary-icon-sensitive", EntrySecondaryIconSensitivePropertyInfo), '("secondary-icon-stock", EntrySecondaryIconStockPropertyInfo), '("secondary-icon-storage-type", EntrySecondaryIconStorageTypePropertyInfo), '("secondary-icon-tooltip-markup", EntrySecondaryIconTooltipMarkupPropertyInfo), '("secondary-icon-tooltip-text", EntrySecondaryIconTooltipTextPropertyInfo), '("selection-bound", EntrySelectionBoundPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("shadow-type", EntryShadowTypePropertyInfo), '("snap-to-ticks", SpinButtonSnapToTicksPropertyInfo), '("style", WidgetStylePropertyInfo), '("tabs", EntryTabsPropertyInfo), '("text", EntryTextPropertyInfo), '("text-length", EntryTextLengthPropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("truncate-multiline", EntryTruncateMultilinePropertyInfo), '("update-policy", SpinButtonUpdatePolicyPropertyInfo), '("valign", WidgetValignPropertyInfo), '("value", SpinButtonValuePropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visibility", EntryVisibilityPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-chars", EntryWidthCharsPropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo), '("wrap", SpinButtonWrapPropertyInfo), '("xalign", EntryXalignPropertyInfo)] :: [(Symbol, *)])

data SpinButtonChangeValueSignalInfo
instance SignalInfo SpinButtonChangeValueSignalInfo where
    type HaskellCallbackType SpinButtonChangeValueSignalInfo = SpinButtonChangeValueCallback
    connectSignal _ = connectSpinButtonChangeValue

data SpinButtonInputSignalInfo
instance SignalInfo SpinButtonInputSignalInfo where
    type HaskellCallbackType SpinButtonInputSignalInfo = SpinButtonInputCallback
    connectSignal _ = connectSpinButtonInput

data SpinButtonOutputSignalInfo
instance SignalInfo SpinButtonOutputSignalInfo where
    type HaskellCallbackType SpinButtonOutputSignalInfo = SpinButtonOutputCallback
    connectSignal _ = connectSpinButtonOutput

data SpinButtonValueChangedSignalInfo
instance SignalInfo SpinButtonValueChangedSignalInfo where
    type HaskellCallbackType SpinButtonValueChangedSignalInfo = SpinButtonValueChangedCallback
    connectSignal _ = connectSpinButtonValueChanged

data SpinButtonWrappedSignalInfo
instance SignalInfo SpinButtonWrappedSignalInfo where
    type HaskellCallbackType SpinButtonWrappedSignalInfo = SpinButtonWrappedCallback
    connectSignal _ = connectSpinButtonWrapped

type instance SignalList SpinButton = SpinButtonSignalList
type SpinButtonSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("activate", EntryActivateSignalInfo), '("backspace", EntryBackspaceSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("change-value", SpinButtonChangeValueSignalInfo), '("changed", EditableChangedSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("copy-clipboard", EntryCopyClipboardSignalInfo), '("cut-clipboard", EntryCutClipboardSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("delete-event", WidgetDeleteEventSignalInfo), '("delete-from-cursor", EntryDeleteFromCursorSignalInfo), '("delete-text", EditableDeleteTextSignalInfo), '("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), '("editing-done", CellEditableEditingDoneSignalInfo), '("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), '("icon-press", EntryIconPressSignalInfo), '("icon-release", EntryIconReleaseSignalInfo), '("input", SpinButtonInputSignalInfo), '("insert-at-cursor", EntryInsertAtCursorSignalInfo), '("insert-text", EditableInsertTextSignalInfo), '("key-press-event", WidgetKeyPressEventSignalInfo), '("key-release-event", WidgetKeyReleaseEventSignalInfo), '("keynav-failed", WidgetKeynavFailedSignalInfo), '("leave-notify-event", WidgetLeaveNotifyEventSignalInfo), '("map", WidgetMapSignalInfo), '("map-event", WidgetMapEventSignalInfo), '("mnemonic-activate", WidgetMnemonicActivateSignalInfo), '("motion-notify-event", WidgetMotionNotifyEventSignalInfo), '("move-cursor", EntryMoveCursorSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("output", SpinButtonOutputSignalInfo), '("parent-set", WidgetParentSetSignalInfo), '("paste-clipboard", EntryPasteClipboardSignalInfo), '("populate-popup", EntryPopulatePopupSignalInfo), '("popup-menu", WidgetPopupMenuSignalInfo), '("preedit-changed", EntryPreeditChangedSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("remove-widget", CellEditableRemoveWidgetSignalInfo), '("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), '("toggle-overwrite", EntryToggleOverwriteSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("value-changed", SpinButtonValueChangedSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("wrapped", SpinButtonWrappedSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method SpinButton::new
-- method type : Constructor
-- Args : [Arg {argName = "adjustment", argType = TInterface "Gtk" "Adjustment", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "climb_rate", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "adjustment", argType = TInterface "Gtk" "Adjustment", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "climb_rate", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "SpinButton"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_spin_button_new" gtk_spin_button_new :: 
    Ptr Adjustment ->                       -- adjustment : TInterface "Gtk" "Adjustment"
    CDouble ->                              -- climb_rate : TBasicType TDouble
    Word32 ->                               -- digits : TBasicType TUInt32
    IO (Ptr SpinButton)


spinButtonNew ::
    (MonadIO m, AdjustmentK a) =>
    Maybe (a) ->                            -- adjustment
    Double ->                               -- climb_rate
    Word32 ->                               -- digits
    m SpinButton
spinButtonNew adjustment climb_rate digits = liftIO $ do
    maybeAdjustment <- case adjustment of
        Nothing -> return nullPtr
        Just jAdjustment -> do
            let jAdjustment' = unsafeManagedPtrCastPtr jAdjustment
            return jAdjustment'
    let climb_rate' = realToFrac climb_rate
    result <- gtk_spin_button_new maybeAdjustment climb_rate' digits
    checkUnexpectedReturnNULL "gtk_spin_button_new" result
    result' <- (newObject SpinButton) result
    whenJust adjustment touchManagedPtr
    return result'

-- method SpinButton::new_with_range
-- method type : Constructor
-- Args : [Arg {argName = "min", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "max", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "step", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "min", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "max", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "step", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "SpinButton"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_spin_button_new_with_range" gtk_spin_button_new_with_range :: 
    CDouble ->                              -- min : TBasicType TDouble
    CDouble ->                              -- max : TBasicType TDouble
    CDouble ->                              -- step : TBasicType TDouble
    IO (Ptr SpinButton)


spinButtonNewWithRange ::
    (MonadIO m) =>
    Double ->                               -- min
    Double ->                               -- max
    Double ->                               -- step
    m SpinButton
spinButtonNewWithRange min max step = liftIO $ do
    let min' = realToFrac min
    let max' = realToFrac max
    let step' = realToFrac step
    result <- gtk_spin_button_new_with_range min' max' step'
    checkUnexpectedReturnNULL "gtk_spin_button_new_with_range" result
    result' <- (newObject SpinButton) result
    return result'

-- method SpinButton::configure
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "SpinButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "adjustment", argType = TInterface "Gtk" "Adjustment", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "climb_rate", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "SpinButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "adjustment", argType = TInterface "Gtk" "Adjustment", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "climb_rate", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", 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_spin_button_configure" gtk_spin_button_configure :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    Ptr Adjustment ->                       -- adjustment : TInterface "Gtk" "Adjustment"
    CDouble ->                              -- climb_rate : TBasicType TDouble
    Word32 ->                               -- digits : TBasicType TUInt32
    IO ()


spinButtonConfigure ::
    (MonadIO m, SpinButtonK a, AdjustmentK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- adjustment
    Double ->                               -- climb_rate
    Word32 ->                               -- digits
    m ()
spinButtonConfigure _obj adjustment climb_rate digits = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeAdjustment <- case adjustment of
        Nothing -> return nullPtr
        Just jAdjustment -> do
            let jAdjustment' = unsafeManagedPtrCastPtr jAdjustment
            return jAdjustment'
    let climb_rate' = realToFrac climb_rate
    gtk_spin_button_configure _obj' maybeAdjustment climb_rate' digits
    touchManagedPtr _obj
    whenJust adjustment touchManagedPtr
    return ()

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

foreign import ccall "gtk_spin_button_get_adjustment" gtk_spin_button_get_adjustment :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO (Ptr Adjustment)


spinButtonGetAdjustment ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Adjustment
spinButtonGetAdjustment _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_adjustment _obj'
    checkUnexpectedReturnNULL "gtk_spin_button_get_adjustment" result
    result' <- (newObject Adjustment) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_get_digits" gtk_spin_button_get_digits :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO Word32


spinButtonGetDigits ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Word32
spinButtonGetDigits _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_digits _obj'
    touchManagedPtr _obj
    return result

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

foreign import ccall "gtk_spin_button_get_increments" gtk_spin_button_get_increments :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    Ptr CDouble ->                          -- step : TBasicType TDouble
    Ptr CDouble ->                          -- page : TBasicType TDouble
    IO ()


spinButtonGetIncrements ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m (Double,Double)
spinButtonGetIncrements _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    step <- allocMem :: IO (Ptr CDouble)
    page <- allocMem :: IO (Ptr CDouble)
    gtk_spin_button_get_increments _obj' step page
    step' <- peek step
    let step'' = realToFrac step'
    page' <- peek page
    let page'' = realToFrac page'
    touchManagedPtr _obj
    freeMem step
    freeMem page
    return (step'', page'')

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

foreign import ccall "gtk_spin_button_get_numeric" gtk_spin_button_get_numeric :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO CInt


spinButtonGetNumeric ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Bool
spinButtonGetNumeric _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_numeric _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_get_range" gtk_spin_button_get_range :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    Ptr CDouble ->                          -- min : TBasicType TDouble
    Ptr CDouble ->                          -- max : TBasicType TDouble
    IO ()


spinButtonGetRange ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m (Double,Double)
spinButtonGetRange _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    min <- allocMem :: IO (Ptr CDouble)
    max <- allocMem :: IO (Ptr CDouble)
    gtk_spin_button_get_range _obj' min max
    min' <- peek min
    let min'' = realToFrac min'
    max' <- peek max
    let max'' = realToFrac max'
    touchManagedPtr _obj
    freeMem min
    freeMem max
    return (min'', max'')

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

foreign import ccall "gtk_spin_button_get_snap_to_ticks" gtk_spin_button_get_snap_to_ticks :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO CInt


spinButtonGetSnapToTicks ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Bool
spinButtonGetSnapToTicks _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_snap_to_ticks _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_get_update_policy" gtk_spin_button_get_update_policy :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO CUInt


spinButtonGetUpdatePolicy ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m SpinButtonUpdatePolicy
spinButtonGetUpdatePolicy _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_update_policy _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_get_value" gtk_spin_button_get_value :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO CDouble


spinButtonGetValue ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Double
spinButtonGetValue _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_value _obj'
    let result' = realToFrac result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_get_value_as_int" gtk_spin_button_get_value_as_int :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO Int32


spinButtonGetValueAsInt ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Int32
spinButtonGetValueAsInt _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_value_as_int _obj'
    touchManagedPtr _obj
    return result

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

foreign import ccall "gtk_spin_button_get_wrap" gtk_spin_button_get_wrap :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO CInt


spinButtonGetWrap ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m Bool
spinButtonGetWrap _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_spin_button_get_wrap _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_spin_button_set_adjustment" gtk_spin_button_set_adjustment :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    Ptr Adjustment ->                       -- adjustment : TInterface "Gtk" "Adjustment"
    IO ()


spinButtonSetAdjustment ::
    (MonadIO m, SpinButtonK a, AdjustmentK b) =>
    a ->                                    -- _obj
    b ->                                    -- adjustment
    m ()
spinButtonSetAdjustment _obj adjustment = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let adjustment' = unsafeManagedPtrCastPtr adjustment
    gtk_spin_button_set_adjustment _obj' adjustment'
    touchManagedPtr _obj
    touchManagedPtr adjustment
    return ()

-- method SpinButton::set_digits
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "SpinButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "SpinButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "digits", 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_spin_button_set_digits" gtk_spin_button_set_digits :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    Word32 ->                               -- digits : TBasicType TUInt32
    IO ()


spinButtonSetDigits ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- digits
    m ()
spinButtonSetDigits _obj digits = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_spin_button_set_digits _obj' digits
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_increments" gtk_spin_button_set_increments :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CDouble ->                              -- step : TBasicType TDouble
    CDouble ->                              -- page : TBasicType TDouble
    IO ()


spinButtonSetIncrements ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Double ->                               -- step
    Double ->                               -- page
    m ()
spinButtonSetIncrements _obj step page = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let step' = realToFrac step
    let page' = realToFrac page
    gtk_spin_button_set_increments _obj' step' page'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_numeric" gtk_spin_button_set_numeric :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CInt ->                                 -- numeric : TBasicType TBoolean
    IO ()


spinButtonSetNumeric ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- numeric
    m ()
spinButtonSetNumeric _obj numeric = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let numeric' = (fromIntegral . fromEnum) numeric
    gtk_spin_button_set_numeric _obj' numeric'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_range" gtk_spin_button_set_range :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CDouble ->                              -- min : TBasicType TDouble
    CDouble ->                              -- max : TBasicType TDouble
    IO ()


spinButtonSetRange ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Double ->                               -- min
    Double ->                               -- max
    m ()
spinButtonSetRange _obj min max = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let min' = realToFrac min
    let max' = realToFrac max
    gtk_spin_button_set_range _obj' min' max'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_snap_to_ticks" gtk_spin_button_set_snap_to_ticks :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CInt ->                                 -- snap_to_ticks : TBasicType TBoolean
    IO ()


spinButtonSetSnapToTicks ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- snap_to_ticks
    m ()
spinButtonSetSnapToTicks _obj snap_to_ticks = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let snap_to_ticks' = (fromIntegral . fromEnum) snap_to_ticks
    gtk_spin_button_set_snap_to_ticks _obj' snap_to_ticks'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_update_policy" gtk_spin_button_set_update_policy :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CUInt ->                                -- policy : TInterface "Gtk" "SpinButtonUpdatePolicy"
    IO ()


spinButtonSetUpdatePolicy ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    SpinButtonUpdatePolicy ->               -- policy
    m ()
spinButtonSetUpdatePolicy _obj policy = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let policy' = (fromIntegral . fromEnum) policy
    gtk_spin_button_set_update_policy _obj' policy'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_value" gtk_spin_button_set_value :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CDouble ->                              -- value : TBasicType TDouble
    IO ()


spinButtonSetValue ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Double ->                               -- value
    m ()
spinButtonSetValue _obj value = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let value' = realToFrac value
    gtk_spin_button_set_value _obj' value'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_set_wrap" gtk_spin_button_set_wrap :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CInt ->                                 -- wrap : TBasicType TBoolean
    IO ()


spinButtonSetWrap ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- wrap
    m ()
spinButtonSetWrap _obj wrap = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let wrap' = (fromIntegral . fromEnum) wrap
    gtk_spin_button_set_wrap _obj' wrap'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_spin" gtk_spin_button_spin :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    CUInt ->                                -- direction : TInterface "Gtk" "SpinType"
    CDouble ->                              -- increment : TBasicType TDouble
    IO ()


spinButtonSpin ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    SpinType ->                             -- direction
    Double ->                               -- increment
    m ()
spinButtonSpin _obj direction increment = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let direction' = (fromIntegral . fromEnum) direction
    let increment' = realToFrac increment
    gtk_spin_button_spin _obj' direction' increment'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_spin_button_update" gtk_spin_button_update :: 
    Ptr SpinButton ->                       -- _obj : TInterface "Gtk" "SpinButton"
    IO ()


spinButtonUpdate ::
    (MonadIO m, SpinButtonK a) =>
    a ->                                    -- _obj
    m ()
spinButtonUpdate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_spin_button_update _obj'
    touchManagedPtr _obj
    return ()