packages feed

dear-imgui-raw-imnodes-1.0.0: src/DearImGui/Raw/ImNodes/ImNodesIO.hsc

{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE PatternSynonyms #-}

-- This file was generated by dear-bindings-ffi. Do not edit by hand.

module DearImGui.Raw.ImNodes.ImNodesIO
  ( EmulateThreeButtonMouse (..)
  , ImNodesIO (..)
  , LinkDetachWithModifierClick (..)
  , MultipleSelectModifier (..)
  , destroy
  , destroyEmulateThreeButtonMouse
  , destroyLinkDetachWithModifierClick
  , destroyMultipleSelectModifier
  , init
  , initEmulateThreeButtonMouse
  , initLinkDetachWithModifierClick
  , initMultipleSelectModifier
  , withDefault
  , withDefaultEmulateThreeButtonMouse
  , withDefaultLinkDetachWithModifierClick
  , withDefaultMultipleSelectModifier
  ) where

import Control.Exception (bracket_)
import Foreign.C.Types
import Foreign.Marshal.Alloc (alloca)
import Foreign.Ptr (Ptr, plusPtr)
import Foreign.Storable (Storable (..))
import GHC.Records (HasField (..))
import Prelude hiding (init)

#include "dcimnodes.h"

-- structs (opaque)

data {-# CTYPE "dcimnodes.h" "ImNodesIO" #-} ImNodesIO = ImNodesIO
  { emulateThreeButtonMouse :: EmulateThreeButtonMouse
  , linkDetachWithModifierClick :: LinkDetachWithModifierClick
  , multipleSelectModifier :: MultipleSelectModifier
  , altMouseButton :: CInt
  , autoPanningSpeed :: Float
  }
  deriving (Eq, Show)
instance Storable ImNodesIO where
  sizeOf _    = #{size ImNodesIO}
  alignment _ = #{alignment ImNodesIO}
  peek p = ImNodesIO <$> #{peek ImNodesIO, EmulateThreeButtonMouse} p <*> #{peek ImNodesIO, LinkDetachWithModifierClick} p <*> #{peek ImNodesIO, MultipleSelectModifier} p <*> #{peek ImNodesIO, AltMouseButton} p <*> #{peek ImNodesIO, AutoPanningSpeed} p
  poke p v = do
    #{poke ImNodesIO, EmulateThreeButtonMouse} p v.emulateThreeButtonMouse
    #{poke ImNodesIO, LinkDetachWithModifierClick} p v.linkDetachWithModifierClick
    #{poke ImNodesIO, MultipleSelectModifier} p v.multipleSelectModifier
    #{poke ImNodesIO, AltMouseButton} p v.altMouseButton
    #{poke ImNodesIO, AutoPanningSpeed} p v.autoPanningSpeed

instance HasField "emulateThreeButtonMouse" (Ptr ImNodesIO) (Ptr EmulateThreeButtonMouse) where
  getField = #{ptr ImNodesIO, EmulateThreeButtonMouse}

instance HasField "linkDetachWithModifierClick" (Ptr ImNodesIO) (Ptr LinkDetachWithModifierClick) where
  getField = #{ptr ImNodesIO, LinkDetachWithModifierClick}

instance HasField "multipleSelectModifier" (Ptr ImNodesIO) (Ptr MultipleSelectModifier) where
  getField = #{ptr ImNodesIO, MultipleSelectModifier}

instance HasField "altMouseButton" (Ptr ImNodesIO) (Ptr CInt) where
  getField = #{ptr ImNodesIO, AltMouseButton}

instance HasField "autoPanningSpeed" (Ptr ImNodesIO) (Ptr Float) where
  getField = #{ptr ImNodesIO, AutoPanningSpeed}

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_Init_wrap"
  init
    :: Ptr ImNodesIO
    -> IO ()

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_Destroy_wrap"
  destroy
    :: Ptr ImNodesIO
    -> IO ()

withDefault :: (Ptr ImNodesIO -> IO a) -> IO a
withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)

newtype {-# CTYPE "dcimnodes.h" "ImNodesIO_EmulateThreeButtonMouse" #-} EmulateThreeButtonMouse = EmulateThreeButtonMouse
  { modifier :: Ptr CBool
  }
  deriving (Eq, Show)
instance Storable EmulateThreeButtonMouse where
  sizeOf _    = #{size ImNodesIO_EmulateThreeButtonMouse}
  alignment _ = #{alignment ImNodesIO_EmulateThreeButtonMouse}
  peek p = EmulateThreeButtonMouse <$> #{peek ImNodesIO_EmulateThreeButtonMouse, Modifier} p
  poke p v = do
    #{poke ImNodesIO_EmulateThreeButtonMouse, Modifier} p v.modifier

instance HasField "modifier" (Ptr EmulateThreeButtonMouse) (Ptr (Ptr CBool)) where
  getField = #{ptr ImNodesIO_EmulateThreeButtonMouse, Modifier}

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_EmulateThreeButtonMouse_Init_wrap"
  initEmulateThreeButtonMouse
    :: Ptr EmulateThreeButtonMouse
    -> IO ()

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_EmulateThreeButtonMouse_Destroy_wrap"
  destroyEmulateThreeButtonMouse
    :: Ptr EmulateThreeButtonMouse
    -> IO ()

withDefaultEmulateThreeButtonMouse :: (Ptr EmulateThreeButtonMouse -> IO a) -> IO a
withDefaultEmulateThreeButtonMouse k = alloca $ \p -> bracket_ (initEmulateThreeButtonMouse p) (destroyEmulateThreeButtonMouse p) (k p)

newtype {-# CTYPE "dcimnodes.h" "ImNodesIO_LinkDetachWithModifierClick" #-} LinkDetachWithModifierClick = LinkDetachWithModifierClick
  { modifier :: Ptr CBool
  }
  deriving (Eq, Show)
instance Storable LinkDetachWithModifierClick where
  sizeOf _    = #{size ImNodesIO_LinkDetachWithModifierClick}
  alignment _ = #{alignment ImNodesIO_LinkDetachWithModifierClick}
  peek p = LinkDetachWithModifierClick <$> #{peek ImNodesIO_LinkDetachWithModifierClick, Modifier} p
  poke p v = do
    #{poke ImNodesIO_LinkDetachWithModifierClick, Modifier} p v.modifier

instance HasField "modifier" (Ptr LinkDetachWithModifierClick) (Ptr (Ptr CBool)) where
  getField = #{ptr ImNodesIO_LinkDetachWithModifierClick, Modifier}

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_LinkDetachWithModifierClick_Init_wrap"
  initLinkDetachWithModifierClick
    :: Ptr LinkDetachWithModifierClick
    -> IO ()

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_LinkDetachWithModifierClick_Destroy_wrap"
  destroyLinkDetachWithModifierClick
    :: Ptr LinkDetachWithModifierClick
    -> IO ()

withDefaultLinkDetachWithModifierClick :: (Ptr LinkDetachWithModifierClick -> IO a) -> IO a
withDefaultLinkDetachWithModifierClick k = alloca $ \p -> bracket_ (initLinkDetachWithModifierClick p) (destroyLinkDetachWithModifierClick p) (k p)

newtype {-# CTYPE "dcimnodes.h" "ImNodesIO_MultipleSelectModifier" #-} MultipleSelectModifier = MultipleSelectModifier
  { modifier :: Ptr CBool
  }
  deriving (Eq, Show)
instance Storable MultipleSelectModifier where
  sizeOf _    = #{size ImNodesIO_MultipleSelectModifier}
  alignment _ = #{alignment ImNodesIO_MultipleSelectModifier}
  peek p = MultipleSelectModifier <$> #{peek ImNodesIO_MultipleSelectModifier, Modifier} p
  poke p v = do
    #{poke ImNodesIO_MultipleSelectModifier, Modifier} p v.modifier

instance HasField "modifier" (Ptr MultipleSelectModifier) (Ptr (Ptr CBool)) where
  getField = #{ptr ImNodesIO_MultipleSelectModifier, Modifier}

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_MultipleSelectModifier_Init_wrap"
  initMultipleSelectModifier
    :: Ptr MultipleSelectModifier
    -> IO ()

foreign import capi unsafe "DearImGuiWrappers.h ImNodesIO_MultipleSelectModifier_Destroy_wrap"
  destroyMultipleSelectModifier
    :: Ptr MultipleSelectModifier
    -> IO ()

withDefaultMultipleSelectModifier :: (Ptr MultipleSelectModifier -> IO a) -> IO a
withDefaultMultipleSelectModifier k = alloca $ \p -> bracket_ (initMultipleSelectModifier p) (destroyMultipleSelectModifier p) (k p)