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

-- * Exported types
    Button(..)                              ,
    ButtonK                                 ,
    toButton                                ,
    noButton                                ,


 -- * Methods
-- ** buttonClicked
    buttonClicked                           ,


-- ** buttonEnter
    buttonEnter                             ,


-- ** buttonGetAlignment
    buttonGetAlignment                      ,


-- ** buttonGetAlwaysShowImage
    buttonGetAlwaysShowImage                ,


-- ** buttonGetEventWindow
    buttonGetEventWindow                    ,


-- ** buttonGetFocusOnClick
    buttonGetFocusOnClick                   ,


-- ** buttonGetImage
    buttonGetImage                          ,


-- ** buttonGetImagePosition
    buttonGetImagePosition                  ,


-- ** buttonGetLabel
    buttonGetLabel                          ,


-- ** buttonGetRelief
    buttonGetRelief                         ,


-- ** buttonGetUseStock
    buttonGetUseStock                       ,


-- ** buttonGetUseUnderline
    buttonGetUseUnderline                   ,


-- ** buttonLeave
    buttonLeave                             ,


-- ** buttonNew
    buttonNew                               ,


-- ** buttonNewFromIconName
    buttonNewFromIconName                   ,


-- ** buttonNewFromStock
    buttonNewFromStock                      ,


-- ** buttonNewWithLabel
    buttonNewWithLabel                      ,


-- ** buttonNewWithMnemonic
    buttonNewWithMnemonic                   ,


-- ** buttonPressed
    buttonPressed                           ,


-- ** buttonReleased
    buttonReleased                          ,


-- ** buttonSetAlignment
    buttonSetAlignment                      ,


-- ** buttonSetAlwaysShowImage
    buttonSetAlwaysShowImage                ,


-- ** buttonSetFocusOnClick
    buttonSetFocusOnClick                   ,


-- ** buttonSetImage
    buttonSetImage                          ,


-- ** buttonSetImagePosition
    buttonSetImagePosition                  ,


-- ** buttonSetLabel
    buttonSetLabel                          ,


-- ** buttonSetRelief
    buttonSetRelief                         ,


-- ** buttonSetUseStock
    buttonSetUseStock                       ,


-- ** buttonSetUseUnderline
    buttonSetUseUnderline                   ,




 -- * Properties
-- ** AlwaysShowImage
    ButtonAlwaysShowImagePropertyInfo       ,
    constructButtonAlwaysShowImage          ,
    getButtonAlwaysShowImage                ,
    setButtonAlwaysShowImage                ,


-- ** FocusOnClick
    ButtonFocusOnClickPropertyInfo          ,
    constructButtonFocusOnClick             ,
    getButtonFocusOnClick                   ,
    setButtonFocusOnClick                   ,


-- ** Image
    ButtonImagePropertyInfo                 ,
    constructButtonImage                    ,
    getButtonImage                          ,
    setButtonImage                          ,


-- ** ImagePosition
    ButtonImagePositionPropertyInfo         ,
    constructButtonImagePosition            ,
    getButtonImagePosition                  ,
    setButtonImagePosition                  ,


-- ** Label
    ButtonLabelPropertyInfo                 ,
    constructButtonLabel                    ,
    getButtonLabel                          ,
    setButtonLabel                          ,


-- ** Relief
    ButtonReliefPropertyInfo                ,
    constructButtonRelief                   ,
    getButtonRelief                         ,
    setButtonRelief                         ,


-- ** UseStock
    ButtonUseStockPropertyInfo              ,
    constructButtonUseStock                 ,
    getButtonUseStock                       ,
    setButtonUseStock                       ,


-- ** UseUnderline
    ButtonUseUnderlinePropertyInfo          ,
    constructButtonUseUnderline             ,
    getButtonUseUnderline                   ,
    setButtonUseUnderline                   ,


-- ** Xalign
    ButtonXalignPropertyInfo                ,
    constructButtonXalign                   ,
    getButtonXalign                         ,
    setButtonXalign                         ,


-- ** Yalign
    ButtonYalignPropertyInfo                ,
    constructButtonYalign                   ,
    getButtonYalign                         ,
    setButtonYalign                         ,




 -- * Signals
-- ** Activate
    ButtonActivateCallback                  ,
    ButtonActivateCallbackC                 ,
    ButtonActivateSignalInfo                ,
    afterButtonActivate                     ,
    buttonActivateCallbackWrapper           ,
    buttonActivateClosure                   ,
    mkButtonActivateCallback                ,
    noButtonActivateCallback                ,
    onButtonActivate                        ,


-- ** Clicked
    ButtonClickedCallback                   ,
    ButtonClickedCallbackC                  ,
    ButtonClickedSignalInfo                 ,
    afterButtonClicked                      ,
    buttonClickedCallbackWrapper            ,
    buttonClickedClosure                    ,
    mkButtonClickedCallback                 ,
    noButtonClickedCallback                 ,
    onButtonClicked                         ,


-- ** Enter
    ButtonEnterCallback                     ,
    ButtonEnterCallbackC                    ,
    ButtonEnterSignalInfo                   ,
    afterButtonEnter                        ,
    buttonEnterCallbackWrapper              ,
    buttonEnterClosure                      ,
    mkButtonEnterCallback                   ,
    noButtonEnterCallback                   ,
    onButtonEnter                           ,


