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

-- * Exported types
    MenuItem(..)                            ,
    MenuItemK                               ,
    toMenuItem                              ,
    noMenuItem                              ,


 -- * Methods
-- ** menuItemActivate
    menuItemActivate                        ,


-- ** menuItemDeselect
    menuItemDeselect                        ,


-- ** menuItemGetAccelPath
    menuItemGetAccelPath                    ,


-- ** menuItemGetLabel
    menuItemGetLabel                        ,


-- ** menuItemGetReserveIndicator
    menuItemGetReserveIndicator             ,


-- ** menuItemGetRightJustified
    menuItemGetRightJustified               ,


-- ** menuItemGetSubmenu
    menuItemGetSubmenu                      ,


-- ** menuItemGetUseUnderline
    menuItemGetUseUnderline                 ,


-- ** menuItemNew
    menuItemNew                             ,


-- ** menuItemNewWithLabel
    menuItemNewWithLabel                    ,


-- ** menuItemNewWithMnemonic
    menuItemNewWithMnemonic                 ,


-- ** menuItemSelect
    menuItemSelect                          ,


-- ** menuItemSetAccelPath
    menuItemSetAccelPath                    ,


-- ** menuItemSetLabel
    menuItemSetLabel                        ,


-- ** menuItemSetReserveIndicator
    menuItemSetReserveIndicator             ,


-- ** menuItemSetRightJustified
    menuItemSetRightJustified               ,


-- ** menuItemSetSubmenu
    menuItemSetSubmenu                      ,


-- ** menuItemSetUseUnderline
    menuItemSetUseUnderline                 ,


-- ** menuItemToggleSizeAllocate
    menuItemToggleSizeAllocate              ,


-- ** menuItemToggleSizeRequest
    menuItemToggleSizeRequest               ,




 -- * Properties
-- ** AccelPath
    MenuItemAccelPathPropertyInfo           ,
    constructMenuItemAccelPath              ,
    getMenuItemAccelPath                    ,
    setMenuItemAccelPath                    ,


-- ** Label
    MenuItemLabelPropertyInfo               ,
    constructMenuItemLabel                  ,
    getMenuItemLabel                        ,
    setMenuItemLabel                        ,


-- ** RightJustified
    MenuItemRightJustifiedPropertyInfo      ,
    constructMenuItemRightJustified         ,
    getMenuItemRightJustified               ,
    setMenuItemRightJustified               ,


-- ** Submenu
    MenuItemSubmenuPropertyInfo             ,
    constructMenuItemSubmenu                ,
    getMenuItemSubmenu                      ,
    setMenuItemSubmenu                      ,


-- ** UseUnderline
    MenuItemUseUnderlinePropertyInfo        ,
    constructMenuItemUseUnderline           ,
    getMenuItemUseUnderline                 ,
    setMenuItemUseUnderline                 ,




 -- * Signals
-- ** Activate
    MenuItemActivateCallback                ,
    MenuItemActivateCallbackC               ,
    MenuItemActivateSignalInfo              ,
    afterMenuItemActivate                   ,
    menuItemActivateCallbackWrapper         ,
    menuItemActivateClosure                 ,
    mkMenuItemActivateCallback              ,
    noMenuItemActivateCallback              ,
    onMenuItemActivate                      ,


-- ** ActivateItem
    MenuItemActivateItemCallback            ,
    MenuItemActivateItemCallbackC           ,
    MenuItemActivateItemSignalInfo          ,
    afterMenuItemActivateItem               ,
    menuItemActivateItemCallbackWrapper     ,
    menuItemActivateItemClosure             ,
    mkMenuItemActivateItemCallback          ,
    noMenuItemActivateItemCallback          ,
    onMenuItemActivateItem                  ,


-- ** Deselect
    MenuItemDeselectCallback                ,
    MenuItemDeselectCallbackC               ,
    MenuItemDeselectSignalInfo              ,
    afterMenuItemDeselect                   ,
    menuItemDeselectCallbackWrapper         ,
    menuItemDeselectClosure                 ,
    mkMenuItemDeselectCallback              ,
    noMenuItemDeselectCallback              ,
    onMenuItemDeselect                      ,


