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

-- * Exported types
    MenuButton(..)                          ,
    MenuButtonK                             ,
    toMenuButton                            ,
    noMenuButton                            ,


 -- * Methods
-- ** menuButtonGetAlignWidget
    menuButtonGetAlignWidget                ,


-- ** menuButtonGetDirection
    menuButtonGetDirection                  ,


-- ** menuButtonGetMenuModel
    menuButtonGetMenuModel                  ,


-- ** menuButtonGetPopover
    menuButtonGetPopover                    ,


-- ** menuButtonGetPopup
    menuButtonGetPopup                      ,


-- ** menuButtonGetUsePopover
    menuButtonGetUsePopover                 ,


-- ** menuButtonNew
    menuButtonNew                           ,


-- ** menuButtonSetAlignWidget
    menuButtonSetAlignWidget                ,


-- ** menuButtonSetDirection
    menuButtonSetDirection                  ,


-- ** menuButtonSetMenuModel
    menuButtonSetMenuModel                  ,


-- ** menuButtonSetPopover
    menuButtonSetPopover                    ,


-- ** menuButtonSetPopup
    menuButtonSetPopup                      ,


-- ** menuButtonSetUsePopover
    menuButtonSetUsePopover                 ,




 -- * Properties
-- ** AlignWidget
    MenuButtonAlignWidgetPropertyInfo       ,
    constructMenuButtonAlignWidget          ,
    getMenuButtonAlignWidget                ,
    setMenuButtonAlignWidget                ,


-- ** Direction
    MenuButtonDirectionPropertyInfo         ,
    constructMenuButtonDirection            ,
    getMenuButtonDirection                  ,
    setMenuButtonDirection                  ,


-- ** MenuModel
    MenuButtonMenuModelPropertyInfo         ,
    constructMenuButtonMenuModel            ,
    getMenuButtonMenuModel                  ,
    setMenuButtonMenuModel                  ,


-- ** Popover
    MenuButtonPopoverPropertyInfo           ,
    constructMenuButtonPopover              ,
    getMenuButtonPopover                    ,
    setMenuButtonPopover                    ,


-- ** Popup
    MenuButtonPopupPropertyInfo             ,
    constructMenuButtonPopup                ,
    getMenuButtonPopup                      ,
    setMenuButtonPopup                      ,


-- ** UsePopover
    MenuButtonUsePopoverPropertyInfo        ,
    constructMenuButtonUsePopover           ,
    getMenuButtonUsePopover                 ,
    setMenuButtonUsePopover                 ,




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

newtype MenuButton = MenuButton (ForeignPtr MenuButton)
foreign import ccall "gtk_menu_button_get_type"
    c_gtk_menu_button_get_type :: IO GType

type instance ParentTypes MenuButton = MenuButtonParentTypes
type MenuButtonParentTypes = '[ToggleButton, Button, Bin, Container, Widget, GObject.Object, Atk.ImplementorIface, Actionable, Activatable, Buildable]

instance GObject MenuButton where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_menu_button_get_type
    

class GObject o => MenuButtonK o
instance (GObject o, IsDescendantOf MenuButton o) => MenuButtonK o

toMenuButton :: MenuButtonK o => o -> IO MenuButton
toMenuButton = unsafeCastTo MenuButton

noMenuButton :: Maybe MenuButton
noMenuButton = Nothing

-- VVV Prop "align-widget"
   -- Type: TInterface "Gtk" "Container"
   -- Flags: [PropertyReadable,PropertyWritable]

getMenuButtonAlignWidget :: (MonadIO m, MenuButtonK o) => o -> m Container
getMenuButtonAlignWidget obj = liftIO $ getObjectPropertyObject obj "align-widget" Container

setMenuButtonAlignWidget :: (MonadIO m, MenuButtonK o, ContainerK a) => o -> a -> m ()
setMenuButtonAlignWidget obj val = liftIO $ setObjectPropertyObject obj "align-widget" val

constructMenuButtonAlignWidget :: (ContainerK a) => a -> IO ([Char], GValue)
constructMenuButtonAlignWidget val = constructObjectPropertyObject "align-widget" val