-- ** Leave
    ButtonLeaveCallback                     ,
    ButtonLeaveCallbackC                    ,
    ButtonLeaveSignalInfo                   ,
    afterButtonLeave                        ,
    buttonLeaveCallbackWrapper              ,
    buttonLeaveClosure                      ,
    mkButtonLeaveCallback                   ,
    noButtonLeaveCallback                   ,
    onButtonLeave                           ,


-- ** Pressed
    ButtonPressedCallback                   ,
    ButtonPressedCallbackC                  ,
    ButtonPressedSignalInfo                 ,
    afterButtonPressed                      ,
    buttonPressedCallbackWrapper            ,
    buttonPressedClosure                    ,
    mkButtonPressedCallback                 ,
    noButtonPressedCallback                 ,
    onButtonPressed                         ,


-- ** Released
    ButtonReleasedCallback                  ,
    ButtonReleasedCallbackC                 ,
    ButtonReleasedSignalInfo                ,
    afterButtonReleased                     ,
    buttonReleasedCallbackWrapper           ,
    buttonReleasedClosure                   ,
    mkButtonReleasedCallback                ,
    noButtonReleasedCallback                ,
    onButtonReleased                        ,




    ) 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
import qualified GI.Gdk as Gdk

newtype Button = Button (ForeignPtr Button)
foreign import ccall "gtk_button_get_type"
    c_gtk_button_get_type :: IO GType

type instance ParentTypes Button = ButtonParentTypes
type ButtonParentTypes = '[Bin, Container, Widget, GObject.Object, Atk.ImplementorIface, Actionable, Activatable, Buildable]

instance GObject Button where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_button_get_type
    

class GObject o => ButtonK o
instance (GObject o, IsDescendantOf Button o) => ButtonK o

toButton :: ButtonK o => o -> IO Button
toButton = unsafeCastTo Button

noButton :: Maybe Button
noButton = Nothing

-- signal Button::activate
type ButtonActivateCallback =
    IO ()

noButtonActivateCallback :: Maybe ButtonActivateCallback
noButtonActivateCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonActivateCallback :: ButtonActivateCallbackC -> IO (FunPtr ButtonActivateCallbackC)

buttonActivateClosure :: ButtonActivateCallback -> IO Closure
buttonActivateClosure cb = newCClosure =<< mkButtonActivateCallback wrapped
    where wrapped = buttonActivateCallbackWrapper cb

buttonActivateCallbackWrapper ::
    ButtonActivateCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonActivateCallbackWrapper _cb _ _ = do
    _cb 

onButtonActivate :: (GObject a, MonadIO m) => a -> ButtonActivateCallback -> m SignalHandlerId
onButtonActivate obj cb = liftIO $ connectButtonActivate obj cb SignalConnectBefore
afterButtonActivate :: (GObject a, MonadIO m) => a -> ButtonActivateCallback -> m SignalHandlerId
afterButtonActivate obj cb = connectButtonActivate obj cb SignalConnectAfter

connectButtonActivate :: (GObject a, MonadIO m) =>
                         a -> ButtonActivateCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonActivate obj cb after = liftIO $ do
    cb' <- mkButtonActivateCallback (buttonActivateCallbackWrapper cb)
    connectSignalFunPtr obj "activate" cb' after

-- signal Button::clicked
type ButtonClickedCallback =
    IO ()

noButtonClickedCallback :: Maybe ButtonClickedCallback
noButtonClickedCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonClickedCallback :: ButtonClickedCallbackC -> IO (FunPtr ButtonClickedCallbackC)

buttonClickedClosure :: ButtonClickedCallback -> IO Closure
buttonClickedClosure cb = newCClosure =<< mkButtonClickedCallback wrapped
    where wrapped = buttonClickedCallbackWrapper cb

buttonClickedCallbackWrapper ::
    ButtonClickedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonClickedCallbackWrapper _cb _ _ = do
    _cb 

onButtonClicked :: (GObject a, MonadIO m) => a -> ButtonClickedCallback -> m SignalHandlerId
onButtonClicked obj cb = liftIO $ connectButtonClicked obj cb SignalConnectBefore
afterButtonClicked :: (GObject a, MonadIO m) => a -> ButtonClickedCallback -> m SignalHandlerId
afterButtonClicked obj cb = connectButtonClicked obj cb SignalConnectAfter

connectButtonClicked :: (GObject a, MonadIO m) =>
                        a -> ButtonClickedCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonClicked obj cb after = liftIO $ do
    cb' <- mkButtonClickedCallback (buttonClickedCallbackWrapper cb)
    connectSignalFunPtr obj "clicked" cb' after

-- signal Button::enter
type ButtonEnterCallback =
    IO ()

noButtonEnterCallback :: Maybe ButtonEnterCallback
noButtonEnterCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonEnterCallback :: ButtonEnterCallbackC -> IO (FunPtr ButtonEnterCallbackC)

buttonEnterClosure :: ButtonEnterCallback -> IO Closure
buttonEnterClosure cb = newCClosure =<< mkButtonEnterCallback wrapped
    where wrapped = buttonEnterCallbackWrapper cb

buttonEnterCallbackWrapper ::
    ButtonEnterCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonEnterCallbackWrapper _cb _ _ = do
    _cb 

