packages feed

sdl3-bindgen-sys-0.0.0.1: src/SDL3/Sys/Bindgen/Tray.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}

-- | SDL offers a way to add items to the \"system tray\" (more correctly called the \"notification area\" on Windows). On platforms that offer this concept, an SDL app can add a tray icon, submenus, checkboxes, and clickable entries, and register a callback that is fired when the user clicks on these pieces. An opaque handle representing a toplevel system tray object.
--
--     @since 3.2.0
module SDL3.Sys.Bindgen.Tray (
  SDL3.Sys.Bindgen.Tray.SDL_Tray,
  SDL3.Sys.Bindgen.Tray.SDL_TrayMenu,
  SDL3.Sys.Bindgen.Tray.SDL_TrayEntry,
  SDL3.Sys.Bindgen.Tray.SDL_TrayEntryFlags (..),
  SDL3.Sys.Bindgen.Tray.sDL_TRAYENTRY_BUTTON,
  SDL3.Sys.Bindgen.Tray.sDL_TRAYENTRY_CHECKBOX,
  SDL3.Sys.Bindgen.Tray.sDL_TRAYENTRY_SUBMENU,
  SDL3.Sys.Bindgen.Tray.sDL_TRAYENTRY_DISABLED,
  SDL3.Sys.Bindgen.Tray.sDL_TRAYENTRY_CHECKED,
  SDL3.Sys.Bindgen.Tray.SDL_TrayCallback_Aux (..),
  SDL3.Sys.Bindgen.Tray.SDL_TrayCallback (..),
)
where

import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
import SDL3.Sys.Bindgen.Stdinc qualified

-- | [C declaration]: @struct SDL_Tray@, defined at @SDL3\/SDL_tray.h 51:16@
data SDL_Tray

-- | An opaque handle representing a menu\/submenu on a system tray object.
--
--     @since 3.2.0
--
--     [C declaration]: @struct SDL_TrayMenu@, defined at @SDL3\/SDL_tray.h 58:16@
data SDL_TrayMenu

-- | An opaque handle representing an entry on a system tray object.
--
--     @since 3.2.0
--
--     [C declaration]: @struct SDL_TrayEntry@, defined at @SDL3\/SDL_tray.h 65:16@
data SDL_TrayEntry

-- | Flags that control the creation of system tray entries.
--
--     Some of these flags are required; exactly one of them must be specified at the time a tray entry is created. Other flags are optional; zero or more of those can be OR\'ed together with the required flag.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_InsertTrayEntryAt'
--
--     [C declaration]: @SDL_TrayEntryFlags@, defined at @SDL3\/SDL_tray.h 78:16@
newtype SDL_TrayEntryFlags = SDL_TrayEntryFlags
  { unwrap :: SDL3.Sys.Bindgen.Stdinc.Uint32
  }
  deriving stock (BG.Generic, Eq, Ord, Read, Show)
  deriving newtype
    ( BG.Bitfield
    , BG.Bits
    , BG.FiniteBits
    , BG.HasFFIType
    , BG.Ix
    , BG.Prim
    , BG.Storable
    , Bounded
    , Enum
    , Integral
    , Marshal.ReadRaw
    , Marshal.StaticSize
    , Marshal.WriteRaw
    , Num
    , Real
    )

instance
  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
  => BG.CompatHasField.HasField "unwrap" SDL_TrayEntryFlags ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_TrayEntryFlags{unwrap = y1}
      , BG.getField @"unwrap" x0
      )

instance
  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
  => BG.HasField "unwrap" (BG.Ptr SDL_TrayEntryFlags) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TrayEntryFlags "unwrap" where
  type
    CFieldType SDL_TrayEntryFlags "unwrap" =
      SDL3.Sys.Bindgen.Stdinc.Uint32

  offset# = \_ -> \_ -> 0

-- | Make the entry a simple button. Required.
--
--     [C declaration]: @macro SDL_TRAYENTRY_BUTTON@, defined at @SDL3\/SDL_tray.h 80:9@
sDL_TRAYENTRY_BUTTON :: BG.CUInt
sDL_TRAYENTRY_BUTTON = (1 :: BG.CUInt)

-- | Make the entry a checkbox. Required.
--
--     [C declaration]: @macro SDL_TRAYENTRY_CHECKBOX@, defined at @SDL3\/SDL_tray.h 81:9@
sDL_TRAYENTRY_CHECKBOX :: BG.CUInt
sDL_TRAYENTRY_CHECKBOX = (2 :: BG.CUInt)

-- | Prepare the entry to have a submenu. Required
--
--     [C declaration]: @macro SDL_TRAYENTRY_SUBMENU@, defined at @SDL3\/SDL_tray.h 82:9@
sDL_TRAYENTRY_SUBMENU :: BG.CUInt
sDL_TRAYENTRY_SUBMENU = (4 :: BG.CUInt)

