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

-- * Exported types
    CellRendererCombo(..)                   ,
    CellRendererComboK                      ,
    toCellRendererCombo                     ,
    noCellRendererCombo                     ,


 -- * Methods
-- ** cellRendererComboNew
    cellRendererComboNew                    ,




 -- * Properties
-- ** HasEntry
    CellRendererComboHasEntryPropertyInfo   ,
    constructCellRendererComboHasEntry      ,
    getCellRendererComboHasEntry            ,
    setCellRendererComboHasEntry            ,


-- ** Model
    CellRendererComboModelPropertyInfo      ,
    constructCellRendererComboModel         ,
    getCellRendererComboModel               ,
    setCellRendererComboModel               ,


-- ** TextColumn
    CellRendererComboTextColumnPropertyInfo ,
    constructCellRendererComboTextColumn    ,
    getCellRendererComboTextColumn          ,
    setCellRendererComboTextColumn          ,




 -- * Signals
-- ** Changed
    CellRendererComboChangedCallback        ,
    CellRendererComboChangedCallbackC       ,
    CellRendererComboChangedSignalInfo      ,
    afterCellRendererComboChanged           ,
    cellRendererComboChangedCallbackWrapper ,
    cellRendererComboChangedClosure         ,
    mkCellRendererComboChangedCallback      ,
    noCellRendererComboChangedCallback      ,
    onCellRendererComboChanged              ,




    ) 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 CellRendererCombo = CellRendererCombo (ForeignPtr CellRendererCombo)
foreign import ccall "gtk_cell_renderer_combo_get_type"
    c_gtk_cell_renderer_combo_get_type :: IO GType

type instance ParentTypes CellRendererCombo = CellRendererComboParentTypes
type CellRendererComboParentTypes = '[CellRendererText, CellRenderer, GObject.Object]

instance GObject CellRendererCombo where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_cell_renderer_combo_get_type
    

class GObject o => CellRendererComboK o
instance (GObject o, IsDescendantOf CellRendererCombo o) => CellRendererComboK o

toCellRendererCombo :: CellRendererComboK o => o -> IO CellRendererCombo
toCellRendererCombo = unsafeCastTo CellRendererCombo

noCellRendererCombo :: Maybe CellRendererCombo
noCellRendererCombo = Nothing

-- signal CellRendererCombo::changed
type CellRendererComboChangedCallback =
    T.Text ->
    TreeIter ->
    IO ()

noCellRendererComboChangedCallback :: Maybe CellRendererComboChangedCallback
noCellRendererComboChangedCallback = Nothing

type CellRendererComboChangedCallbackC =
    Ptr () ->                               -- object
    CString ->
    Ptr TreeIter ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkCellRendererComboChangedCallback :: CellRendererComboChangedCallbackC -> IO (FunPtr CellRendererComboChangedCallbackC)

cellRendererComboChangedClosure :: CellRendererComboChangedCallback -> IO Closure
cellRendererComboChangedClosure cb = newCClosure =<< mkCellRendererComboChangedCallback wrapped
    where wrapped = cellRendererComboChangedCallbackWrapper cb

cellRendererComboChangedCallbackWrapper ::
    CellRendererComboChangedCallback ->
    Ptr () ->
    CString ->
    Ptr TreeIter ->
    Ptr () ->
    IO ()
cellRendererComboChangedCallbackWrapper _cb _ path_string new_iter _ = do
    path_string' <- cstringToText path_string
    new_iter' <- (newBoxed TreeIter) new_iter
    _cb  path_string' new_iter'

onCellRendererComboChanged :: (GObject a, MonadIO m) => a -> CellRendererComboChangedCallback -> m SignalHandlerId
onCellRendererComboChanged obj cb = liftIO $ connectCellRendererComboChanged obj cb SignalConnectBefore
afterCellRendererComboChanged :: (GObject a, MonadIO m) => a -> CellRendererComboChangedCallback -> m SignalHandlerId
afterCellRendererComboChanged obj cb = connectCellRendererComboChanged obj cb SignalConnectAfter

connectCellRendererComboChanged :: (GObject a, MonadIO m) =>
                                   a -> CellRendererComboChangedCallback -> SignalConnectMode -> m SignalHandlerId
connectCellRendererComboChanged obj cb after = liftIO $ do
    cb' <- mkCellRendererComboChangedCallback (cellRendererComboChangedCallbackWrapper cb)
    connectSignalFunPtr obj "changed" cb' after

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

getCellRendererComboHasEntry :: (MonadIO m, CellRendererComboK o) => o -> m Bool
getCellRendererComboHasEntry obj = liftIO $ getObjectPropertyBool obj "has-entry"

setCellRendererComboHasEntry :: (MonadIO m, CellRendererComboK o) => o -> Bool -> m ()
setCellRendererComboHasEntry obj val = liftIO $ setObjectPropertyBool obj "has-entry" val

constructCellRendererComboHasEntry :: Bool -> IO ([Char], GValue)
constructCellRendererComboHasEntry val = constructObjectPropertyBool "has-entry" val