-- ** Select
    MenuItemSelectCallback                  ,
    MenuItemSelectCallbackC                 ,
    MenuItemSelectSignalInfo                ,
    afterMenuItemSelect                     ,
    menuItemSelectCallbackWrapper           ,
    menuItemSelectClosure                   ,
    mkMenuItemSelectCallback                ,
    noMenuItemSelectCallback                ,
    onMenuItemSelect                        ,


-- ** ToggleSizeAllocate
    MenuItemToggleSizeAllocateCallback      ,
    MenuItemToggleSizeAllocateCallbackC     ,
    MenuItemToggleSizeAllocateSignalInfo    ,
    afterMenuItemToggleSizeAllocate         ,
    menuItemToggleSizeAllocateCallbackWrapper,
    menuItemToggleSizeAllocateClosure       ,
    mkMenuItemToggleSizeAllocateCallback    ,
    noMenuItemToggleSizeAllocateCallback    ,
    onMenuItemToggleSizeAllocate            ,


-- ** ToggleSizeRequest
    MenuItemToggleSizeRequestCallback       ,
    MenuItemToggleSizeRequestCallbackC      ,
    MenuItemToggleSizeRequestSignalInfo     ,
    afterMenuItemToggleSizeRequest          ,
    menuItemToggleSizeRequestCallbackWrapper,
    menuItemToggleSizeRequestClosure        ,
    mkMenuItemToggleSizeRequestCallback     ,
    noMenuItemToggleSizeRequestCallback     ,
    onMenuItemToggleSizeRequest             ,




    ) 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 MenuItem = MenuItem (ForeignPtr MenuItem)
foreign import ccall "gtk_menu_item_get_type"
    c_gtk_menu_item_get_type :: IO GType

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

instance GObject MenuItem where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_menu_item_get_type
    

class GObject o => MenuItemK o
instance (GObject o, IsDescendantOf MenuItem o) => MenuItemK o

toMenuItem :: MenuItemK o => o -> IO MenuItem
toMenuItem = unsafeCastTo MenuItem

noMenuItem :: Maybe MenuItem
noMenuItem = Nothing

-- signal MenuItem::activate
type MenuItemActivateCallback =
    IO ()

noMenuItemActivateCallback :: Maybe MenuItemActivateCallback
noMenuItemActivateCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuItemActivateCallback :: MenuItemActivateCallbackC -> IO (FunPtr MenuItemActivateCallbackC)

menuItemActivateClosure :: MenuItemActivateCallback -> IO Closure
menuItemActivateClosure cb = newCClosure =<< mkMenuItemActivateCallback wrapped
    where wrapped = menuItemActivateCallbackWrapper cb

menuItemActivateCallbackWrapper ::
    MenuItemActivateCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuItemActivateCallbackWrapper _cb _ _ = do
    _cb 

onMenuItemActivate :: (GObject a, MonadIO m) => a -> MenuItemActivateCallback -> m SignalHandlerId
onMenuItemActivate obj cb = liftIO $ connectMenuItemActivate obj cb SignalConnectBefore
afterMenuItemActivate :: (GObject a, MonadIO m) => a -> MenuItemActivateCallback -> m SignalHandlerId
afterMenuItemActivate obj cb = connectMenuItemActivate obj cb SignalConnectAfter

connectMenuItemActivate :: (GObject a, MonadIO m) =>
                           a -> MenuItemActivateCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemActivate obj cb after = liftIO $ do
    cb' <- mkMenuItemActivateCallback (menuItemActivateCallbackWrapper cb)
    connectSignalFunPtr obj "activate" cb' after

-- signal MenuItem::activate-item
type MenuItemActivateItemCallback =
    IO ()

noMenuItemActivateItemCallback :: Maybe MenuItemActivateItemCallback
noMenuItemActivateItemCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuItemActivateItemCallback :: MenuItemActivateItemCallbackC -> IO (FunPtr MenuItemActivateItemCallbackC)

menuItemActivateItemClosure :: MenuItemActivateItemCallback -> IO Closure
menuItemActivateItemClosure cb = newCClosure =<< mkMenuItemActivateItemCallback wrapped
    where wrapped = menuItemActivateItemCallbackWrapper cb

menuItemActivateItemCallbackWrapper ::
    MenuItemActivateItemCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuItemActivateItemCallbackWrapper _cb _ _ = do
    _cb 