data MenuButtonAlignWidgetPropertyInfo
instance AttrInfo MenuButtonAlignWidgetPropertyInfo where
    type AttrAllowedOps MenuButtonAlignWidgetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonAlignWidgetPropertyInfo = ContainerK
    type AttrBaseTypeConstraint MenuButtonAlignWidgetPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonAlignWidgetPropertyInfo = Container
    type AttrLabel MenuButtonAlignWidgetPropertyInfo = "MenuButton::align-widget"
    attrGet _ = getMenuButtonAlignWidget
    attrSet _ = setMenuButtonAlignWidget
    attrConstruct _ = constructMenuButtonAlignWidget

-- VVV Prop "direction"
   -- Type: TInterface "Gtk" "ArrowType"
   -- Flags: [PropertyReadable,PropertyWritable]

getMenuButtonDirection :: (MonadIO m, MenuButtonK o) => o -> m ArrowType
getMenuButtonDirection obj = liftIO $ getObjectPropertyEnum obj "direction"

setMenuButtonDirection :: (MonadIO m, MenuButtonK o) => o -> ArrowType -> m ()
setMenuButtonDirection obj val = liftIO $ setObjectPropertyEnum obj "direction" val

constructMenuButtonDirection :: ArrowType -> IO ([Char], GValue)
constructMenuButtonDirection val = constructObjectPropertyEnum "direction" val

data MenuButtonDirectionPropertyInfo
instance AttrInfo MenuButtonDirectionPropertyInfo where
    type AttrAllowedOps MenuButtonDirectionPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonDirectionPropertyInfo = (~) ArrowType
    type AttrBaseTypeConstraint MenuButtonDirectionPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonDirectionPropertyInfo = ArrowType
    type AttrLabel MenuButtonDirectionPropertyInfo = "MenuButton::direction"
    attrGet _ = getMenuButtonDirection
    attrSet _ = setMenuButtonDirection
    attrConstruct _ = constructMenuButtonDirection

-- VVV Prop "menu-model"
   -- Type: TInterface "Gio" "MenuModel"
   -- Flags: [PropertyReadable,PropertyWritable]

getMenuButtonMenuModel :: (MonadIO m, MenuButtonK o) => o -> m Gio.MenuModel
getMenuButtonMenuModel obj = liftIO $ getObjectPropertyObject obj "menu-model" Gio.MenuModel

setMenuButtonMenuModel :: (MonadIO m, MenuButtonK o, Gio.MenuModelK a) => o -> a -> m ()
setMenuButtonMenuModel obj val = liftIO $ setObjectPropertyObject obj "menu-model" val

constructMenuButtonMenuModel :: (Gio.MenuModelK a) => a -> IO ([Char], GValue)
constructMenuButtonMenuModel val = constructObjectPropertyObject "menu-model" val

data MenuButtonMenuModelPropertyInfo
instance AttrInfo MenuButtonMenuModelPropertyInfo where
    type AttrAllowedOps MenuButtonMenuModelPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonMenuModelPropertyInfo = Gio.MenuModelK
    type AttrBaseTypeConstraint MenuButtonMenuModelPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonMenuModelPropertyInfo = Gio.MenuModel
    type AttrLabel MenuButtonMenuModelPropertyInfo = "MenuButton::menu-model"
    attrGet _ = getMenuButtonMenuModel
    attrSet _ = setMenuButtonMenuModel
    attrConstruct _ = constructMenuButtonMenuModel

-- VVV Prop "popover"
   -- Type: TInterface "Gtk" "Popover"
   -- Flags: [PropertyReadable,PropertyWritable]

getMenuButtonPopover :: (MonadIO m, MenuButtonK o) => o -> m Popover
getMenuButtonPopover obj = liftIO $ getObjectPropertyObject obj "popover" Popover

setMenuButtonPopover :: (MonadIO m, MenuButtonK o, PopoverK a) => o -> a -> m ()
setMenuButtonPopover obj val = liftIO $ setObjectPropertyObject obj "popover" val

constructMenuButtonPopover :: (PopoverK a) => a -> IO ([Char], GValue)
constructMenuButtonPopover val = constructObjectPropertyObject "popover" val

