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

-- * Exported types
    ToolButton(..)                          ,
    ToolButtonK                             ,
    toToolButton                            ,
    noToolButton                            ,


 -- * Methods
-- ** toolButtonGetIconName
    toolButtonGetIconName                   ,


-- ** toolButtonGetIconWidget
    toolButtonGetIconWidget                 ,


-- ** toolButtonGetLabel
    toolButtonGetLabel                      ,


-- ** toolButtonGetLabelWidget
    toolButtonGetLabelWidget                ,


-- ** toolButtonGetStockId
    toolButtonGetStockId                    ,


-- ** toolButtonGetUseUnderline
    toolButtonGetUseUnderline               ,


-- ** toolButtonNew
    toolButtonNew                           ,


-- ** toolButtonNewFromStock
    toolButtonNewFromStock                  ,


-- ** toolButtonSetIconName
    toolButtonSetIconName                   ,


-- ** toolButtonSetIconWidget
    toolButtonSetIconWidget                 ,


-- ** toolButtonSetLabel
    toolButtonSetLabel                      ,


-- ** toolButtonSetLabelWidget
    toolButtonSetLabelWidget                ,


-- ** toolButtonSetStockId
    toolButtonSetStockId                    ,


-- ** toolButtonSetUseUnderline
    toolButtonSetUseUnderline               ,




 -- * Properties
-- ** IconName
    ToolButtonIconNamePropertyInfo          ,
    constructToolButtonIconName             ,
    getToolButtonIconName                   ,
    setToolButtonIconName                   ,


-- ** IconWidget
    ToolButtonIconWidgetPropertyInfo        ,
    constructToolButtonIconWidget           ,
    getToolButtonIconWidget                 ,
    setToolButtonIconWidget                 ,


-- ** Label
    ToolButtonLabelPropertyInfo             ,
    constructToolButtonLabel                ,
    getToolButtonLabel                      ,
    setToolButtonLabel                      ,


-- ** LabelWidget
    ToolButtonLabelWidgetPropertyInfo       ,
    constructToolButtonLabelWidget          ,
    getToolButtonLabelWidget                ,
    setToolButtonLabelWidget                ,


-- ** StockId
    ToolButtonStockIdPropertyInfo           ,
    constructToolButtonStockId              ,
    getToolButtonStockId                    ,
    setToolButtonStockId                    ,


-- ** UseUnderline
    ToolButtonUseUnderlinePropertyInfo      ,
    constructToolButtonUseUnderline         ,
    getToolButtonUseUnderline               ,
    setToolButtonUseUnderline               ,




 -- * Signals
-- ** Clicked
    ToolButtonClickedCallback               ,
    ToolButtonClickedCallbackC              ,
    ToolButtonClickedSignalInfo             ,
    afterToolButtonClicked                  ,
    mkToolButtonClickedCallback             ,
    noToolButtonClickedCallback             ,
    onToolButtonClicked                     ,
    toolButtonClickedCallbackWrapper        ,
    toolButtonClickedClosure                ,




    ) 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 ToolButton = ToolButton (ForeignPtr ToolButton)
foreign import ccall "gtk_tool_button_get_type"
    c_gtk_tool_button_get_type :: IO GType

type instance ParentTypes ToolButton = ToolButtonParentTypes
type ToolButtonParentTypes = '[ToolItem, Bin, Container, Widget, GObject.Object, Atk.ImplementorIface, Actionable, Activatable, Buildable]

instance GObject ToolButton where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_tool_button_get_type
    

class GObject o => ToolButtonK o
instance (GObject o, IsDescendantOf ToolButton o) => ToolButtonK o

toToolButton :: ToolButtonK o => o -> IO ToolButton
toToolButton = unsafeCastTo ToolButton

noToolButton :: Maybe ToolButton
noToolButton = Nothing

-- signal ToolButton::clicked
type ToolButtonClickedCallback =
    IO ()

noToolButtonClickedCallback :: Maybe ToolButtonClickedCallback
noToolButtonClickedCallback = Nothing

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

foreign import ccall "wrapper"
    mkToolButtonClickedCallback :: ToolButtonClickedCallbackC -> IO (FunPtr ToolButtonClickedCallbackC)

toolButtonClickedClosure :: ToolButtonClickedCallback -> IO Closure
toolButtonClickedClosure cb = newCClosure =<< mkToolButtonClickedCallback wrapped
    where wrapped = toolButtonClickedCallbackWrapper cb

