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

-- * Exported types
    CellRendererAccel(..)                   ,
    CellRendererAccelK                      ,
    toCellRendererAccel                     ,
    noCellRendererAccel                     ,


 -- * Methods
-- ** cellRendererAccelNew
    cellRendererAccelNew                    ,




 -- * Properties
-- ** AccelKey
    CellRendererAccelAccelKeyPropertyInfo   ,
    constructCellRendererAccelAccelKey      ,
    getCellRendererAccelAccelKey            ,
    setCellRendererAccelAccelKey            ,


-- ** AccelMode
    CellRendererAccelAccelModePropertyInfo  ,
    constructCellRendererAccelAccelMode     ,
    getCellRendererAccelAccelMode           ,
    setCellRendererAccelAccelMode           ,


-- ** AccelMods
    CellRendererAccelAccelModsPropertyInfo  ,
    constructCellRendererAccelAccelMods     ,
    getCellRendererAccelAccelMods           ,
    setCellRendererAccelAccelMods           ,


-- ** Keycode
    CellRendererAccelKeycodePropertyInfo    ,
    constructCellRendererAccelKeycode       ,
    getCellRendererAccelKeycode             ,
    setCellRendererAccelKeycode             ,




 -- * Signals
-- ** AccelCleared
    CellRendererAccelAccelClearedCallback   ,
    CellRendererAccelAccelClearedCallbackC  ,
    CellRendererAccelAccelClearedSignalInfo ,
    afterCellRendererAccelAccelCleared      ,
    cellRendererAccelAccelClearedCallbackWrapper,
    cellRendererAccelAccelClearedClosure    ,
    mkCellRendererAccelAccelClearedCallback ,
    noCellRendererAccelAccelClearedCallback ,
    onCellRendererAccelAccelCleared         ,


-- ** AccelEdited
    CellRendererAccelAccelEditedCallback    ,
    CellRendererAccelAccelEditedCallbackC   ,
    CellRendererAccelAccelEditedSignalInfo  ,
    afterCellRendererAccelAccelEdited       ,
    cellRendererAccelAccelEditedCallbackWrapper,
    cellRendererAccelAccelEditedClosure     ,
    mkCellRendererAccelAccelEditedCallback  ,
    noCellRendererAccelAccelEditedCallback  ,
    onCellRendererAccelAccelEdited          ,




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

newtype CellRendererAccel = CellRendererAccel (ForeignPtr CellRendererAccel)
foreign import ccall "gtk_cell_renderer_accel_get_type"
    c_gtk_cell_renderer_accel_get_type :: IO GType

type instance ParentTypes CellRendererAccel = CellRendererAccelParentTypes
type CellRendererAccelParentTypes = '[CellRendererText, CellRenderer, GObject.Object]

instance GObject CellRendererAccel where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_cell_renderer_accel_get_type
    

class GObject o => CellRendererAccelK o
instance (GObject o, IsDescendantOf CellRendererAccel o) => CellRendererAccelK o

toCellRendererAccel :: CellRendererAccelK o => o -> IO CellRendererAccel
toCellRendererAccel = unsafeCastTo CellRendererAccel

noCellRendererAccel :: Maybe CellRendererAccel
noCellRendererAccel = Nothing

-- signal CellRendererAccel::accel-cleared
type CellRendererAccelAccelClearedCallback =
    T.Text ->
    IO ()

noCellRendererAccelAccelClearedCallback :: Maybe CellRendererAccelAccelClearedCallback
noCellRendererAccelAccelClearedCallback = Nothing

type CellRendererAccelAccelClearedCallbackC =
    Ptr () ->                               -- object
    CString ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCellRendererAccelAccelClearedCallback :: CellRendererAccelAccelClearedCallbackC -> IO (FunPtr CellRendererAccelAccelClearedCallbackC)

cellRendererAccelAccelClearedClosure :: CellRendererAccelAccelClearedCallback -> IO Closure
cellRendererAccelAccelClearedClosure cb = newCClosure =<< mkCellRendererAccelAccelClearedCallback wrapped
    where wrapped = cellRendererAccelAccelClearedCallbackWrapper cb