data MenuButtonPopoverPropertyInfo
instance AttrInfo MenuButtonPopoverPropertyInfo where
    type AttrAllowedOps MenuButtonPopoverPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonPopoverPropertyInfo = PopoverK
    type AttrBaseTypeConstraint MenuButtonPopoverPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonPopoverPropertyInfo = Popover
    type AttrLabel MenuButtonPopoverPropertyInfo = "MenuButton::popover"
    attrGet _ = getMenuButtonPopover
    attrSet _ = setMenuButtonPopover
    attrConstruct _ = constructMenuButtonPopover

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

getMenuButtonPopup :: (MonadIO m, MenuButtonK o) => o -> m Menu
getMenuButtonPopup obj = liftIO $ getObjectPropertyObject obj "popup" Menu

setMenuButtonPopup :: (MonadIO m, MenuButtonK o, MenuK a) => o -> a -> m ()
setMenuButtonPopup obj val = liftIO $ setObjectPropertyObject obj "popup" val

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

data MenuButtonPopupPropertyInfo
instance AttrInfo MenuButtonPopupPropertyInfo where
    type AttrAllowedOps MenuButtonPopupPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonPopupPropertyInfo = MenuK
    type AttrBaseTypeConstraint MenuButtonPopupPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonPopupPropertyInfo = Menu
    type AttrLabel MenuButtonPopupPropertyInfo = "MenuButton::popup"
    attrGet _ = getMenuButtonPopup
    attrSet _ = setMenuButtonPopup
    attrConstruct _ = constructMenuButtonPopup

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

getMenuButtonUsePopover :: (MonadIO m, MenuButtonK o) => o -> m Bool
getMenuButtonUsePopover obj = liftIO $ getObjectPropertyBool obj "use-popover"

setMenuButtonUsePopover :: (MonadIO m, MenuButtonK o) => o -> Bool -> m ()
setMenuButtonUsePopover obj val = liftIO $ setObjectPropertyBool obj "use-popover" val

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

data MenuButtonUsePopoverPropertyInfo
instance AttrInfo MenuButtonUsePopoverPropertyInfo where
    type AttrAllowedOps MenuButtonUsePopoverPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuButtonUsePopoverPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint MenuButtonUsePopoverPropertyInfo = MenuButtonK
    type AttrGetType MenuButtonUsePopoverPropertyInfo = Bool
    type AttrLabel MenuButtonUsePopoverPropertyInfo = "MenuButton::use-popover"
    attrGet _ = getMenuButtonUsePopover
    attrSet _ = setMenuButtonUsePopover
    attrConstruct _ = constructMenuButtonUsePopover