toolButtonClickedCallbackWrapper ::
    ToolButtonClickedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
toolButtonClickedCallbackWrapper _cb _ _ = do
    _cb 

onToolButtonClicked :: (GObject a, MonadIO m) => a -> ToolButtonClickedCallback -> m SignalHandlerId
onToolButtonClicked obj cb = liftIO $ connectToolButtonClicked obj cb SignalConnectBefore
afterToolButtonClicked :: (GObject a, MonadIO m) => a -> ToolButtonClickedCallback -> m SignalHandlerId
afterToolButtonClicked obj cb = connectToolButtonClicked obj cb SignalConnectAfter

connectToolButtonClicked :: (GObject a, MonadIO m) =>
                            a -> ToolButtonClickedCallback -> SignalConnectMode -> m SignalHandlerId
connectToolButtonClicked obj cb after = liftIO $ do
    cb' <- mkToolButtonClickedCallback (toolButtonClickedCallbackWrapper cb)
    connectSignalFunPtr obj "clicked" cb' after

-- VVV Prop "icon-name"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable]

getToolButtonIconName :: (MonadIO m, ToolButtonK o) => o -> m T.Text
getToolButtonIconName obj = liftIO $ getObjectPropertyString obj "icon-name"

setToolButtonIconName :: (MonadIO m, ToolButtonK o) => o -> T.Text -> m ()
setToolButtonIconName obj val = liftIO $ setObjectPropertyString obj "icon-name" val

constructToolButtonIconName :: T.Text -> IO ([Char], GValue)
constructToolButtonIconName val = constructObjectPropertyString "icon-name" val

data ToolButtonIconNamePropertyInfo
instance AttrInfo ToolButtonIconNamePropertyInfo where
    type AttrAllowedOps ToolButtonIconNamePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonIconNamePropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint ToolButtonIconNamePropertyInfo = ToolButtonK
    type AttrGetType ToolButtonIconNamePropertyInfo = T.Text
    type AttrLabel ToolButtonIconNamePropertyInfo = "ToolButton::icon-name"
    attrGet _ = getToolButtonIconName
    attrSet _ = setToolButtonIconName
    attrConstruct _ = constructToolButtonIconName

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

getToolButtonIconWidget :: (MonadIO m, ToolButtonK o) => o -> m Widget
getToolButtonIconWidget obj = liftIO $ getObjectPropertyObject obj "icon-widget" Widget

setToolButtonIconWidget :: (MonadIO m, ToolButtonK o, WidgetK a) => o -> a -> m ()
setToolButtonIconWidget obj val = liftIO $ setObjectPropertyObject obj "icon-widget" val

constructToolButtonIconWidget :: (WidgetK a) => a -> IO ([Char], GValue)
constructToolButtonIconWidget val = constructObjectPropertyObject "icon-widget" val

data ToolButtonIconWidgetPropertyInfo
instance AttrInfo ToolButtonIconWidgetPropertyInfo where
    type AttrAllowedOps ToolButtonIconWidgetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonIconWidgetPropertyInfo = WidgetK
    type AttrBaseTypeConstraint ToolButtonIconWidgetPropertyInfo = ToolButtonK
    type AttrGetType ToolButtonIconWidgetPropertyInfo = Widget
    type AttrLabel ToolButtonIconWidgetPropertyInfo = "ToolButton::icon-widget"
    attrGet _ = getToolButtonIconWidget
    attrSet _ = setToolButtonIconWidget
    attrConstruct _ = constructToolButtonIconWidget

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

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

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

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

data ToolButtonLabelPropertyInfo
instance AttrInfo ToolButtonLabelPropertyInfo where
    type AttrAllowedOps ToolButtonLabelPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonLabelPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint ToolButtonLabelPropertyInfo = ToolButtonK
    type AttrGetType ToolButtonLabelPropertyInfo = T.Text
    type AttrLabel ToolButtonLabelPropertyInfo = "ToolButton::label"
    attrGet _ = getToolButtonLabel
    attrSet _ = setToolButtonLabel
    attrConstruct _ = constructToolButtonLabel

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

getToolButtonLabelWidget :: (MonadIO m, ToolButtonK o) => o -> m Widget
getToolButtonLabelWidget obj = liftIO $ getObjectPropertyObject obj "label-widget" Widget