-- | Make the entry disabled. Optional.
--
--     [C declaration]: @macro SDL_TRAYENTRY_DISABLED@, defined at @SDL3\/SDL_tray.h 83:9@
sDL_TRAYENTRY_DISABLED :: BG.CUInt
sDL_TRAYENTRY_DISABLED = (2147483648 :: BG.CUInt)

-- | Make the entry checked. This is valid only for checkboxes. Optional.
--
--     [C declaration]: @macro SDL_TRAYENTRY_CHECKED@, defined at @SDL3\/SDL_tray.h 84:9@
sDL_TRAYENTRY_CHECKED :: BG.CUInt
sDL_TRAYENTRY_CHECKED = (1073741824 :: BG.CUInt)

-- | Auxiliary type used by 'SDL_TrayCallback'
--
--     [C declaration]: @SDL_TrayCallback@, defined at @SDL3\/SDL_tray.h 97:24@
newtype SDL_TrayCallback_Aux = SDL_TrayCallback_Aux
  { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL_TrayEntry -> IO ()
  }
  deriving stock (BG.Generic)
  deriving newtype (BG.HasFFIType)

-- __unique:__ @toSDL_TrayCallback_Aux@
foreign import ccall safe "wrapper"
  hs_bindgen_6a8b13b7097ccaf5_base
    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO ())
    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO ()))

-- __unique:__ @toSDL_TrayCallback_Aux@
hs_bindgen_6a8b13b7097ccaf5
  :: SDL_TrayCallback_Aux
  -> IO (BG.FunPtr SDL_TrayCallback_Aux)
hs_bindgen_6a8b13b7097ccaf5 =
  \fun0 ->
    fmap BG.castFunPtrFromFFIType (hs_bindgen_6a8b13b7097ccaf5_base (BG.toFFIType fun0))

-- __unique:__ @fromSDL_TrayCallback_Aux@
foreign import ccall safe "dynamic"
  hs_bindgen_0aa010ee3dd2ffa9_base
    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO ())
    -> BG.Ptr BG.Void
    -> BG.Ptr BG.Void
    -> IO ()

-- __unique:__ @fromSDL_TrayCallback_Aux@
hs_bindgen_0aa010ee3dd2ffa9
  :: BG.FunPtr SDL_TrayCallback_Aux
  -> SDL_TrayCallback_Aux
hs_bindgen_0aa010ee3dd2ffa9 =
  \funPtr0 ->
    BG.fromFFIType (hs_bindgen_0aa010ee3dd2ffa9_base (BG.castFunPtrToFFIType funPtr0))

instance BG.ToFunPtr SDL_TrayCallback_Aux where
  toFunPtr = hs_bindgen_6a8b13b7097ccaf5

instance BG.FromFunPtr SDL_TrayCallback_Aux where
  fromFunPtr = hs_bindgen_0aa010ee3dd2ffa9

instance
  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_TrayEntry -> IO ()))
  => BG.CompatHasField.HasField "unwrap" SDL_TrayCallback_Aux ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_TrayCallback_Aux{unwrap = y1}
      , BG.getField @"unwrap" x0
      )

instance
  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_TrayEntry -> IO ()))
  => BG.HasField "unwrap" (BG.Ptr SDL_TrayCallback_Aux) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TrayCallback_Aux "unwrap" where
  type
    CFieldType SDL_TrayCallback_Aux "unwrap" =
      BG.Ptr BG.Void -> BG.Ptr SDL_TrayEntry -> IO ()

  offset# = \_ -> \_ -> 0

-- | A callback that is invoked when a tray entry is selected.
--
--     [@userdata@]: an optional pointer to pass extra data to the callback when it will be invoked.
--
--     [@entry@]: the tray entry that was selected.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_SetTrayEntryCallback'
--
--     [C declaration]: @SDL_TrayCallback@, defined at @SDL3\/SDL_tray.h 97:24@
newtype SDL_TrayCallback = SDL_TrayCallback
  { unwrap :: BG.FunPtr SDL_TrayCallback_Aux
  }
  deriving stock (BG.Generic, Eq, Ord, Show)
  deriving newtype
    ( BG.HasFFIType
    , BG.Storable
    , Marshal.ReadRaw
    , Marshal.StaticSize
    , Marshal.WriteRaw
    )

instance
  (ty ~ BG.FunPtr SDL_TrayCallback_Aux)
  => BG.CompatHasField.HasField "unwrap" SDL_TrayCallback ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_TrayCallback{unwrap = y1}
      , BG.getField @"unwrap" x0
      )

instance
  (ty ~ BG.FunPtr SDL_TrayCallback_Aux)
  => BG.HasField "unwrap" (BG.Ptr SDL_TrayCallback) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TrayCallback "unwrap" where
  type
    CFieldType SDL_TrayCallback "unwrap" =
      BG.FunPtr SDL_TrayCallback_Aux

  offset# = \_ -> \_ -> 0