type instance AttributeList MenuButton = MenuButtonAttributeList
type MenuButtonAttributeList = ('[ '("action-name", ActionableActionNamePropertyInfo), '("action-target", ActionableActionTargetPropertyInfo), '("active", ToggleButtonActivePropertyInfo), '("align-widget", MenuButtonAlignWidgetPropertyInfo), '("always-show-image", ButtonAlwaysShowImagePropertyInfo), '("app-paintable", WidgetAppPaintablePropertyInfo), '("border-width", ContainerBorderWidthPropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("child", ContainerChildPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("direction", MenuButtonDirectionPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("draw-indicator", ToggleButtonDrawIndicatorPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("focus-on-click", ButtonFocusOnClickPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("image", ButtonImagePropertyInfo), '("image-position", ButtonImagePositionPropertyInfo), '("inconsistent", ToggleButtonInconsistentPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("label", ButtonLabelPropertyInfo), '("margin", WidgetMarginPropertyInfo), '("margin-bottom", WidgetMarginBottomPropertyInfo), '("margin-end", WidgetMarginEndPropertyInfo), '("margin-left", WidgetMarginLeftPropertyInfo), '("margin-right", WidgetMarginRightPropertyInfo), '("margin-start", WidgetMarginStartPropertyInfo), '("margin-top", WidgetMarginTopPropertyInfo), '("menu-model", MenuButtonMenuModelPropertyInfo), '("name", WidgetNamePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("parent", WidgetParentPropertyInfo), '("popover", MenuButtonPopoverPropertyInfo), '("popup", MenuButtonPopupPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("related-action", ActivatableRelatedActionPropertyInfo), '("relief", ButtonReliefPropertyInfo), '("resize-mode", ContainerResizeModePropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("style", WidgetStylePropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("use-action-appearance", ActivatableUseActionAppearancePropertyInfo), '("use-popover", MenuButtonUsePopoverPropertyInfo), '("use-stock", ButtonUseStockPropertyInfo), '("use-underline", ButtonUseUnderlinePropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo), '("xalign", ButtonXalignPropertyInfo), '("yalign", ButtonYalignPropertyInfo)] :: [(Symbol, *)])

type instance SignalList MenuButton = MenuButtonSignalList
type MenuButtonSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("activate", ButtonActivateSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("clicked", ButtonClickedSignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("delete-event", WidgetDeleteEventSignalInfo), '("destroy", WidgetDestroySignalInfo), '("destroy-event", WidgetDestroyEventSignalInfo), '("direction-changed", WidgetDirectionChangedSignalInfo), '("drag-begin", WidgetDragBeginSignalInfo), '("drag-data-delete", WidgetDragDataDeleteSignalInfo), '("drag-data-get", WidgetDragDataGetSignalInfo), '("drag-data-received", WidgetDragDataReceivedSignalInfo), '("drag-drop", WidgetDragDropSignalInfo), '("drag-end", WidgetDragEndSignalInfo), '("drag-failed", WidgetDragFailedSignalInfo), '("drag-leave", WidgetDragLeaveSignalInfo), '("drag-motion", WidgetDragMotionSignalInfo), '("draw", WidgetDrawSignalInfo), '("enter", ButtonEnterSignalInfo), '("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", ButtonLeaveSignalInfo), '("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), '("pressed", ButtonPressedSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("released", ButtonReleasedSignalInfo), '("remove", ContainerRemoveSignalInfo), '("screen-changed", WidgetScreenChangedSignalInfo), '("scroll-event", WidgetScrollEventSignalInfo), '("selection-clear-event", WidgetSelectionClearEventSignalInfo), '("selection-get", WidgetSelectionGetSignalInfo), '("selection-notify-event", WidgetSelectionNotifyEventSignalInfo), '("selection-received", WidgetSelectionReceivedSignalInfo), '("selection-request-event", WidgetSelectionRequestEventSignalInfo), '("set-focus-child", ContainerSetFocusChildSignalInfo), '("show", WidgetShowSignalInfo), '("show-help", WidgetShowHelpSignalInfo), '("size-allocate", WidgetSizeAllocateSignalInfo), '("state-changed", WidgetStateChangedSignalInfo), '("state-flags-changed", WidgetStateFlagsChangedSignalInfo), '("style-set", WidgetStyleSetSignalInfo), '("style-updated", WidgetStyleUpdatedSignalInfo), '("toggled", ToggleButtonToggledSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "gtk_menu_button_new" gtk_menu_button_new :: 
    IO (Ptr MenuButton)


menuButtonNew ::
    (MonadIO m) =>
    m MenuButton
menuButtonNew  = liftIO $ do
    result <- gtk_menu_button_new
    checkUnexpectedReturnNULL "gtk_menu_button_new" result
    result' <- (newObject MenuButton) result
    return result'

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


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

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

foreign import ccall "gtk_menu_button_get_direction" gtk_menu_button_get_direction :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    IO CUInt


menuButtonGetDirection ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    m ArrowType
menuButtonGetDirection _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_menu_button_get_direction _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_menu_button_get_menu_model" gtk_menu_button_get_menu_model :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    IO (Ptr Gio.MenuModel)


menuButtonGetMenuModel ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    m Gio.MenuModel
menuButtonGetMenuModel _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_menu_button_get_menu_model _obj'
    checkUnexpectedReturnNULL "gtk_menu_button_get_menu_model" result
    result' <- (newObject Gio.MenuModel) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_menu_button_get_popover" gtk_menu_button_get_popover :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    IO (Ptr Popover)


menuButtonGetPopover ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    m Popover
menuButtonGetPopover _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_menu_button_get_popover _obj'
    checkUnexpectedReturnNULL "gtk_menu_button_get_popover" result
    result' <- (newObject Popover) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "gtk_menu_button_get_popup" gtk_menu_button_get_popup :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    IO (Ptr Menu)


menuButtonGetPopup ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    m Menu
menuButtonGetPopup _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_menu_button_get_popup _obj'
    checkUnexpectedReturnNULL "gtk_menu_button_get_popup" result
    result' <- (newObject Menu) result
    touchManagedPtr _obj
    return result'

-- method MenuButton::get_use_popover
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", 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_button_get_use_popover" gtk_menu_button_get_use_popover :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    IO CInt


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

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

foreign import ccall "gtk_menu_button_set_align_widget" gtk_menu_button_set_align_widget :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    Ptr Widget ->                           -- align_widget : TInterface "Gtk" "Widget"
    IO ()


menuButtonSetAlignWidget ::
    (MonadIO m, MenuButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- align_widget
    m ()
menuButtonSetAlignWidget _obj align_widget = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeAlign_widget <- case align_widget of
        Nothing -> return nullPtr
        Just jAlign_widget -> do
            let jAlign_widget' = unsafeManagedPtrCastPtr jAlign_widget
            return jAlign_widget'
    gtk_menu_button_set_align_widget _obj' maybeAlign_widget
    touchManagedPtr _obj
    whenJust align_widget touchManagedPtr
    return ()

-- method MenuButton::set_direction
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "direction", argType = TInterface "Gtk" "ArrowType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "direction", argType = TInterface "Gtk" "ArrowType", 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_button_set_direction" gtk_menu_button_set_direction :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    CUInt ->                                -- direction : TInterface "Gtk" "ArrowType"
    IO ()


menuButtonSetDirection ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    ArrowType ->                            -- direction
    m ()
menuButtonSetDirection _obj direction = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let direction' = (fromIntegral . fromEnum) direction
    gtk_menu_button_set_direction _obj' direction'
    touchManagedPtr _obj
    return ()

-- method MenuButton::set_menu_model
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "menu_model", argType = TInterface "Gio" "MenuModel", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuButton", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "menu_model", argType = TInterface "Gio" "MenuModel", 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_button_set_menu_model" gtk_menu_button_set_menu_model :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    Ptr Gio.MenuModel ->                    -- menu_model : TInterface "Gio" "MenuModel"
    IO ()


menuButtonSetMenuModel ::
    (MonadIO m, MenuButtonK a, Gio.MenuModelK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- menu_model
    m ()
menuButtonSetMenuModel _obj menu_model = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeMenu_model <- case menu_model of
        Nothing -> return nullPtr
        Just jMenu_model -> do
            let jMenu_model' = unsafeManagedPtrCastPtr jMenu_model
            return jMenu_model'
    gtk_menu_button_set_menu_model _obj' maybeMenu_model
    touchManagedPtr _obj
    whenJust menu_model touchManagedPtr
    return ()

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

foreign import ccall "gtk_menu_button_set_popover" gtk_menu_button_set_popover :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    Ptr Widget ->                           -- popover : TInterface "Gtk" "Widget"
    IO ()


menuButtonSetPopover ::
    (MonadIO m, MenuButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- popover
    m ()
menuButtonSetPopover _obj popover = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybePopover <- case popover of
        Nothing -> return nullPtr
        Just jPopover -> do
            let jPopover' = unsafeManagedPtrCastPtr jPopover
            return jPopover'
    gtk_menu_button_set_popover _obj' maybePopover
    touchManagedPtr _obj
    whenJust popover touchManagedPtr
    return ()

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

foreign import ccall "gtk_menu_button_set_popup" gtk_menu_button_set_popup :: 
    Ptr MenuButton ->                       -- _obj : TInterface "Gtk" "MenuButton"
    Ptr Widget ->                           -- menu : TInterface "Gtk" "Widget"
    IO ()


menuButtonSetPopup ::
    (MonadIO m, MenuButtonK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- menu
    m ()
menuButtonSetPopup _obj menu = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeMenu <- case menu of
        Nothing -> return nullPtr
        Just jMenu -> do
            let jMenu' = unsafeManagedPtrCastPtr jMenu
            return jMenu'
    gtk_menu_button_set_popup _obj' maybeMenu
    touchManagedPtr _obj
    whenJust menu touchManagedPtr
    return ()

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


menuButtonSetUsePopover ::
    (MonadIO m, MenuButtonK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- use_popover
    m ()
menuButtonSetUsePopover _obj use_popover = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let use_popover' = (fromIntegral . fromEnum) use_popover
    gtk_menu_button_set_use_popover _obj' use_popover'
    touchManagedPtr _obj
    return ()