onButtonEnter :: (GObject a, MonadIO m) => a -> ButtonEnterCallback -> m SignalHandlerId
onButtonEnter obj cb = liftIO $ connectButtonEnter obj cb SignalConnectBefore
afterButtonEnter :: (GObject a, MonadIO m) => a -> ButtonEnterCallback -> m SignalHandlerId
afterButtonEnter obj cb = connectButtonEnter obj cb SignalConnectAfter

connectButtonEnter :: (GObject a, MonadIO m) =>
                      a -> ButtonEnterCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonEnter obj cb after = liftIO $ do
    cb' <- mkButtonEnterCallback (buttonEnterCallbackWrapper cb)
    connectSignalFunPtr obj "enter" cb' after

-- signal Button::leave
type ButtonLeaveCallback =
    IO ()

noButtonLeaveCallback :: Maybe ButtonLeaveCallback
noButtonLeaveCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonLeaveCallback :: ButtonLeaveCallbackC -> IO (FunPtr ButtonLeaveCallbackC)

buttonLeaveClosure :: ButtonLeaveCallback -> IO Closure
buttonLeaveClosure cb = newCClosure =<< mkButtonLeaveCallback wrapped
    where wrapped = buttonLeaveCallbackWrapper cb

buttonLeaveCallbackWrapper ::
    ButtonLeaveCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonLeaveCallbackWrapper _cb _ _ = do
    _cb 

onButtonLeave :: (GObject a, MonadIO m) => a -> ButtonLeaveCallback -> m SignalHandlerId
onButtonLeave obj cb = liftIO $ connectButtonLeave obj cb SignalConnectBefore
afterButtonLeave :: (GObject a, MonadIO m) => a -> ButtonLeaveCallback -> m SignalHandlerId
afterButtonLeave obj cb = connectButtonLeave obj cb SignalConnectAfter

connectButtonLeave :: (GObject a, MonadIO m) =>
                      a -> ButtonLeaveCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonLeave obj cb after = liftIO $ do
    cb' <- mkButtonLeaveCallback (buttonLeaveCallbackWrapper cb)
    connectSignalFunPtr obj "leave" cb' after

-- signal Button::pressed
type ButtonPressedCallback =
    IO ()

noButtonPressedCallback :: Maybe ButtonPressedCallback
noButtonPressedCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonPressedCallback :: ButtonPressedCallbackC -> IO (FunPtr ButtonPressedCallbackC)

buttonPressedClosure :: ButtonPressedCallback -> IO Closure
buttonPressedClosure cb = newCClosure =<< mkButtonPressedCallback wrapped
    where wrapped = buttonPressedCallbackWrapper cb

buttonPressedCallbackWrapper ::
    ButtonPressedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonPressedCallbackWrapper _cb _ _ = do
    _cb 

onButtonPressed :: (GObject a, MonadIO m) => a -> ButtonPressedCallback -> m SignalHandlerId
onButtonPressed obj cb = liftIO $ connectButtonPressed obj cb SignalConnectBefore
afterButtonPressed :: (GObject a, MonadIO m) => a -> ButtonPressedCallback -> m SignalHandlerId
afterButtonPressed obj cb = connectButtonPressed obj cb SignalConnectAfter

connectButtonPressed :: (GObject a, MonadIO m) =>
                        a -> ButtonPressedCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonPressed obj cb after = liftIO $ do
    cb' <- mkButtonPressedCallback (buttonPressedCallbackWrapper cb)
    connectSignalFunPtr obj "pressed" cb' after

-- signal Button::released
type ButtonReleasedCallback =
    IO ()

noButtonReleasedCallback :: Maybe ButtonReleasedCallback
noButtonReleasedCallback = Nothing

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

foreign import ccall "wrapper"
    mkButtonReleasedCallback :: ButtonReleasedCallbackC -> IO (FunPtr ButtonReleasedCallbackC)

buttonReleasedClosure :: ButtonReleasedCallback -> IO Closure
buttonReleasedClosure cb = newCClosure =<< mkButtonReleasedCallback wrapped
    where wrapped = buttonReleasedCallbackWrapper cb

buttonReleasedCallbackWrapper ::
    ButtonReleasedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
buttonReleasedCallbackWrapper _cb _ _ = do
    _cb 

onButtonReleased :: (GObject a, MonadIO m) => a -> ButtonReleasedCallback -> m SignalHandlerId
onButtonReleased obj cb = liftIO $ connectButtonReleased obj cb SignalConnectBefore
afterButtonReleased :: (GObject a, MonadIO m) => a -> ButtonReleasedCallback -> m SignalHandlerId
afterButtonReleased obj cb = connectButtonReleased obj cb SignalConnectAfter

connectButtonReleased :: (GObject a, MonadIO m) =>
                         a -> ButtonReleasedCallback -> SignalConnectMode -> m SignalHandlerId
connectButtonReleased obj cb after = liftIO $ do
    cb' <- mkButtonReleasedCallback (buttonReleasedCallbackWrapper cb)
    connectSignalFunPtr obj "released" cb' after

-- VVV Prop "always-show-image"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]

getButtonAlwaysShowImage :: (MonadIO m, ButtonK o) => o -> m Bool
getButtonAlwaysShowImage obj = liftIO $ getObjectPropertyBool obj "always-show-image"

setButtonAlwaysShowImage :: (MonadIO m, ButtonK o) => o -> Bool -> m ()
setButtonAlwaysShowImage obj val = liftIO $ setObjectPropertyBool obj "always-show-image" val