cellRendererAccelAccelClearedCallbackWrapper ::
    CellRendererAccelAccelClearedCallback ->
    Ptr () ->
    CString ->
    Ptr () ->
    IO ()
cellRendererAccelAccelClearedCallbackWrapper _cb _ path_string _ = do
    path_string' <- cstringToText path_string
    _cb  path_string'

onCellRendererAccelAccelCleared :: (GObject a, MonadIO m) => a -> CellRendererAccelAccelClearedCallback -> m SignalHandlerId
onCellRendererAccelAccelCleared obj cb = liftIO $ connectCellRendererAccelAccelCleared obj cb SignalConnectBefore
afterCellRendererAccelAccelCleared :: (GObject a, MonadIO m) => a -> CellRendererAccelAccelClearedCallback -> m SignalHandlerId
afterCellRendererAccelAccelCleared obj cb = connectCellRendererAccelAccelCleared obj cb SignalConnectAfter

connectCellRendererAccelAccelCleared :: (GObject a, MonadIO m) =>
                                        a -> CellRendererAccelAccelClearedCallback -> SignalConnectMode -> m SignalHandlerId
connectCellRendererAccelAccelCleared obj cb after = liftIO $ do
    cb' <- mkCellRendererAccelAccelClearedCallback (cellRendererAccelAccelClearedCallbackWrapper cb)
    connectSignalFunPtr obj "accel-cleared" cb' after

-- signal CellRendererAccel::accel-edited
type CellRendererAccelAccelEditedCallback =
    T.Text ->
    Word32 ->
    [Gdk.ModifierType] ->
    Word32 ->
    IO ()

noCellRendererAccelAccelEditedCallback :: Maybe CellRendererAccelAccelEditedCallback
noCellRendererAccelAccelEditedCallback = Nothing

type CellRendererAccelAccelEditedCallbackC =
    Ptr () ->                               -- object
    CString ->
    Word32 ->
    CUInt ->
    Word32 ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCellRendererAccelAccelEditedCallback :: CellRendererAccelAccelEditedCallbackC -> IO (FunPtr CellRendererAccelAccelEditedCallbackC)

cellRendererAccelAccelEditedClosure :: CellRendererAccelAccelEditedCallback -> IO Closure
cellRendererAccelAccelEditedClosure cb = newCClosure =<< mkCellRendererAccelAccelEditedCallback wrapped
    where wrapped = cellRendererAccelAccelEditedCallbackWrapper cb

cellRendererAccelAccelEditedCallbackWrapper ::
    CellRendererAccelAccelEditedCallback ->
    Ptr () ->
    CString ->
    Word32 ->
    CUInt ->
    Word32 ->
    Ptr () ->
    IO ()
cellRendererAccelAccelEditedCallbackWrapper _cb _ path_string accel_key accel_mods hardware_keycode _ = do
    path_string' <- cstringToText path_string
    let accel_mods' = wordToGFlags accel_mods
    _cb  path_string' accel_key accel_mods' hardware_keycode

onCellRendererAccelAccelEdited :: (GObject a, MonadIO m) => a -> CellRendererAccelAccelEditedCallback -> m SignalHandlerId
onCellRendererAccelAccelEdited obj cb = liftIO $ connectCellRendererAccelAccelEdited obj cb SignalConnectBefore
afterCellRendererAccelAccelEdited :: (GObject a, MonadIO m) => a -> CellRendererAccelAccelEditedCallback -> m SignalHandlerId
afterCellRendererAccelAccelEdited obj cb = connectCellRendererAccelAccelEdited obj cb SignalConnectAfter

connectCellRendererAccelAccelEdited :: (GObject a, MonadIO m) =>
                                       a -> CellRendererAccelAccelEditedCallback -> SignalConnectMode -> m SignalHandlerId
connectCellRendererAccelAccelEdited obj cb after = liftIO $ do
    cb' <- mkCellRendererAccelAccelEditedCallback (cellRendererAccelAccelEditedCallbackWrapper cb)
    connectSignalFunPtr obj "accel-edited" cb' after

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