onMenuItemActivateItem :: (GObject a, MonadIO m) => a -> MenuItemActivateItemCallback -> m SignalHandlerId
onMenuItemActivateItem obj cb = liftIO $ connectMenuItemActivateItem obj cb SignalConnectBefore
afterMenuItemActivateItem :: (GObject a, MonadIO m) => a -> MenuItemActivateItemCallback -> m SignalHandlerId
afterMenuItemActivateItem obj cb = connectMenuItemActivateItem obj cb SignalConnectAfter

connectMenuItemActivateItem :: (GObject a, MonadIO m) =>
                               a -> MenuItemActivateItemCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemActivateItem obj cb after = liftIO $ do
    cb' <- mkMenuItemActivateItemCallback (menuItemActivateItemCallbackWrapper cb)
    connectSignalFunPtr obj "activate-item" cb' after

-- signal MenuItem::deselect
type MenuItemDeselectCallback =
    IO ()

noMenuItemDeselectCallback :: Maybe MenuItemDeselectCallback
noMenuItemDeselectCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuItemDeselectCallback :: MenuItemDeselectCallbackC -> IO (FunPtr MenuItemDeselectCallbackC)

menuItemDeselectClosure :: MenuItemDeselectCallback -> IO Closure
menuItemDeselectClosure cb = newCClosure =<< mkMenuItemDeselectCallback wrapped
    where wrapped = menuItemDeselectCallbackWrapper cb

menuItemDeselectCallbackWrapper ::
    MenuItemDeselectCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuItemDeselectCallbackWrapper _cb _ _ = do
    _cb 

onMenuItemDeselect :: (GObject a, MonadIO m) => a -> MenuItemDeselectCallback -> m SignalHandlerId
onMenuItemDeselect obj cb = liftIO $ connectMenuItemDeselect obj cb SignalConnectBefore
afterMenuItemDeselect :: (GObject a, MonadIO m) => a -> MenuItemDeselectCallback -> m SignalHandlerId
afterMenuItemDeselect obj cb = connectMenuItemDeselect obj cb SignalConnectAfter

connectMenuItemDeselect :: (GObject a, MonadIO m) =>
                           a -> MenuItemDeselectCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemDeselect obj cb after = liftIO $ do
    cb' <- mkMenuItemDeselectCallback (menuItemDeselectCallbackWrapper cb)
    connectSignalFunPtr obj "deselect" cb' after

-- signal MenuItem::select
type MenuItemSelectCallback =
    IO ()

noMenuItemSelectCallback :: Maybe MenuItemSelectCallback
noMenuItemSelectCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuItemSelectCallback :: MenuItemSelectCallbackC -> IO (FunPtr MenuItemSelectCallbackC)

menuItemSelectClosure :: MenuItemSelectCallback -> IO Closure
menuItemSelectClosure cb = newCClosure =<< mkMenuItemSelectCallback wrapped
    where wrapped = menuItemSelectCallbackWrapper cb

menuItemSelectCallbackWrapper ::
    MenuItemSelectCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuItemSelectCallbackWrapper _cb _ _ = do
    _cb 

onMenuItemSelect :: (GObject a, MonadIO m) => a -> MenuItemSelectCallback -> m SignalHandlerId
onMenuItemSelect obj cb = liftIO $ connectMenuItemSelect obj cb SignalConnectBefore
afterMenuItemSelect :: (GObject a, MonadIO m) => a -> MenuItemSelectCallback -> m SignalHandlerId
afterMenuItemSelect obj cb = connectMenuItemSelect obj cb SignalConnectAfter

connectMenuItemSelect :: (GObject a, MonadIO m) =>
                         a -> MenuItemSelectCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemSelect obj cb after = liftIO $ do
    cb' <- mkMenuItemSelectCallback (menuItemSelectCallbackWrapper cb)
    connectSignalFunPtr obj "select" cb' after

-- signal MenuItem::toggle-size-allocate
type MenuItemToggleSizeAllocateCallback =
    Int32 ->
    IO ()

noMenuItemToggleSizeAllocateCallback :: Maybe MenuItemToggleSizeAllocateCallback
noMenuItemToggleSizeAllocateCallback = Nothing

type MenuItemToggleSizeAllocateCallbackC =
    Ptr () ->                               -- object
    Int32 ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkMenuItemToggleSizeAllocateCallback :: MenuItemToggleSizeAllocateCallbackC -> IO (FunPtr MenuItemToggleSizeAllocateCallbackC)