constructButtonAlwaysShowImage :: Bool -> IO ([Char], GValue)
constructButtonAlwaysShowImage val = constructObjectPropertyBool "always-show-image" val

data ButtonAlwaysShowImagePropertyInfo
instance AttrInfo ButtonAlwaysShowImagePropertyInfo where
    type AttrAllowedOps ButtonAlwaysShowImagePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonAlwaysShowImagePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ButtonAlwaysShowImagePropertyInfo = ButtonK
    type AttrGetType ButtonAlwaysShowImagePropertyInfo = Bool
    type AttrLabel ButtonAlwaysShowImagePropertyInfo = "Button::always-show-image"
    attrGet _ = getButtonAlwaysShowImage
    attrSet _ = setButtonAlwaysShowImage
    attrConstruct _ = constructButtonAlwaysShowImage

-- VVV Prop "focus-on-click"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonFocusOnClick :: (MonadIO m, ButtonK o) => o -> m Bool
getButtonFocusOnClick obj = liftIO $ getObjectPropertyBool obj "focus-on-click"

setButtonFocusOnClick :: (MonadIO m, ButtonK o) => o -> Bool -> m ()
setButtonFocusOnClick obj val = liftIO $ setObjectPropertyBool obj "focus-on-click" val

constructButtonFocusOnClick :: Bool -> IO ([Char], GValue)
constructButtonFocusOnClick val = constructObjectPropertyBool "focus-on-click" val

data ButtonFocusOnClickPropertyInfo
instance AttrInfo ButtonFocusOnClickPropertyInfo where
    type AttrAllowedOps ButtonFocusOnClickPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonFocusOnClickPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ButtonFocusOnClickPropertyInfo = ButtonK
    type AttrGetType ButtonFocusOnClickPropertyInfo = Bool
    type AttrLabel ButtonFocusOnClickPropertyInfo = "Button::focus-on-click"
    attrGet _ = getButtonFocusOnClick
    attrSet _ = setButtonFocusOnClick
    attrConstruct _ = constructButtonFocusOnClick

-- VVV Prop "image"
   -- Type: TInterface "Gtk" "Widget"
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonImage :: (MonadIO m, ButtonK o) => o -> m Widget
getButtonImage obj = liftIO $ getObjectPropertyObject obj "image" Widget

setButtonImage :: (MonadIO m, ButtonK o, WidgetK a) => o -> a -> m ()
setButtonImage obj val = liftIO $ setObjectPropertyObject obj "image" val

constructButtonImage :: (WidgetK a) => a -> IO ([Char], GValue)
constructButtonImage val = constructObjectPropertyObject "image" val

data ButtonImagePropertyInfo
instance AttrInfo ButtonImagePropertyInfo where
    type AttrAllowedOps ButtonImagePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonImagePropertyInfo = WidgetK
    type AttrBaseTypeConstraint ButtonImagePropertyInfo = ButtonK
    type AttrGetType ButtonImagePropertyInfo = Widget
    type AttrLabel ButtonImagePropertyInfo = "Button::image"
    attrGet _ = getButtonImage
    attrSet _ = setButtonImage
    attrConstruct _ = constructButtonImage

-- VVV Prop "image-position"
   -- Type: TInterface "Gtk" "PositionType"
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonImagePosition :: (MonadIO m, ButtonK o) => o -> m PositionType
getButtonImagePosition obj = liftIO $ getObjectPropertyEnum obj "image-position"

setButtonImagePosition :: (MonadIO m, ButtonK o) => o -> PositionType -> m ()
setButtonImagePosition obj val = liftIO $ setObjectPropertyEnum obj "image-position" val

constructButtonImagePosition :: PositionType -> IO ([Char], GValue)
constructButtonImagePosition val = constructObjectPropertyEnum "image-position" val

data ButtonImagePositionPropertyInfo
instance AttrInfo ButtonImagePositionPropertyInfo where
    type AttrAllowedOps ButtonImagePositionPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonImagePositionPropertyInfo = (~) PositionType
    type AttrBaseTypeConstraint ButtonImagePositionPropertyInfo = ButtonK
    type AttrGetType ButtonImagePositionPropertyInfo = PositionType
    type AttrLabel ButtonImagePositionPropertyInfo = "Button::image-position"
    attrGet _ = getButtonImagePosition
    attrSet _ = setButtonImagePosition
    attrConstruct _ = constructButtonImagePosition

-- VVV Prop "label"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]

getButtonLabel :: (MonadIO m, ButtonK o) => o -> m T.Text
getButtonLabel obj = liftIO $ getObjectPropertyString obj "label"

setButtonLabel :: (MonadIO m, ButtonK o) => o -> T.Text -> m ()
setButtonLabel obj val = liftIO $ setObjectPropertyString obj "label" val

constructButtonLabel :: T.Text -> IO ([Char], GValue)
constructButtonLabel val = constructObjectPropertyString "label" val

data ButtonLabelPropertyInfo
instance AttrInfo ButtonLabelPropertyInfo where
    type AttrAllowedOps ButtonLabelPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonLabelPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint ButtonLabelPropertyInfo = ButtonK
    type AttrGetType ButtonLabelPropertyInfo = T.Text
    type AttrLabel ButtonLabelPropertyInfo = "Button::label"
    attrGet _ = getButtonLabel
    attrSet _ = setButtonLabel
    attrConstruct _ = constructButtonLabel