getCellRendererAccelAccelKey :: (MonadIO m, CellRendererAccelK o) => o -> m Word32
getCellRendererAccelAccelKey obj = liftIO $ getObjectPropertyCUInt obj "accel-key"

setCellRendererAccelAccelKey :: (MonadIO m, CellRendererAccelK o) => o -> Word32 -> m ()
setCellRendererAccelAccelKey obj val = liftIO $ setObjectPropertyCUInt obj "accel-key" val

constructCellRendererAccelAccelKey :: Word32 -> IO ([Char], GValue)
constructCellRendererAccelAccelKey val = constructObjectPropertyCUInt "accel-key" val

data CellRendererAccelAccelKeyPropertyInfo
instance AttrInfo CellRendererAccelAccelKeyPropertyInfo where
    type AttrAllowedOps CellRendererAccelAccelKeyPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererAccelAccelKeyPropertyInfo = (~) Word32
    type AttrBaseTypeConstraint CellRendererAccelAccelKeyPropertyInfo = CellRendererAccelK
    type AttrGetType CellRendererAccelAccelKeyPropertyInfo = Word32
    type AttrLabel CellRendererAccelAccelKeyPropertyInfo = "CellRendererAccel::accel-key"
    attrGet _ = getCellRendererAccelAccelKey
    attrSet _ = setCellRendererAccelAccelKey
    attrConstruct _ = constructCellRendererAccelAccelKey

-- VVV Prop "accel-mode"
   -- Type: TInterface "Gtk" "CellRendererAccelMode"
   -- Flags: [PropertyReadable,PropertyWritable]

getCellRendererAccelAccelMode :: (MonadIO m, CellRendererAccelK o) => o -> m CellRendererAccelMode
getCellRendererAccelAccelMode obj = liftIO $ getObjectPropertyEnum obj "accel-mode"

setCellRendererAccelAccelMode :: (MonadIO m, CellRendererAccelK o) => o -> CellRendererAccelMode -> m ()
setCellRendererAccelAccelMode obj val = liftIO $ setObjectPropertyEnum obj "accel-mode" val

constructCellRendererAccelAccelMode :: CellRendererAccelMode -> IO ([Char], GValue)
constructCellRendererAccelAccelMode val = constructObjectPropertyEnum "accel-mode" val

data CellRendererAccelAccelModePropertyInfo
instance AttrInfo CellRendererAccelAccelModePropertyInfo where
    type AttrAllowedOps CellRendererAccelAccelModePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererAccelAccelModePropertyInfo = (~) CellRendererAccelMode
    type AttrBaseTypeConstraint CellRendererAccelAccelModePropertyInfo = CellRendererAccelK
    type AttrGetType CellRendererAccelAccelModePropertyInfo = CellRendererAccelMode
    type AttrLabel CellRendererAccelAccelModePropertyInfo = "CellRendererAccel::accel-mode"
    attrGet _ = getCellRendererAccelAccelMode
    attrSet _ = setCellRendererAccelAccelMode
    attrConstruct _ = constructCellRendererAccelAccelMode

-- VVV Prop "accel-mods"
   -- Type: TInterface "Gdk" "ModifierType"
   -- Flags: [PropertyReadable,PropertyWritable]

getCellRendererAccelAccelMods :: (MonadIO m, CellRendererAccelK o) => o -> m [Gdk.ModifierType]
getCellRendererAccelAccelMods obj = liftIO $ getObjectPropertyFlags obj "accel-mods"

setCellRendererAccelAccelMods :: (MonadIO m, CellRendererAccelK o) => o -> [Gdk.ModifierType] -> m ()
setCellRendererAccelAccelMods obj val = liftIO $ setObjectPropertyFlags obj "accel-mods" val

constructCellRendererAccelAccelMods :: [Gdk.ModifierType] -> IO ([Char], GValue)
constructCellRendererAccelAccelMods val = constructObjectPropertyFlags "accel-mods" val