menuItemToggleSizeAllocateClosure :: MenuItemToggleSizeAllocateCallback -> IO Closure
menuItemToggleSizeAllocateClosure cb = newCClosure =<< mkMenuItemToggleSizeAllocateCallback wrapped
    where wrapped = menuItemToggleSizeAllocateCallbackWrapper cb

menuItemToggleSizeAllocateCallbackWrapper ::
    MenuItemToggleSizeAllocateCallback ->
    Ptr () ->
    Int32 ->
    Ptr () ->
    IO ()
menuItemToggleSizeAllocateCallbackWrapper _cb _ object _ = do
    _cb  object

onMenuItemToggleSizeAllocate :: (GObject a, MonadIO m) => a -> MenuItemToggleSizeAllocateCallback -> m SignalHandlerId
onMenuItemToggleSizeAllocate obj cb = liftIO $ connectMenuItemToggleSizeAllocate obj cb SignalConnectBefore
afterMenuItemToggleSizeAllocate :: (GObject a, MonadIO m) => a -> MenuItemToggleSizeAllocateCallback -> m SignalHandlerId
afterMenuItemToggleSizeAllocate obj cb = connectMenuItemToggleSizeAllocate obj cb SignalConnectAfter

connectMenuItemToggleSizeAllocate :: (GObject a, MonadIO m) =>
                                     a -> MenuItemToggleSizeAllocateCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemToggleSizeAllocate obj cb after = liftIO $ do
    cb' <- mkMenuItemToggleSizeAllocateCallback (menuItemToggleSizeAllocateCallbackWrapper cb)
    connectSignalFunPtr obj "toggle-size-allocate" cb' after

-- signal MenuItem::toggle-size-request
type MenuItemToggleSizeRequestCallback =
    Ptr () ->
    IO ()

noMenuItemToggleSizeRequestCallback :: Maybe MenuItemToggleSizeRequestCallback
noMenuItemToggleSizeRequestCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuItemToggleSizeRequestCallback :: MenuItemToggleSizeRequestCallbackC -> IO (FunPtr MenuItemToggleSizeRequestCallbackC)

menuItemToggleSizeRequestClosure :: MenuItemToggleSizeRequestCallback -> IO Closure
menuItemToggleSizeRequestClosure cb = newCClosure =<< mkMenuItemToggleSizeRequestCallback wrapped
    where wrapped = menuItemToggleSizeRequestCallbackWrapper cb

menuItemToggleSizeRequestCallbackWrapper ::
    MenuItemToggleSizeRequestCallback ->
    Ptr () ->
    Ptr () ->
    Ptr () ->
    IO ()
menuItemToggleSizeRequestCallbackWrapper _cb _ object _ = do
    _cb  object

onMenuItemToggleSizeRequest :: (GObject a, MonadIO m) => a -> MenuItemToggleSizeRequestCallback -> m SignalHandlerId
onMenuItemToggleSizeRequest obj cb = liftIO $ connectMenuItemToggleSizeRequest obj cb SignalConnectBefore
afterMenuItemToggleSizeRequest :: (GObject a, MonadIO m) => a -> MenuItemToggleSizeRequestCallback -> m SignalHandlerId
afterMenuItemToggleSizeRequest obj cb = connectMenuItemToggleSizeRequest obj cb SignalConnectAfter

connectMenuItemToggleSizeRequest :: (GObject a, MonadIO m) =>
                                    a -> MenuItemToggleSizeRequestCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuItemToggleSizeRequest obj cb after = liftIO $ do
    cb' <- mkMenuItemToggleSizeRequestCallback (menuItemToggleSizeRequestCallbackWrapper cb)
    connectSignalFunPtr obj "toggle-size-request" cb' after

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

getMenuItemAccelPath :: (MonadIO m, MenuItemK o) => o -> m T.Text
getMenuItemAccelPath obj = liftIO $ getObjectPropertyString obj "accel-path"

setMenuItemAccelPath :: (MonadIO m, MenuItemK o) => o -> T.Text -> m ()
setMenuItemAccelPath obj val = liftIO $ setObjectPropertyString obj "accel-path" val

constructMenuItemAccelPath :: T.Text -> IO ([Char], GValue)
constructMenuItemAccelPath val = constructObjectPropertyString "accel-path" val