setToolButtonLabelWidget :: (MonadIO m, ToolButtonK o, WidgetK a) => o -> a -> m ()
setToolButtonLabelWidget obj val = liftIO $ setObjectPropertyObject obj "label-widget" val

constructToolButtonLabelWidget :: (WidgetK a) => a -> IO ([Char], GValue)
constructToolButtonLabelWidget val = constructObjectPropertyObject "label-widget" val

data ToolButtonLabelWidgetPropertyInfo
instance AttrInfo ToolButtonLabelWidgetPropertyInfo where
    type AttrAllowedOps ToolButtonLabelWidgetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonLabelWidgetPropertyInfo = WidgetK
    type AttrBaseTypeConstraint ToolButtonLabelWidgetPropertyInfo = ToolButtonK
    type AttrGetType ToolButtonLabelWidgetPropertyInfo = Widget
    type AttrLabel ToolButtonLabelWidgetPropertyInfo = "ToolButton::label-widget"
    attrGet _ = getToolButtonLabelWidget
    attrSet _ = setToolButtonLabelWidget
    attrConstruct _ = constructToolButtonLabelWidget

-- VVV Prop "stock-id"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable]

getToolButtonStockId :: (MonadIO m, ToolButtonK o) => o -> m T.Text
getToolButtonStockId obj = liftIO $ getObjectPropertyString obj "stock-id"

setToolButtonStockId :: (MonadIO m, ToolButtonK o) => o -> T.Text -> m ()
setToolButtonStockId obj val = liftIO $ setObjectPropertyString obj "stock-id" val

constructToolButtonStockId :: T.Text -> IO ([Char], GValue)
constructToolButtonStockId val = constructObjectPropertyString "stock-id" val

data ToolButtonStockIdPropertyInfo
instance AttrInfo ToolButtonStockIdPropertyInfo where
    type AttrAllowedOps ToolButtonStockIdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonStockIdPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint ToolButtonStockIdPropertyInfo = ToolButtonK
    type AttrGetType ToolButtonStockIdPropertyInfo = T.Text
    type AttrLabel ToolButtonStockIdPropertyInfo = "ToolButton::stock-id"
    attrGet _ = getToolButtonStockId
    attrSet _ = setToolButtonStockId
    attrConstruct _ = constructToolButtonStockId

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

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

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

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

data ToolButtonUseUnderlinePropertyInfo
instance AttrInfo ToolButtonUseUnderlinePropertyInfo where
    type AttrAllowedOps ToolButtonUseUnderlinePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToolButtonUseUnderlinePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ToolButtonUseUnderlinePropertyInfo = ToolButtonK
    type AttrGetType ToolButtonUseUnderlinePropertyInfo = Bool
    type AttrLabel ToolButtonUseUnderlinePropertyInfo = "ToolButton::use-underline"
    attrGet _ = getToolButtonUseUnderline
    attrSet _ = setToolButtonUseUnderline
    attrConstruct _ = constructToolButtonUseUnderline