data CellRendererAccelAccelModsPropertyInfo
instance AttrInfo CellRendererAccelAccelModsPropertyInfo where
    type AttrAllowedOps CellRendererAccelAccelModsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererAccelAccelModsPropertyInfo = (~) [Gdk.ModifierType]
    type AttrBaseTypeConstraint CellRendererAccelAccelModsPropertyInfo = CellRendererAccelK
    type AttrGetType CellRendererAccelAccelModsPropertyInfo = [Gdk.ModifierType]
    type AttrLabel CellRendererAccelAccelModsPropertyInfo = "CellRendererAccel::accel-mods"
    attrGet _ = getCellRendererAccelAccelMods
    attrSet _ = setCellRendererAccelAccelMods
    attrConstruct _ = constructCellRendererAccelAccelMods

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

getCellRendererAccelKeycode :: (MonadIO m, CellRendererAccelK o) => o -> m Word32
getCellRendererAccelKeycode obj = liftIO $ getObjectPropertyCUInt obj "keycode"

setCellRendererAccelKeycode :: (MonadIO m, CellRendererAccelK o) => o -> Word32 -> m ()
setCellRendererAccelKeycode obj val = liftIO $ setObjectPropertyCUInt obj "keycode" val

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

data CellRendererAccelKeycodePropertyInfo
instance AttrInfo CellRendererAccelKeycodePropertyInfo where
    type AttrAllowedOps CellRendererAccelKeycodePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererAccelKeycodePropertyInfo = (~) Word32
    type AttrBaseTypeConstraint CellRendererAccelKeycodePropertyInfo = CellRendererAccelK
    type AttrGetType CellRendererAccelKeycodePropertyInfo = Word32
    type AttrLabel CellRendererAccelKeycodePropertyInfo = "CellRendererAccel::keycode"
    attrGet _ = getCellRendererAccelKeycode
    attrSet _ = setCellRendererAccelKeycode
    attrConstruct _ = constructCellRendererAccelKeycode

