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

-- * Exported types
    ToggleAction(..)                        ,
    ToggleActionK                           ,
    toToggleAction                          ,
    noToggleAction                          ,


 -- * Methods
-- ** toggleActionGetActive
    toggleActionGetActive                   ,


-- ** toggleActionGetDrawAsRadio
    toggleActionGetDrawAsRadio              ,


-- ** toggleActionNew
    toggleActionNew                         ,


-- ** toggleActionSetActive
    toggleActionSetActive                   ,


-- ** toggleActionSetDrawAsRadio
    toggleActionSetDrawAsRadio              ,


-- ** toggleActionToggled
    toggleActionToggled                     ,




 -- * Properties
-- ** Active
    ToggleActionActivePropertyInfo          ,
    constructToggleActionActive             ,
    getToggleActionActive                   ,
    setToggleActionActive                   ,


-- ** DrawAsRadio
    ToggleActionDrawAsRadioPropertyInfo     ,
    constructToggleActionDrawAsRadio        ,
    getToggleActionDrawAsRadio              ,
    setToggleActionDrawAsRadio              ,




 -- * Signals
-- ** Toggled
    ToggleActionToggledCallback             ,
    ToggleActionToggledCallbackC            ,
    ToggleActionToggledSignalInfo           ,
    afterToggleActionToggled                ,
    mkToggleActionToggledCallback           ,
    noToggleActionToggledCallback           ,
    onToggleActionToggled                   ,
    toggleActionToggledCallbackWrapper      ,
    toggleActionToggledClosure              ,




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

newtype ToggleAction = ToggleAction (ForeignPtr ToggleAction)
foreign import ccall "gtk_toggle_action_get_type"
    c_gtk_toggle_action_get_type :: IO GType

type instance ParentTypes ToggleAction = ToggleActionParentTypes
type ToggleActionParentTypes = '[Action, GObject.Object, Buildable]

instance GObject ToggleAction where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_gtk_toggle_action_get_type
    

class GObject o => ToggleActionK o
instance (GObject o, IsDescendantOf ToggleAction o) => ToggleActionK o

toToggleAction :: ToggleActionK o => o -> IO ToggleAction
toToggleAction = unsafeCastTo ToggleAction

noToggleAction :: Maybe ToggleAction
noToggleAction = Nothing

-- signal ToggleAction::toggled
type ToggleActionToggledCallback =
    IO ()

noToggleActionToggledCallback :: Maybe ToggleActionToggledCallback
noToggleActionToggledCallback = Nothing

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

foreign import ccall "wrapper"
    mkToggleActionToggledCallback :: ToggleActionToggledCallbackC -> IO (FunPtr ToggleActionToggledCallbackC)

toggleActionToggledClosure :: ToggleActionToggledCallback -> IO Closure
toggleActionToggledClosure cb = newCClosure =<< mkToggleActionToggledCallback wrapped
    where wrapped = toggleActionToggledCallbackWrapper cb

toggleActionToggledCallbackWrapper ::
    ToggleActionToggledCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
toggleActionToggledCallbackWrapper _cb _ _ = do
    _cb 

onToggleActionToggled :: (GObject a, MonadIO m) => a -> ToggleActionToggledCallback -> m SignalHandlerId
onToggleActionToggled obj cb = liftIO $ connectToggleActionToggled obj cb SignalConnectBefore
afterToggleActionToggled :: (GObject a, MonadIO m) => a -> ToggleActionToggledCallback -> m SignalHandlerId
afterToggleActionToggled obj cb = connectToggleActionToggled obj cb SignalConnectAfter

connectToggleActionToggled :: (GObject a, MonadIO m) =>
                              a -> ToggleActionToggledCallback -> SignalConnectMode -> m SignalHandlerId
connectToggleActionToggled obj cb after = liftIO $ do
    cb' <- mkToggleActionToggledCallback (toggleActionToggledCallbackWrapper cb)
    connectSignalFunPtr obj "toggled" cb' after

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

getToggleActionActive :: (MonadIO m, ToggleActionK o) => o -> m Bool
getToggleActionActive obj = liftIO $ getObjectPropertyBool obj "active"

setToggleActionActive :: (MonadIO m, ToggleActionK o) => o -> Bool -> m ()
setToggleActionActive obj val = liftIO $ setObjectPropertyBool obj "active" val

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

data ToggleActionActivePropertyInfo
instance AttrInfo ToggleActionActivePropertyInfo where
    type AttrAllowedOps ToggleActionActivePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToggleActionActivePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ToggleActionActivePropertyInfo = ToggleActionK
    type AttrGetType ToggleActionActivePropertyInfo = Bool
    type AttrLabel ToggleActionActivePropertyInfo = "ToggleAction::active"
    attrGet _ = getToggleActionActive
    attrSet _ = setToggleActionActive
    attrConstruct _ = constructToggleActionActive

-- VVV Prop "draw-as-radio"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getToggleActionDrawAsRadio :: (MonadIO m, ToggleActionK o) => o -> m Bool
getToggleActionDrawAsRadio obj = liftIO $ getObjectPropertyBool obj "draw-as-radio"

setToggleActionDrawAsRadio :: (MonadIO m, ToggleActionK o) => o -> Bool -> m ()
setToggleActionDrawAsRadio obj val = liftIO $ setObjectPropertyBool obj "draw-as-radio" val

constructToggleActionDrawAsRadio :: Bool -> IO ([Char], GValue)
constructToggleActionDrawAsRadio val = constructObjectPropertyBool "draw-as-radio" val