type instance AttributeList ToolButton = ToolButtonAttributeList
type ToolButtonAttributeList = ('[ '("action-name", ActionableActionNamePropertyInfo), '("action-target", ActionableActionTargetPropertyInfo), '("app-paintable", WidgetAppPaintablePropertyInfo), '("border-width", ContainerBorderWidthPropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("child", ContainerChildPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("icon-name", ToolButtonIconNamePropertyInfo), '("icon-widget", ToolButtonIconWidgetPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("is-important", ToolItemIsImportantPropertyInfo), '("label", ToolButtonLabelPropertyInfo), '("label-widget", ToolButtonLabelWidgetPropertyInfo), '("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), '("resize-mode", ContainerResizeModePropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("stock-id", ToolButtonStockIdPropertyInfo), '("style", WidgetStylePropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("use-action-appearance", ActivatableUseActionAppearancePropertyInfo), '("use-underline", ToolButtonUseUnderlinePropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("visible-horizontal", ToolItemVisibleHorizontalPropertyInfo), '("visible-vertical", ToolItemVisibleVerticalPropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo)] :: [(Symbol, *)])

data ToolButtonClickedSignalInfo
instance SignalInfo ToolButtonClickedSignalInfo where
    type HaskellCallbackType ToolButtonClickedSignalInfo = ToolButtonClickedCallback
    connectSignal _ = connectToolButtonClicked

type instance SignalList ToolButton = ToolButtonSignalList
type ToolButtonSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("clicked", ToolButtonClickedSignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("create-menu-proxy", ToolItemCreateMenuProxySignalInfo), '("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-notify-event", WidgetEnterNotifyEventSignalInfo), '("event", WidgetEventSignalInfo), '("event-after", WidgetEventAfterSignalInfo), '("focus", WidgetFocusSignalInfo), '("focus-in-event", WidgetFocusInEventSignalInfo), '("focus-out-event", WidgetFocusOutEventSignalInfo), '("grab-broken-event", WidgetGrabBrokenEventSignalInfo), '("grab-focus", WidgetGrabFocusSignalInfo), '("grab-notify", WidgetGrabNotifySignalInfo), '("hide", WidgetHideSignalInfo), '("hierarchy-changed", WidgetHierarchyChangedSignalInfo), '("key-press-event", WidgetKeyPressEventSignalInfo), '("key-release-event", WidgetKeyReleaseEventSignalInfo), '("keynav-failed", WidgetKeynavFailedSignalInfo), '("leave-notify-event", WidgetLeaveNotifyEventSignalInfo), '("map", WidgetMapSignalInfo), '("map-event", WidgetMapEventSignalInfo), '("mnemonic-activate", WidgetMnemonicActivateSignalInfo), '("motion-notify-event", WidgetMotionNotifyEventSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("parent-set", WidgetParentSetSignalInfo), '("popup-menu", WidgetPopupMenuSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("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), '("toolbar-reconfigured", ToolItemToolbarReconfiguredSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "gtk_tool_button_new" gtk_tool_button_new :: 
    Ptr Widget ->                           -- icon_widget : TInterface "Gtk" "Widget"
    CString ->                              -- label : TBasicType TUTF8
    IO (Ptr ToolButton)


toolButtonNew ::
    (MonadIO m, WidgetK a) =>
    Maybe (a) ->                            -- icon_widget
    Maybe (T.Text) ->                       -- label
    m ToolButton
toolButtonNew icon_widget label = liftIO $ do
    maybeIcon_widget <- case icon_widget of
        Nothing -> return nullPtr
        Just jIcon_widget -> do
            let jIcon_widget' = unsafeManagedPtrCastPtr jIcon_widget
            return jIcon_widget'
    maybeLabel <- case label of
        Nothing -> return nullPtr
        Just jLabel -> do
            jLabel' <- textToCString jLabel
            return jLabel'
    result <- gtk_tool_button_new maybeIcon_widget maybeLabel
    checkUnexpectedReturnNULL "gtk_tool_button_new" result
    result' <- (newObject ToolButton) result
    whenJust icon_widget touchManagedPtr
    freeMem maybeLabel
    return result'

-- method ToolButton::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" "ToolButton"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tool_button_new_from_stock" gtk_tool_button_new_from_stock :: 
    CString ->                              -- stock_id : TBasicType TUTF8
    IO (Ptr ToolButton)

{-# DEPRECATED toolButtonNewFromStock ["(Since version 3.10)","Use gtk_tool_button_new() together with","gtk_image_new_from_icon_name() instead."]#-}
toolButtonNewFromStock ::
    (MonadIO m) =>
    T.Text ->                               -- stock_id
    m ToolButton
toolButtonNewFromStock stock_id = liftIO $ do
    stock_id' <- textToCString stock_id
    result <- gtk_tool_button_new_from_stock stock_id'
    checkUnexpectedReturnNULL "gtk_tool_button_new_from_stock" result
    result' <- (newObject ToolButton) result
    freeMem stock_id'
    return result'

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

foreign import ccall "gtk_tool_button_get_icon_name" gtk_tool_button_get_icon_name :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO CString


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

-- method ToolButton::get_icon_widget
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "ToolButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "ToolButton", 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_tool_button_get_icon_widget" gtk_tool_button_get_icon_widget :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO (Ptr Widget)


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

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

foreign import ccall "gtk_tool_button_get_label" gtk_tool_button_get_label :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO CString


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

-- method ToolButton::get_label_widget
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "ToolButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "ToolButton", 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_tool_button_get_label_widget" gtk_tool_button_get_label_widget :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO (Ptr Widget)


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

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

foreign import ccall "gtk_tool_button_get_stock_id" gtk_tool_button_get_stock_id :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO CString

{-# DEPRECATED toolButtonGetStockId ["(Since version 3.10)","Use gtk_tool_button_get_icon_name() instead."]#-}
toolButtonGetStockId ::
    (MonadIO m, ToolButtonK a) =>
    a ->                                    -- _obj
    m T.Text
toolButtonGetStockId _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_tool_button_get_stock_id _obj'
    checkUnexpectedReturnNULL "gtk_tool_button_get_stock_id" result
    result' <- cstringToText result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_tool_button_get_use_underline" gtk_tool_button_get_use_underline :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    IO CInt


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

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

foreign import ccall "gtk_tool_button_set_icon_name" gtk_tool_button_set_icon_name :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    CString ->                              -- icon_name : TBasicType TUTF8
    IO ()


toolButtonSetIconName ::
    (MonadIO m, ToolButtonK a) =>
    a ->                                    -- _obj
    Maybe (T.Text) ->                       -- icon_name
    m ()
toolButtonSetIconName _obj icon_name = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeIcon_name <- case icon_name of
        Nothing -> return nullPtr
        Just jIcon_name -> do
            jIcon_name' <- textToCString jIcon_name
            return jIcon_name'
    gtk_tool_button_set_icon_name _obj' maybeIcon_name
    touchManagedPtr _obj
    freeMem maybeIcon_name
    return ()

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

foreign import ccall "gtk_tool_button_set_icon_widget" gtk_tool_button_set_icon_widget :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    Ptr Widget ->                           -- icon_widget : TInterface "Gtk" "Widget"
    IO ()


toolButtonSetIconWidget ::
    (MonadIO m, ToolButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- icon_widget
    m ()
toolButtonSetIconWidget _obj icon_widget = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeIcon_widget <- case icon_widget of
        Nothing -> return nullPtr
        Just jIcon_widget -> do
            let jIcon_widget' = unsafeManagedPtrCastPtr jIcon_widget
            return jIcon_widget'
    gtk_tool_button_set_icon_widget _obj' maybeIcon_widget
    touchManagedPtr _obj
    whenJust icon_widget touchManagedPtr
    return ()

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

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


toolButtonSetLabel ::
    (MonadIO m, ToolButtonK a) =>
    a ->                                    -- _obj
    Maybe (T.Text) ->                       -- label
    m ()
toolButtonSetLabel _obj label = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeLabel <- case label of
        Nothing -> return nullPtr
        Just jLabel -> do
            jLabel' <- textToCString jLabel
            return jLabel'
    gtk_tool_button_set_label _obj' maybeLabel
    touchManagedPtr _obj
    freeMem maybeLabel
    return ()

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

foreign import ccall "gtk_tool_button_set_label_widget" gtk_tool_button_set_label_widget :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    Ptr Widget ->                           -- label_widget : TInterface "Gtk" "Widget"
    IO ()


toolButtonSetLabelWidget ::
    (MonadIO m, ToolButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- label_widget
    m ()
toolButtonSetLabelWidget _obj label_widget = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeLabel_widget <- case label_widget of
        Nothing -> return nullPtr
        Just jLabel_widget -> do
            let jLabel_widget' = unsafeManagedPtrCastPtr jLabel_widget
            return jLabel_widget'
    gtk_tool_button_set_label_widget _obj' maybeLabel_widget
    touchManagedPtr _obj
    whenJust label_widget touchManagedPtr
    return ()

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

foreign import ccall "gtk_tool_button_set_stock_id" gtk_tool_button_set_stock_id :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    CString ->                              -- stock_id : TBasicType TUTF8
    IO ()

{-# DEPRECATED toolButtonSetStockId ["(Since version 3.10)","Use gtk_tool_button_set_icon_name() instead."]#-}
toolButtonSetStockId ::
    (MonadIO m, ToolButtonK a) =>
    a ->                                    -- _obj
    Maybe (T.Text) ->                       -- stock_id
    m ()
toolButtonSetStockId _obj stock_id = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeStock_id <- case stock_id of
        Nothing -> return nullPtr
        Just jStock_id -> do
            jStock_id' <- textToCString jStock_id
            return jStock_id'
    gtk_tool_button_set_stock_id _obj' maybeStock_id
    touchManagedPtr _obj
    freeMem maybeStock_id
    return ()

-- method ToolButton::set_use_underline
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "ToolButton", 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" "ToolButton", 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_tool_button_set_use_underline" gtk_tool_button_set_use_underline :: 
    Ptr ToolButton ->                       -- _obj : TInterface "Gtk" "ToolButton"
    CInt ->                                 -- use_underline : TBasicType TBoolean
    IO ()


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