type instance AttributeList CellRendererAccel = CellRendererAccelAttributeList
type CellRendererAccelAttributeList = ('[ '("accel-key", CellRendererAccelAccelKeyPropertyInfo), '("accel-mode", CellRendererAccelAccelModePropertyInfo), '("accel-mods", CellRendererAccelAccelModsPropertyInfo), '("align-set", CellRendererTextAlignSetPropertyInfo), '("alignment", CellRendererTextAlignmentPropertyInfo), '("attributes", CellRendererTextAttributesPropertyInfo), '("background", CellRendererTextBackgroundPropertyInfo), '("background-gdk", CellRendererTextBackgroundGdkPropertyInfo), '("background-rgba", CellRendererTextBackgroundRgbaPropertyInfo), '("background-set", CellRendererTextBackgroundSetPropertyInfo), '("cell-background", CellRendererCellBackgroundPropertyInfo), '("cell-background-gdk", CellRendererCellBackgroundGdkPropertyInfo), '("cell-background-rgba", CellRendererCellBackgroundRgbaPropertyInfo), '("cell-background-set", CellRendererCellBackgroundSetPropertyInfo), '("editable", CellRendererTextEditablePropertyInfo), '("editable-set", CellRendererTextEditableSetPropertyInfo), '("editing", CellRendererEditingPropertyInfo), '("ellipsize", CellRendererTextEllipsizePropertyInfo), '("ellipsize-set", CellRendererTextEllipsizeSetPropertyInfo), '("family", CellRendererTextFamilyPropertyInfo), '("family-set", CellRendererTextFamilySetPropertyInfo), '("font", CellRendererTextFontPropertyInfo), '("font-desc", CellRendererTextFontDescPropertyInfo), '("foreground", CellRendererTextForegroundPropertyInfo), '("foreground-gdk", CellRendererTextForegroundGdkPropertyInfo), '("foreground-rgba", CellRendererTextForegroundRgbaPropertyInfo), '("foreground-set", CellRendererTextForegroundSetPropertyInfo), '("height", CellRendererHeightPropertyInfo), '("is-expanded", CellRendererIsExpandedPropertyInfo), '("is-expander", CellRendererIsExpanderPropertyInfo), '("keycode", CellRendererAccelKeycodePropertyInfo), '("language", CellRendererTextLanguagePropertyInfo), '("language-set", CellRendererTextLanguageSetPropertyInfo), '("markup", CellRendererTextMarkupPropertyInfo), '("max-width-chars", CellRendererTextMaxWidthCharsPropertyInfo), '("mode", CellRendererModePropertyInfo), '("placeholder-text", CellRendererTextPlaceholderTextPropertyInfo), '("rise", CellRendererTextRisePropertyInfo), '("rise-set", CellRendererTextRiseSetPropertyInfo), '("scale", CellRendererTextScalePropertyInfo), '("scale-set", CellRendererTextScaleSetPropertyInfo), '("sensitive", CellRendererSensitivePropertyInfo), '("single-paragraph-mode", CellRendererTextSingleParagraphModePropertyInfo), '("size", CellRendererTextSizePropertyInfo), '("size-points", CellRendererTextSizePointsPropertyInfo), '("size-set", CellRendererTextSizeSetPropertyInfo), '("stretch", CellRendererTextStretchPropertyInfo), '("stretch-set", CellRendererTextStretchSetPropertyInfo), '("strikethrough", CellRendererTextStrikethroughPropertyInfo), '("strikethrough-set", CellRendererTextStrikethroughSetPropertyInfo), '("style", CellRendererTextStylePropertyInfo), '("style-set", CellRendererTextStyleSetPropertyInfo), '("text", CellRendererTextTextPropertyInfo), '("underline", CellRendererTextUnderlinePropertyInfo), '("underline-set", CellRendererTextUnderlineSetPropertyInfo), '("variant", CellRendererTextVariantPropertyInfo), '("variant-set", CellRendererTextVariantSetPropertyInfo), '("visible", CellRendererVisiblePropertyInfo), '("weight", CellRendererTextWeightPropertyInfo), '("weight-set", CellRendererTextWeightSetPropertyInfo), '("width", CellRendererWidthPropertyInfo), '("width-chars", CellRendererTextWidthCharsPropertyInfo), '("wrap-mode", CellRendererTextWrapModePropertyInfo), '("wrap-width", CellRendererTextWrapWidthPropertyInfo), '("xalign", CellRendererXalignPropertyInfo), '("xpad", CellRendererXpadPropertyInfo), '("yalign", CellRendererYalignPropertyInfo), '("ypad", CellRendererYpadPropertyInfo)] :: [(Symbol, *)])

data CellRendererAccelAccelClearedSignalInfo
instance SignalInfo CellRendererAccelAccelClearedSignalInfo where
    type HaskellCallbackType CellRendererAccelAccelClearedSignalInfo = CellRendererAccelAccelClearedCallback
    connectSignal _ = connectCellRendererAccelAccelCleared

data CellRendererAccelAccelEditedSignalInfo
instance SignalInfo CellRendererAccelAccelEditedSignalInfo where
    type HaskellCallbackType CellRendererAccelAccelEditedSignalInfo = CellRendererAccelAccelEditedCallback
    connectSignal _ = connectCellRendererAccelAccelEdited

type instance SignalList CellRendererAccel = CellRendererAccelSignalList
type CellRendererAccelSignalList = ('[ '("accel-cleared", CellRendererAccelAccelClearedSignalInfo), '("accel-edited", CellRendererAccelAccelEditedSignalInfo), '("edited", CellRendererTextEditedSignalInfo), '("editing-canceled", CellRendererEditingCanceledSignalInfo), '("editing-started", CellRendererEditingStartedSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "gtk_cell_renderer_accel_new" gtk_cell_renderer_accel_new :: 
    IO (Ptr CellRendererAccel)


cellRendererAccelNew ::
    (MonadIO m) =>
    m CellRendererAccel
cellRendererAccelNew  = liftIO $ do
    result <- gtk_cell_renderer_accel_new
    checkUnexpectedReturnNULL "gtk_cell_renderer_accel_new" result
    result' <- (newObject CellRendererAccel) result
    return result'