-- VVV Prop "relief"
   -- Type: TInterface "Gtk" "ReliefStyle"
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonRelief :: (MonadIO m, ButtonK o) => o -> m ReliefStyle
getButtonRelief obj = liftIO $ getObjectPropertyEnum obj "relief"

setButtonRelief :: (MonadIO m, ButtonK o) => o -> ReliefStyle -> m ()
setButtonRelief obj val = liftIO $ setObjectPropertyEnum obj "relief" val

constructButtonRelief :: ReliefStyle -> IO ([Char], GValue)
constructButtonRelief val = constructObjectPropertyEnum "relief" val

data ButtonReliefPropertyInfo
instance AttrInfo ButtonReliefPropertyInfo where
    type AttrAllowedOps ButtonReliefPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonReliefPropertyInfo = (~) ReliefStyle
    type AttrBaseTypeConstraint ButtonReliefPropertyInfo = ButtonK
    type AttrGetType ButtonReliefPropertyInfo = ReliefStyle
    type AttrLabel ButtonReliefPropertyInfo = "Button::relief"
    attrGet _ = getButtonRelief
    attrSet _ = setButtonRelief
    attrConstruct _ = constructButtonRelief

-- VVV Prop "use-stock"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]

getButtonUseStock :: (MonadIO m, ButtonK o) => o -> m Bool
getButtonUseStock obj = liftIO $ getObjectPropertyBool obj "use-stock"

setButtonUseStock :: (MonadIO m, ButtonK o) => o -> Bool -> m ()
setButtonUseStock obj val = liftIO $ setObjectPropertyBool obj "use-stock" val

constructButtonUseStock :: Bool -> IO ([Char], GValue)
constructButtonUseStock val = constructObjectPropertyBool "use-stock" val

data ButtonUseStockPropertyInfo
instance AttrInfo ButtonUseStockPropertyInfo where
    type AttrAllowedOps ButtonUseStockPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonUseStockPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ButtonUseStockPropertyInfo = ButtonK
    type AttrGetType ButtonUseStockPropertyInfo = Bool
    type AttrLabel ButtonUseStockPropertyInfo = "Button::use-stock"
    attrGet _ = getButtonUseStock
    attrSet _ = setButtonUseStock
    attrConstruct _ = constructButtonUseStock

-- VVV Prop "use-underline"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]

getButtonUseUnderline :: (MonadIO m, ButtonK o) => o -> m Bool
getButtonUseUnderline obj = liftIO $ getObjectPropertyBool obj "use-underline"

setButtonUseUnderline :: (MonadIO m, ButtonK o) => o -> Bool -> m ()
setButtonUseUnderline obj val = liftIO $ setObjectPropertyBool obj "use-underline" val

constructButtonUseUnderline :: Bool -> IO ([Char], GValue)
constructButtonUseUnderline val = constructObjectPropertyBool "use-underline" val

data ButtonUseUnderlinePropertyInfo
instance AttrInfo ButtonUseUnderlinePropertyInfo where
    type AttrAllowedOps ButtonUseUnderlinePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonUseUnderlinePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ButtonUseUnderlinePropertyInfo = ButtonK
    type AttrGetType ButtonUseUnderlinePropertyInfo = Bool
    type AttrLabel ButtonUseUnderlinePropertyInfo = "Button::use-underline"
    attrGet _ = getButtonUseUnderline
    attrSet _ = setButtonUseUnderline
    attrConstruct _ = constructButtonUseUnderline

-- VVV Prop "xalign"
   -- Type: TBasicType TFloat
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonXalign :: (MonadIO m, ButtonK o) => o -> m Float
getButtonXalign obj = liftIO $ getObjectPropertyFloat obj "xalign"

setButtonXalign :: (MonadIO m, ButtonK o) => o -> Float -> m ()
setButtonXalign obj val = liftIO $ setObjectPropertyFloat obj "xalign" val

constructButtonXalign :: Float -> IO ([Char], GValue)
constructButtonXalign val = constructObjectPropertyFloat "xalign" val

data ButtonXalignPropertyInfo
instance AttrInfo ButtonXalignPropertyInfo where
    type AttrAllowedOps ButtonXalignPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonXalignPropertyInfo = (~) Float
    type AttrBaseTypeConstraint ButtonXalignPropertyInfo = ButtonK
    type AttrGetType ButtonXalignPropertyInfo = Float
    type AttrLabel ButtonXalignPropertyInfo = "Button::xalign"
    attrGet _ = getButtonXalign
    attrSet _ = setButtonXalign
    attrConstruct _ = constructButtonXalign

-- VVV Prop "yalign"
   -- Type: TBasicType TFloat
   -- Flags: [PropertyReadable,PropertyWritable]

getButtonYalign :: (MonadIO m, ButtonK o) => o -> m Float
getButtonYalign obj = liftIO $ getObjectPropertyFloat obj "yalign"

setButtonYalign :: (MonadIO m, ButtonK o) => o -> Float -> m ()
setButtonYalign obj val = liftIO $ setObjectPropertyFloat obj "yalign" val

constructButtonYalign :: Float -> IO ([Char], GValue)
constructButtonYalign val = constructObjectPropertyFloat "yalign" val

data ButtonYalignPropertyInfo
instance AttrInfo ButtonYalignPropertyInfo where
    type AttrAllowedOps ButtonYalignPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ButtonYalignPropertyInfo = (~) Float
    type AttrBaseTypeConstraint ButtonYalignPropertyInfo = ButtonK
    type AttrGetType ButtonYalignPropertyInfo = Float
    type AttrLabel ButtonYalignPropertyInfo = "Button::yalign"
    attrGet _ = getButtonYalign
    attrSet _ = setButtonYalign
    attrConstruct _ = constructButtonYalign