data MenuItemAccelPathPropertyInfo
instance AttrInfo MenuItemAccelPathPropertyInfo where
    type AttrAllowedOps MenuItemAccelPathPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuItemAccelPathPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint MenuItemAccelPathPropertyInfo = MenuItemK
    type AttrGetType MenuItemAccelPathPropertyInfo = T.Text
    type AttrLabel MenuItemAccelPathPropertyInfo = "MenuItem::accel-path"
    attrGet _ = getMenuItemAccelPath
    attrSet _ = setMenuItemAccelPath
    attrConstruct _ = constructMenuItemAccelPath

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

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

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

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

data MenuItemLabelPropertyInfo
instance AttrInfo MenuItemLabelPropertyInfo where
    type AttrAllowedOps MenuItemLabelPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuItemLabelPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint MenuItemLabelPropertyInfo = MenuItemK
    type AttrGetType MenuItemLabelPropertyInfo = T.Text
    type AttrLabel MenuItemLabelPropertyInfo = "MenuItem::label"
    attrGet _ = getMenuItemLabel
    attrSet _ = setMenuItemLabel
    attrConstruct _ = constructMenuItemLabel

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

getMenuItemRightJustified :: (MonadIO m, MenuItemK o) => o -> m Bool
getMenuItemRightJustified obj = liftIO $ getObjectPropertyBool obj "right-justified"

setMenuItemRightJustified :: (MonadIO m, MenuItemK o) => o -> Bool -> m ()
setMenuItemRightJustified obj val = liftIO $ setObjectPropertyBool obj "right-justified" val

constructMenuItemRightJustified :: Bool -> IO ([Char], GValue)
constructMenuItemRightJustified val = constructObjectPropertyBool "right-justified" val

data MenuItemRightJustifiedPropertyInfo
instance AttrInfo MenuItemRightJustifiedPropertyInfo where
    type AttrAllowedOps MenuItemRightJustifiedPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuItemRightJustifiedPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint MenuItemRightJustifiedPropertyInfo = MenuItemK
    type AttrGetType MenuItemRightJustifiedPropertyInfo = Bool
    type AttrLabel MenuItemRightJustifiedPropertyInfo = "MenuItem::right-justified"
    attrGet _ = getMenuItemRightJustified
    attrSet _ = setMenuItemRightJustified
    attrConstruct _ = constructMenuItemRightJustified

-- VVV Prop "submenu"
   -- Type: TInterface "Gtk" "Menu"
   -- Flags: [PropertyReadable,PropertyWritable]

getMenuItemSubmenu :: (MonadIO m, MenuItemK o) => o -> m Menu
getMenuItemSubmenu obj = liftIO $ getObjectPropertyObject obj "submenu" Menu

setMenuItemSubmenu :: (MonadIO m, MenuItemK o, MenuK a) => o -> a -> m ()
setMenuItemSubmenu obj val = liftIO $ setObjectPropertyObject obj "submenu" val

constructMenuItemSubmenu :: (MenuK a) => a -> IO ([Char], GValue)
constructMenuItemSubmenu val = constructObjectPropertyObject "submenu" val

data MenuItemSubmenuPropertyInfo
instance AttrInfo MenuItemSubmenuPropertyInfo where
    type AttrAllowedOps MenuItemSubmenuPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuItemSubmenuPropertyInfo = MenuK
    type AttrBaseTypeConstraint MenuItemSubmenuPropertyInfo = MenuItemK
    type AttrGetType MenuItemSubmenuPropertyInfo = Menu
    type AttrLabel MenuItemSubmenuPropertyInfo = "MenuItem::submenu"
    attrGet _ = getMenuItemSubmenu
    attrSet _ = setMenuItemSubmenu
    attrConstruct _ = constructMenuItemSubmenu

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

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

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

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

data MenuItemUseUnderlinePropertyInfo
instance AttrInfo MenuItemUseUnderlinePropertyInfo where
    type AttrAllowedOps MenuItemUseUnderlinePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuItemUseUnderlinePropertyInfo = (~) Bool
    type AttrBaseTypeConstraint MenuItemUseUnderlinePropertyInfo = MenuItemK
    type AttrGetType MenuItemUseUnderlinePropertyInfo = Bool
    type AttrLabel MenuItemUseUnderlinePropertyInfo = "MenuItem::use-underline"
    attrGet _ = getMenuItemUseUnderline
    attrSet _ = setMenuItemUseUnderline
    attrConstruct _ = constructMenuItemUseUnderline