data CellRendererComboHasEntryPropertyInfo
instance AttrInfo CellRendererComboHasEntryPropertyInfo where
    type AttrAllowedOps CellRendererComboHasEntryPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererComboHasEntryPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint CellRendererComboHasEntryPropertyInfo = CellRendererComboK
    type AttrGetType CellRendererComboHasEntryPropertyInfo = Bool
    type AttrLabel CellRendererComboHasEntryPropertyInfo = "CellRendererCombo::has-entry"
    attrGet _ = getCellRendererComboHasEntry
    attrSet _ = setCellRendererComboHasEntry
    attrConstruct _ = constructCellRendererComboHasEntry

-- VVV Prop "model"
   -- Type: TInterface "Gtk" "TreeModel"
   -- Flags: [PropertyReadable,PropertyWritable]

getCellRendererComboModel :: (MonadIO m, CellRendererComboK o) => o -> m TreeModel
getCellRendererComboModel obj = liftIO $ getObjectPropertyObject obj "model" TreeModel

setCellRendererComboModel :: (MonadIO m, CellRendererComboK o, TreeModelK a) => o -> a -> m ()
setCellRendererComboModel obj val = liftIO $ setObjectPropertyObject obj "model" val

constructCellRendererComboModel :: (TreeModelK a) => a -> IO ([Char], GValue)
constructCellRendererComboModel val = constructObjectPropertyObject "model" val

data CellRendererComboModelPropertyInfo
instance AttrInfo CellRendererComboModelPropertyInfo where
    type AttrAllowedOps CellRendererComboModelPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererComboModelPropertyInfo = TreeModelK
    type AttrBaseTypeConstraint CellRendererComboModelPropertyInfo = CellRendererComboK
    type AttrGetType CellRendererComboModelPropertyInfo = TreeModel
    type AttrLabel CellRendererComboModelPropertyInfo = "CellRendererCombo::model"
    attrGet _ = getCellRendererComboModel
    attrSet _ = setCellRendererComboModel
    attrConstruct _ = constructCellRendererComboModel

-- VVV Prop "text-column"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable,PropertyWritable]

getCellRendererComboTextColumn :: (MonadIO m, CellRendererComboK o) => o -> m Int32
getCellRendererComboTextColumn obj = liftIO $ getObjectPropertyCInt obj "text-column"

setCellRendererComboTextColumn :: (MonadIO m, CellRendererComboK o) => o -> Int32 -> m ()
setCellRendererComboTextColumn obj val = liftIO $ setObjectPropertyCInt obj "text-column" val

constructCellRendererComboTextColumn :: Int32 -> IO ([Char], GValue)
constructCellRendererComboTextColumn val = constructObjectPropertyCInt "text-column" val

data CellRendererComboTextColumnPropertyInfo
instance AttrInfo CellRendererComboTextColumnPropertyInfo where
    type AttrAllowedOps CellRendererComboTextColumnPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint CellRendererComboTextColumnPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint CellRendererComboTextColumnPropertyInfo = CellRendererComboK
    type AttrGetType CellRendererComboTextColumnPropertyInfo = Int32
    type AttrLabel CellRendererComboTextColumnPropertyInfo = "CellRendererCombo::text-column"
    attrGet _ = getCellRendererComboTextColumn
    attrSet _ = setCellRendererComboTextColumn
    attrConstruct _ = constructCellRendererComboTextColumn

type instance AttributeList CellRendererCombo = CellRendererComboAttributeList
type CellRendererComboAttributeList = ('[ '("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), '("has-entry", CellRendererComboHasEntryPropertyInfo), '("height", CellRendererHeightPropertyInfo), '("is-expanded", CellRendererIsExpandedPropertyInfo), '("is-expander", CellRendererIsExpanderPropertyInfo), '("language", CellRendererTextLanguagePropertyInfo), '("language-set", CellRendererTextLanguageSetPropertyInfo), '("markup", CellRendererTextMarkupPropertyInfo), '("max-width-chars", CellRendererTextMaxWidthCharsPropertyInfo), '("mode", CellRendererModePropertyInfo), '("model", CellRendererComboModelPropertyInfo), '("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), '("text-column", CellRendererComboTextColumnPropertyInfo), '("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 CellRendererComboChangedSignalInfo
instance SignalInfo CellRendererComboChangedSignalInfo where
    type HaskellCallbackType CellRendererComboChangedSignalInfo = CellRendererComboChangedCallback
    connectSignal _ = connectCellRendererComboChanged

type instance SignalList CellRendererCombo = CellRendererComboSignalList
type CellRendererComboSignalList = ('[ '("changed", CellRendererComboChangedSignalInfo), '("edited", CellRendererTextEditedSignalInfo), '("editing-canceled", CellRendererEditingCanceledSignalInfo), '("editing-started", CellRendererEditingStartedSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "gtk_cell_renderer_combo_new" gtk_cell_renderer_combo_new :: 
    IO (Ptr CellRendererCombo)


cellRendererComboNew ::
    (MonadIO m) =>
    m CellRendererCombo
cellRendererComboNew  = liftIO $ do
    result <- gtk_cell_renderer_combo_new
    checkUnexpectedReturnNULL "gtk_cell_renderer_combo_new" result
    result' <- (newObject CellRendererCombo) result
    return result'