type instance AttributeList Button = ButtonAttributeList
type ButtonAttributeList = ('[ '("action-name", ActionableActionNamePropertyInfo), '("action-target", ActionableActionTargetPropertyInfo), '("always-show-image", ButtonAlwaysShowImagePropertyInfo), '("app-paintable", WidgetAppPaintablePropertyInfo), '("border-width", ContainerBorderWidthPropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("child", ContainerChildPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("focus-on-click", ButtonFocusOnClickPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("image", ButtonImagePropertyInfo), '("image-position", ButtonImagePositionPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("label", ButtonLabelPropertyInfo), '("margin", WidgetMarginPropertyInfo), '("margin-bottom", WidgetMarginBottomPropertyInfo), '("margin-end", WidgetMarginEndPropertyInfo), '("margin-left", WidgetMarginLeftPropertyInfo), '("margin-right", WidgetMarginRightPropertyInfo), '("margin-start", WidgetMarginStartPropertyInfo), '("margin-top", WidgetMarginTopPropertyInfo), '("name", WidgetNamePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("parent", WidgetParentPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("related-action", ActivatableRelatedActionPropertyInfo), '("relief", ButtonReliefPropertyInfo), '("resize-mode", ContainerResizeModePropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("style", WidgetStylePropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("use-action-appearance", ActivatableUseActionAppearancePropertyInfo), '("use-stock", ButtonUseStockPropertyInfo), '("use-underline", ButtonUseUnderlinePropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo), '("xalign", ButtonXalignPropertyInfo), '("yalign", ButtonYalignPropertyInfo)] :: [(Symbol, *)])

data ButtonActivateSignalInfo
instance SignalInfo ButtonActivateSignalInfo where
    type HaskellCallbackType ButtonActivateSignalInfo = ButtonActivateCallback
    connectSignal _ = connectButtonActivate

data ButtonClickedSignalInfo
instance SignalInfo ButtonClickedSignalInfo where
    type HaskellCallbackType ButtonClickedSignalInfo = ButtonClickedCallback
    connectSignal _ = connectButtonClicked

data ButtonEnterSignalInfo
instance SignalInfo ButtonEnterSignalInfo where
    type HaskellCallbackType ButtonEnterSignalInfo = ButtonEnterCallback
    connectSignal _ = connectButtonEnter

data ButtonLeaveSignalInfo
instance SignalInfo ButtonLeaveSignalInfo where
    type HaskellCallbackType ButtonLeaveSignalInfo = ButtonLeaveCallback
    connectSignal _ = connectButtonLeave

data ButtonPressedSignalInfo
instance SignalInfo ButtonPressedSignalInfo where
    type HaskellCallbackType ButtonPressedSignalInfo = ButtonPressedCallback
    connectSignal _ = connectButtonPressed

data ButtonReleasedSignalInfo
instance SignalInfo ButtonReleasedSignalInfo where
    type HaskellCallbackType ButtonReleasedSignalInfo = ButtonReleasedCallback
    connectSignal _ = connectButtonReleased

type instance SignalList Button = ButtonSignalList
type ButtonSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("activate", ButtonActivateSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("clicked", ButtonClickedSignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("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", ButtonEnterSignalInfo), '("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", ButtonLeaveSignalInfo), '("leave-notify-event", WidgetLeaveNotifyEventSignalInfo), '("map", WidgetMapSignalInfo), '("map-event", WidgetMapEventSignalInfo), '("mnemonic-activate", WidgetMnemonicActivateSignalInfo), '("motion-notify-event", WidgetMotionNotifyEventSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("parent-set", WidgetParentSetSignalInfo), '("popup-menu", WidgetPopupMenuSignalInfo), '("pressed", ButtonPressedSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("released", ButtonReleasedSignalInfo), '("remove", ContainerRemoveSignalInfo), '("screen-changed", WidgetScreenChangedSignalInfo), '("scroll-event", WidgetScrollEventSignalInfo), '("selection-clear-event", WidgetSelectionClearEventSignalInfo), '("selection-get", WidgetSelectionGetSignalInfo), '("selection-notify-event", WidgetSelectionNotifyEventSignalInfo), '("selection-received", WidgetSelectionReceivedSignalInfo), '("selection-request-event", WidgetSelectionRequestEventSignalInfo), '("set-focus-child", ContainerSetFocusChildSignalInfo), '("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 Button::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TInterface "Gtk" "Button"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_button_new" gtk_button_new :: 
    IO (Ptr Button)


buttonNew ::
    (MonadIO m) =>
    m Button
buttonNew  = liftIO $ do
    result <- gtk_button_new
    checkUnexpectedReturnNULL "gtk_button_new" result
    result' <- (newObject Button) result
    return result'

-- method Button::new_from_icon_name
-- method type : Constructor
-- Args : [Arg {argName = "icon_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "size", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "icon_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "size", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Button"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_button_new_from_icon_name" gtk_button_new_from_icon_name :: 
    CString ->                              -- icon_name : TBasicType TUTF8
    Int32 ->                                -- size : TBasicType TInt32
    IO (Ptr Button)


buttonNewFromIconName ::
    (MonadIO m) =>
    T.Text ->                               -- icon_name
    Int32 ->                                -- size
    m Button
buttonNewFromIconName icon_name size = liftIO $ do
    icon_name' <- textToCString icon_name
    result <- gtk_button_new_from_icon_name icon_name' size
    checkUnexpectedReturnNULL "gtk_button_new_from_icon_name" result
    result' <- (newObject Button) result
    freeMem icon_name'
    return result'

-- method Button::new_from_stock
-- method type : Constructor
-- Args : [Arg {argName = "stock_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "stock_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Button"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_button_new_from_stock" gtk_button_new_from_stock :: 
    CString ->                              -- stock_id : TBasicType TUTF8
    IO (Ptr Button)

{-# DEPRECATED buttonNewFromStock ["(Since version 3.10)","Use gtk_button_new_with_label() instead."]#-}
buttonNewFromStock ::
    (MonadIO m) =>
    T.Text ->                               -- stock_id
    m Button
buttonNewFromStock stock_id = liftIO $ do
    stock_id' <- textToCString stock_id
    result <- gtk_button_new_from_stock stock_id'
    checkUnexpectedReturnNULL "gtk_button_new_from_stock" result
    result' <- (newObject Button) result
    freeMem stock_id'
    return result'

-- method Button::new_with_label
-- method type : Constructor
-- Args : [Arg {argName = "label", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "label", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Button"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_button_new_with_label" gtk_button_new_with_label :: 
    CString ->                              -- label : TBasicType TUTF8
    IO (Ptr Button)


buttonNewWithLabel ::
    (MonadIO m) =>
    T.Text ->                               -- label
    m Button
buttonNewWithLabel label = liftIO $ do
    label' <- textToCString label
    result <- gtk_button_new_with_label label'
    checkUnexpectedReturnNULL "gtk_button_new_with_label" result
    result' <- (newObject Button) result
    freeMem label'
    return result'

-- method Button::new_with_mnemonic
-- method type : Constructor
-- Args : [Arg {argName = "label", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "label", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Button"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_button_new_with_mnemonic" gtk_button_new_with_mnemonic :: 
    CString ->                              -- label : TBasicType TUTF8
    IO (Ptr Button)


buttonNewWithMnemonic ::
    (MonadIO m) =>
    T.Text ->                               -- label
    m Button
buttonNewWithMnemonic label = liftIO $ do
    label' <- textToCString label
    result <- gtk_button_new_with_mnemonic label'
    checkUnexpectedReturnNULL "gtk_button_new_with_mnemonic" result
    result' <- (newObject Button) result
    freeMem label'
    return result'

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

foreign import ccall "gtk_button_clicked" gtk_button_clicked :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO ()


buttonClicked ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ()
buttonClicked _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_button_clicked _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_enter" gtk_button_enter :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO ()

{-# DEPRECATED buttonEnter ["(Since version 2.20)","Use the #GtkWidget::enter-notify-event signal."]#-}
buttonEnter ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ()
buttonEnter _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_button_enter _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_get_alignment" gtk_button_get_alignment :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    Ptr CFloat ->                           -- xalign : TBasicType TFloat
    Ptr CFloat ->                           -- yalign : TBasicType TFloat
    IO ()

{-# DEPRECATED buttonGetAlignment ["(Since version 3.14)","Access the child widget directly if you need to control","its alignment."]#-}
buttonGetAlignment ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m (Float,Float)
buttonGetAlignment _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    xalign <- allocMem :: IO (Ptr CFloat)
    yalign <- allocMem :: IO (Ptr CFloat)
    gtk_button_get_alignment _obj' xalign yalign
    xalign' <- peek xalign
    let xalign'' = realToFrac xalign'
    yalign' <- peek yalign
    let yalign'' = realToFrac yalign'
    touchManagedPtr _obj
    freeMem xalign
    freeMem yalign
    return (xalign'', yalign'')

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

foreign import ccall "gtk_button_get_always_show_image" gtk_button_get_always_show_image :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CInt


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

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

foreign import ccall "gtk_button_get_event_window" gtk_button_get_event_window :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO (Ptr Gdk.Window)


buttonGetEventWindow ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m Gdk.Window
buttonGetEventWindow _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_event_window _obj'
    checkUnexpectedReturnNULL "gtk_button_get_event_window" result
    result' <- (newObject Gdk.Window) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_focus_on_click" gtk_button_get_focus_on_click :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CInt


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

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

foreign import ccall "gtk_button_get_image" gtk_button_get_image :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO (Ptr Widget)


buttonGetImage ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m Widget
buttonGetImage _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_image _obj'
    checkUnexpectedReturnNULL "gtk_button_get_image" result
    result' <- (newObject Widget) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_image_position" gtk_button_get_image_position :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CUInt


buttonGetImagePosition ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m PositionType
buttonGetImagePosition _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_image_position _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_label" gtk_button_get_label :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CString


buttonGetLabel ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m T.Text
buttonGetLabel _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_label _obj'
    checkUnexpectedReturnNULL "gtk_button_get_label" result
    result' <- cstringToText result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_relief" gtk_button_get_relief :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CUInt


buttonGetRelief ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ReliefStyle
buttonGetRelief _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_relief _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_use_stock" gtk_button_get_use_stock :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CInt

{-# DEPRECATED buttonGetUseStock ["(Since version 3.10)"]#-}
buttonGetUseStock ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m Bool
buttonGetUseStock _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_button_get_use_stock _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_button_get_use_underline" gtk_button_get_use_underline :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO CInt


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

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

foreign import ccall "gtk_button_leave" gtk_button_leave :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO ()

{-# DEPRECATED buttonLeave ["(Since version 2.20)","Use the #GtkWidget::leave-notify-event signal."]#-}
buttonLeave ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ()
buttonLeave _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_button_leave _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_pressed" gtk_button_pressed :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO ()

{-# DEPRECATED buttonPressed ["(Since version 2.20)","Use the #GtkWidget::button-press-event signal."]#-}
buttonPressed ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ()
buttonPressed _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_button_pressed _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_released" gtk_button_released :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    IO ()

{-# DEPRECATED buttonReleased ["(Since version 2.20)","Use the #GtkWidget::button-release-event signal."]#-}
buttonReleased ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    m ()
buttonReleased _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_button_released _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_set_alignment" gtk_button_set_alignment :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CFloat ->                               -- xalign : TBasicType TFloat
    CFloat ->                               -- yalign : TBasicType TFloat
    IO ()

{-# DEPRECATED buttonSetAlignment ["(Since version 3.14)","Access the child widget directly if you need to control","its alignment."]#-}
buttonSetAlignment ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    Float ->                                -- xalign
    Float ->                                -- yalign
    m ()
buttonSetAlignment _obj xalign yalign = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let xalign' = realToFrac xalign
    let yalign' = realToFrac yalign
    gtk_button_set_alignment _obj' xalign' yalign'
    touchManagedPtr _obj
    return ()

-- method Button::set_always_show_image
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "always_show", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "always_show", 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_button_set_always_show_image" gtk_button_set_always_show_image :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CInt ->                                 -- always_show : TBasicType TBoolean
    IO ()


buttonSetAlwaysShowImage ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- always_show
    m ()
buttonSetAlwaysShowImage _obj always_show = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let always_show' = (fromIntegral . fromEnum) always_show
    gtk_button_set_always_show_image _obj' always_show'
    touchManagedPtr _obj
    return ()

-- method Button::set_focus_on_click
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "focus_on_click", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "focus_on_click", 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_button_set_focus_on_click" gtk_button_set_focus_on_click :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CInt ->                                 -- focus_on_click : TBasicType TBoolean
    IO ()


buttonSetFocusOnClick ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- focus_on_click
    m ()
buttonSetFocusOnClick _obj focus_on_click = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let focus_on_click' = (fromIntegral . fromEnum) focus_on_click
    gtk_button_set_focus_on_click _obj' focus_on_click'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_set_image" gtk_button_set_image :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    Ptr Widget ->                           -- image : TInterface "Gtk" "Widget"
    IO ()


buttonSetImage ::
    (MonadIO m, ButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    b ->                                    -- image
    m ()
buttonSetImage _obj image = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let image' = unsafeManagedPtrCastPtr image
    gtk_button_set_image _obj' image'
    touchManagedPtr _obj
    touchManagedPtr image
    return ()

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

foreign import ccall "gtk_button_set_image_position" gtk_button_set_image_position :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CUInt ->                                -- position : TInterface "Gtk" "PositionType"
    IO ()


buttonSetImagePosition ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    PositionType ->                         -- position
    m ()
buttonSetImagePosition _obj position = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let position' = (fromIntegral . fromEnum) position
    gtk_button_set_image_position _obj' position'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_button_set_label" gtk_button_set_label :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CString ->                              -- label : TBasicType TUTF8
    IO ()


buttonSetLabel ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- label
    m ()
buttonSetLabel _obj label = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    label' <- textToCString label
    gtk_button_set_label _obj' label'
    touchManagedPtr _obj
    freeMem label'
    return ()

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

foreign import ccall "gtk_button_set_relief" gtk_button_set_relief :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CUInt ->                                -- relief : TInterface "Gtk" "ReliefStyle"
    IO ()


buttonSetRelief ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    ReliefStyle ->                          -- relief
    m ()
buttonSetRelief _obj relief = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let relief' = (fromIntegral . fromEnum) relief
    gtk_button_set_relief _obj' relief'
    touchManagedPtr _obj
    return ()

-- method Button::set_use_stock
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "use_stock", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "use_stock", 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_button_set_use_stock" gtk_button_set_use_stock :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CInt ->                                 -- use_stock : TBasicType TBoolean
    IO ()

{-# DEPRECATED buttonSetUseStock ["(Since version 3.10)"]#-}
buttonSetUseStock ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- use_stock
    m ()
buttonSetUseStock _obj use_stock = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let use_stock' = (fromIntegral . fromEnum) use_stock
    gtk_button_set_use_stock _obj' use_stock'
    touchManagedPtr _obj
    return ()

-- method Button::set_use_underline
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "use_underline", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Button", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "use_underline", 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_button_set_use_underline" gtk_button_set_use_underline :: 
    Ptr Button ->                           -- _obj : TInterface "Gtk" "Button"
    CInt ->                                 -- use_underline : TBasicType TBoolean
    IO ()


buttonSetUseUnderline ::
    (MonadIO m, ButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- use_underline
    m ()
buttonSetUseUnderline _obj use_underline = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let use_underline' = (fromIntegral . fromEnum) use_underline
    gtk_button_set_use_underline _obj' use_underline'
    touchManagedPtr _obj
    return ()