type instance AttributeList MenuItem = MenuItemAttributeList
type MenuItemAttributeList = ('[ '("accel-path", MenuItemAccelPathPropertyInfo), '("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), '("is-focus", WidgetIsFocusPropertyInfo), '("label", MenuItemLabelPropertyInfo), '("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), '("right-justified", MenuItemRightJustifiedPropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("style", WidgetStylePropertyInfo), '("submenu", MenuItemSubmenuPropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("use-action-appearance", ActivatableUseActionAppearancePropertyInfo), '("use-underline", MenuItemUseUnderlinePropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo)] :: [(Symbol, *)])

data MenuItemActivateSignalInfo
instance SignalInfo MenuItemActivateSignalInfo where
    type HaskellCallbackType MenuItemActivateSignalInfo = MenuItemActivateCallback
    connectSignal _ = connectMenuItemActivate

data MenuItemActivateItemSignalInfo
instance SignalInfo MenuItemActivateItemSignalInfo where
    type HaskellCallbackType MenuItemActivateItemSignalInfo = MenuItemActivateItemCallback
    connectSignal _ = connectMenuItemActivateItem

data MenuItemDeselectSignalInfo
instance SignalInfo MenuItemDeselectSignalInfo where
    type HaskellCallbackType MenuItemDeselectSignalInfo = MenuItemDeselectCallback
    connectSignal _ = connectMenuItemDeselect

data MenuItemSelectSignalInfo
instance SignalInfo MenuItemSelectSignalInfo where
    type HaskellCallbackType MenuItemSelectSignalInfo = MenuItemSelectCallback
    connectSignal _ = connectMenuItemSelect

data MenuItemToggleSizeAllocateSignalInfo
instance SignalInfo MenuItemToggleSizeAllocateSignalInfo where
    type HaskellCallbackType MenuItemToggleSizeAllocateSignalInfo = MenuItemToggleSizeAllocateCallback
    connectSignal _ = connectMenuItemToggleSizeAllocate

data MenuItemToggleSizeRequestSignalInfo
instance SignalInfo MenuItemToggleSizeRequestSignalInfo where
    type HaskellCallbackType MenuItemToggleSizeRequestSignalInfo = MenuItemToggleSizeRequestCallback
    connectSignal _ = connectMenuItemToggleSizeRequest

type instance SignalList MenuItem = MenuItemSignalList
type MenuItemSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("activate", MenuItemActivateSignalInfo), '("activate-item", MenuItemActivateItemSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("delete-event", WidgetDeleteEventSignalInfo), '("deselect", MenuItemDeselectSignalInfo), '("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), '("select", MenuItemSelectSignalInfo), '("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), '("toggle-size-allocate", MenuItemToggleSizeAllocateSignalInfo), '("toggle-size-request", MenuItemToggleSizeRequestSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "gtk_menu_item_new" gtk_menu_item_new :: 
    IO (Ptr MenuItem)


menuItemNew ::
    (MonadIO m) =>
    m MenuItem
menuItemNew  = liftIO $ do
    result <- gtk_menu_item_new
    checkUnexpectedReturnNULL "gtk_menu_item_new" result
    result' <- (newObject MenuItem) result
    return result'

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

foreign import ccall "gtk_menu_item_new_with_label" gtk_menu_item_new_with_label :: 
    CString ->                              -- label : TBasicType TUTF8
    IO (Ptr MenuItem)


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

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

foreign import ccall "gtk_menu_item_new_with_mnemonic" gtk_menu_item_new_with_mnemonic :: 
    CString ->                              -- label : TBasicType TUTF8
    IO (Ptr MenuItem)


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

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

foreign import ccall "gtk_menu_item_activate" gtk_menu_item_activate :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO ()


menuItemActivate ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    m ()
menuItemActivate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_item_activate _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_item_deselect" gtk_menu_item_deselect :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO ()


menuItemDeselect ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    m ()
menuItemDeselect _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_item_deselect _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_item_get_accel_path" gtk_menu_item_get_accel_path :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO CString


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

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

foreign import ccall "gtk_menu_item_get_label" gtk_menu_item_get_label :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO CString


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

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

foreign import ccall "gtk_menu_item_get_reserve_indicator" gtk_menu_item_get_reserve_indicator :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO CInt


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

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

foreign import ccall "gtk_menu_item_get_right_justified" gtk_menu_item_get_right_justified :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO CInt

{-# DEPRECATED menuItemGetRightJustified ["(Since version 3.2)","See gtk_menu_item_set_right_justified()"]#-}
menuItemGetRightJustified ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    m Bool
menuItemGetRightJustified _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_menu_item_get_right_justified _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

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


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

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

foreign import ccall "gtk_menu_item_get_use_underline" gtk_menu_item_get_use_underline :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO CInt


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

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

foreign import ccall "gtk_menu_item_select" gtk_menu_item_select :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    IO ()


menuItemSelect ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    m ()
menuItemSelect _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_item_select _obj'
    touchManagedPtr _obj
    return ()

-- method MenuItem::set_accel_path
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuItem", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "accel_path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuItem", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "accel_path", 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_menu_item_set_accel_path" gtk_menu_item_set_accel_path :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    CString ->                              -- accel_path : TBasicType TUTF8
    IO ()


menuItemSetAccelPath ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Maybe (T.Text) ->                       -- accel_path
    m ()
menuItemSetAccelPath _obj accel_path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeAccel_path <- case accel_path of
        Nothing -> return nullPtr
        Just jAccel_path -> do
            jAccel_path' <- textToCString jAccel_path
            return jAccel_path'
    gtk_menu_item_set_accel_path _obj' maybeAccel_path
    touchManagedPtr _obj
    freeMem maybeAccel_path
    return ()

-- method MenuItem::set_label
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuItem", 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" "MenuItem", 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_menu_item_set_label" gtk_menu_item_set_label :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    CString ->                              -- label : TBasicType TUTF8
    IO ()


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

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


menuItemSetReserveIndicator ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- reserve
    m ()
menuItemSetReserveIndicator _obj reserve = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let reserve' = (fromIntegral . fromEnum) reserve
    gtk_menu_item_set_reserve_indicator _obj' reserve'
    touchManagedPtr _obj
    return ()

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

{-# DEPRECATED menuItemSetRightJustified ["(Since version 3.2)","If you insist on using it, use","  gtk_widget_set_hexpand() and gtk_widget_set_halign()."]#-}
menuItemSetRightJustified ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- right_justified
    m ()
menuItemSetRightJustified _obj right_justified = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let right_justified' = (fromIntegral . fromEnum) right_justified
    gtk_menu_item_set_right_justified _obj' right_justified'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_item_set_submenu" gtk_menu_item_set_submenu :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    Ptr Menu ->                             -- submenu : TInterface "Gtk" "Menu"
    IO ()


menuItemSetSubmenu ::
    (MonadIO m, MenuItemK a, MenuK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- submenu
    m ()
menuItemSetSubmenu _obj submenu = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeSubmenu <- case submenu of
        Nothing -> return nullPtr
        Just jSubmenu -> do
            let jSubmenu' = unsafeManagedPtrCastPtr jSubmenu
            return jSubmenu'
    gtk_menu_item_set_submenu _obj' maybeSubmenu
    touchManagedPtr _obj
    whenJust submenu touchManagedPtr
    return ()

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


menuItemSetUseUnderline ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- setting
    m ()
menuItemSetUseUnderline _obj setting = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let setting' = (fromIntegral . fromEnum) setting
    gtk_menu_item_set_use_underline _obj' setting'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_item_toggle_size_allocate" gtk_menu_item_toggle_size_allocate :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    Int32 ->                                -- allocation : TBasicType TInt32
    IO ()


menuItemToggleSizeAllocate ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- allocation
    m ()
menuItemToggleSizeAllocate _obj allocation = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_item_toggle_size_allocate _obj' allocation
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_item_toggle_size_request" gtk_menu_item_toggle_size_request :: 
    Ptr MenuItem ->                         -- _obj : TInterface "Gtk" "MenuItem"
    Ptr Int32 ->                            -- requisition : TBasicType TInt32
    IO ()


menuItemToggleSizeRequest ::
    (MonadIO m, MenuItemK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- requisition
    m (Int32)
menuItemToggleSizeRequest _obj requisition = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    requisition' <- allocMem :: IO (Ptr Int32)
    poke requisition' requisition
    gtk_menu_item_toggle_size_request _obj' requisition'
    requisition'' <- peek requisition'
    touchManagedPtr _obj
    freeMem requisition'
    return requisition''