data ToggleActionDrawAsRadioPropertyInfo
instance AttrInfo ToggleActionDrawAsRadioPropertyInfo where
    type AttrAllowedOps ToggleActionDrawAsRadioPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ToggleActionDrawAsRadioPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint ToggleActionDrawAsRadioPropertyInfo = ToggleActionK
    type AttrGetType ToggleActionDrawAsRadioPropertyInfo = Bool
    type AttrLabel ToggleActionDrawAsRadioPropertyInfo = "ToggleAction::draw-as-radio"
    attrGet _ = getToggleActionDrawAsRadio
    attrSet _ = setToggleActionDrawAsRadio
    attrConstruct _ = constructToggleActionDrawAsRadio

type instance AttributeList ToggleAction = ToggleActionAttributeList
type ToggleActionAttributeList = ('[ '("action-group", ActionActionGroupPropertyInfo), '("active", ToggleActionActivePropertyInfo), '("always-show-image", ActionAlwaysShowImagePropertyInfo), '("draw-as-radio", ToggleActionDrawAsRadioPropertyInfo), '("gicon", ActionGiconPropertyInfo), '("hide-if-empty", ActionHideIfEmptyPropertyInfo), '("icon-name", ActionIconNamePropertyInfo), '("is-important", ActionIsImportantPropertyInfo), '("label", ActionLabelPropertyInfo), '("name", ActionNamePropertyInfo), '("sensitive", ActionSensitivePropertyInfo), '("short-label", ActionShortLabelPropertyInfo), '("stock-id", ActionStockIdPropertyInfo), '("tooltip", ActionTooltipPropertyInfo), '("visible", ActionVisiblePropertyInfo), '("visible-horizontal", ActionVisibleHorizontalPropertyInfo), '("visible-overflown", ActionVisibleOverflownPropertyInfo), '("visible-vertical", ActionVisibleVerticalPropertyInfo)] :: [(Symbol, *)])

data ToggleActionToggledSignalInfo
instance SignalInfo ToggleActionToggledSignalInfo where
    type HaskellCallbackType ToggleActionToggledSignalInfo = ToggleActionToggledCallback
    connectSignal _ = connectToggleActionToggled

type instance SignalList ToggleAction = ToggleActionSignalList
type ToggleActionSignalList = ('[ '("activate", ActionActivateSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("toggled", ToggleActionToggledSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method ToggleAction::new
-- method type : Constructor
-- Args : [Arg {argName = "name", argType = TBasicType TUTF8, 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},Arg {argName = "tooltip", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, 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 = "name", argType = TBasicType TUTF8, 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},Arg {argName = "tooltip", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, 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 : TInterface "Gtk" "ToggleAction"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_toggle_action_new" gtk_toggle_action_new :: 
    CString ->                              -- name : TBasicType TUTF8
    CString ->                              -- label : TBasicType TUTF8
    CString ->                              -- tooltip : TBasicType TUTF8
    CString ->                              -- stock_id : TBasicType TUTF8
    IO (Ptr ToggleAction)

{-# DEPRECATED toggleActionNew ["(Since version 3.10)"]#-}
toggleActionNew ::
    (MonadIO m) =>
    T.Text ->                               -- name
    Maybe (T.Text) ->                       -- label
    Maybe (T.Text) ->                       -- tooltip
    Maybe (T.Text) ->                       -- stock_id
    m ToggleAction
toggleActionNew name label tooltip stock_id = liftIO $ do
    name' <- textToCString name
    maybeLabel <- case label of
        Nothing -> return nullPtr
        Just jLabel -> do
            jLabel' <- textToCString jLabel
            return jLabel'
    maybeTooltip <- case tooltip of
        Nothing -> return nullPtr
        Just jTooltip -> do
            jTooltip' <- textToCString jTooltip
            return jTooltip'
    maybeStock_id <- case stock_id of
        Nothing -> return nullPtr
        Just jStock_id -> do
            jStock_id' <- textToCString jStock_id
            return jStock_id'
    result <- gtk_toggle_action_new name' maybeLabel maybeTooltip maybeStock_id
    checkUnexpectedReturnNULL "gtk_toggle_action_new" result
    result' <- (wrapObject ToggleAction) result
    freeMem name'
    freeMem maybeLabel
    freeMem maybeTooltip
    freeMem maybeStock_id
    return result'

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

foreign import ccall "gtk_toggle_action_get_active" gtk_toggle_action_get_active :: 
    Ptr ToggleAction ->                     -- _obj : TInterface "Gtk" "ToggleAction"
    IO CInt

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

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

foreign import ccall "gtk_toggle_action_get_draw_as_radio" gtk_toggle_action_get_draw_as_radio :: 
    Ptr ToggleAction ->                     -- _obj : TInterface "Gtk" "ToggleAction"
    IO CInt

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

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

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

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

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

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

foreign import ccall "gtk_toggle_action_toggled" gtk_toggle_action_toggled :: 
    Ptr ToggleAction ->                     -- _obj : TInterface "Gtk" "ToggleAction"
    IO ()

{-# DEPRECATED toggleActionToggled ["(Since version 3.10)"]#-}
toggleActionToggled ::
    (MonadIO m, ToggleActionK a) =>
    a ->                                    -- _obj
    m ()
toggleActionToggled _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_toggle_action_toggled _obj'
    touchManagedPtr _obj
    return ()