{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- | File dialog support.
--
--     SDL offers file dialogs, to let users select files with native GUI interfaces. There are \"open\" dialogs, \"save\" dialogs, and folder selection dialogs. The app can control some details, such as filtering to specific files, or whether multiple files can be selected by the user.
--
--     Note that launching a file dialog is a non-blocking operation; control returns to the app immediately, and a callback is called later (possibly in another thread) when the user makes a choice. An entry for filters for file dialogs.
--
--     @name@ is a user-readable label for the filter (for example, \"Office document\").
--
--     @pattern@ is a semicolon-separated list of file extensions (for example, \"doc;docx\"). File extensions may only contain alphanumeric characters, hyphens, underscores and periods. Alternatively, the whole string can be a single asterisk (\"*\"), which serves as an \"All files\" filter.
--
--     @since 3.2.0
--
--     [See also]: 'SDL_DialogFileCallback', 'sDL_ShowOpenFileDialog', 'sDL_ShowSaveFileDialog', 'sDL_ShowOpenFolderDialog', 'sDL_ShowFileDialogWithProperties'
module SDL3.Sys.Bindgen.Dialog (
  SDL3.Sys.Bindgen.Dialog.SDL_DialogFileFilter (..),
  SDL3.Sys.Bindgen.Dialog.SDL_DialogFileCallback_Aux (..),
  SDL3.Sys.Bindgen.Dialog.SDL_DialogFileCallback (..),
  SDL3.Sys.Bindgen.Dialog.SDL_FileDialogType (..),
  pattern SDL3.Sys.Bindgen.Dialog.SDL_FILEDIALOG_OPENFILE,
  pattern SDL3.Sys.Bindgen.Dialog.SDL_FILEDIALOG_SAVEFILE,
  pattern SDL3.Sys.Bindgen.Dialog.SDL_FILEDIALOG_OPENFOLDER,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_FILTERS_POINTER,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_NFILTERS_NUMBER,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_WINDOW_POINTER,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_LOCATION_STRING,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_MANY_BOOLEAN,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_TITLE_STRING,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_ACCEPT_STRING,
  SDL3.Sys.Bindgen.Dialog.sDL_PROP_FILE_DIALOG_CANCEL_STRING,
)
where

import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), (>>), type (~))

import HsBindgen.Runtime.CEnum qualified as CEnum
import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.PtrConst qualified as PtrConst
import HsBindgen.Runtime.Struct qualified as Struct
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField

-- | [C declaration]: @struct SDL_DialogFileFilter@, defined at @SDL3\/SDL_dialog.h 70:16@
data SDL_DialogFileFilter = SDL_DialogFileFilter
  { SDL_DialogFileFilter -> PtrConst CChar
name :: PtrConst.PtrConst BG.CChar
  -- ^ [C declaration]: @name@, defined at @SDL3\/SDL_dialog.h 72:17@
  , SDL_DialogFileFilter -> PtrConst CChar
pattern' :: PtrConst.PtrConst BG.CChar
  -- ^ [C declaration]: @pattern@, defined at @SDL3\/SDL_dialog.h 73:17@
  }
  deriving stock ((forall x. SDL_DialogFileFilter -> Rep SDL_DialogFileFilter x)
-> (forall x. Rep SDL_DialogFileFilter x -> SDL_DialogFileFilter)
-> Generic SDL_DialogFileFilter
forall x. Rep SDL_DialogFileFilter x -> SDL_DialogFileFilter
forall x. SDL_DialogFileFilter -> Rep SDL_DialogFileFilter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_DialogFileFilter -> Rep SDL_DialogFileFilter x
from :: forall x. SDL_DialogFileFilter -> Rep SDL_DialogFileFilter x
$cto :: forall x. Rep SDL_DialogFileFilter x -> SDL_DialogFileFilter
to :: forall x. Rep SDL_DialogFileFilter x -> SDL_DialogFileFilter
BG.Generic, SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool
(SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool)
-> (SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool)
-> Eq SDL_DialogFileFilter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool
== :: SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool
$c/= :: SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool
/= :: SDL_DialogFileFilter -> SDL_DialogFileFilter -> Bool
Eq, Int -> SDL_DialogFileFilter -> ShowS
[SDL_DialogFileFilter] -> ShowS
SDL_DialogFileFilter -> String
(Int -> SDL_DialogFileFilter -> ShowS)
-> (SDL_DialogFileFilter -> String)
-> ([SDL_DialogFileFilter] -> ShowS)
-> Show SDL_DialogFileFilter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_DialogFileFilter -> ShowS
showsPrec :: Int -> SDL_DialogFileFilter -> ShowS
$cshow :: SDL_DialogFileFilter -> String
show :: SDL_DialogFileFilter -> String
$cshowList :: [SDL_DialogFileFilter] -> ShowS
showList :: [SDL_DialogFileFilter] -> ShowS
Show)

instance Marshal.StaticSize SDL_DialogFileFilter where
  staticSizeOf :: Proxy SDL_DialogFileFilter -> Int
staticSizeOf = \Proxy SDL_DialogFileFilter
_ -> (Int
16 :: Int)

  staticAlignment :: Proxy SDL_DialogFileFilter -> Int
staticAlignment = \Proxy SDL_DialogFileFilter
_ -> (Int
8 :: Int)

instance Marshal.ReadRaw SDL_DialogFileFilter where
  readRaw :: Ptr SDL_DialogFileFilter -> IO SDL_DialogFileFilter
readRaw =
    \Ptr SDL_DialogFileFilter
ptr0 ->
      (PtrConst CChar -> PtrConst CChar -> SDL_DialogFileFilter)
-> IO (PtrConst CChar -> PtrConst CChar -> SDL_DialogFileFilter)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PtrConst CChar -> PtrConst CChar -> SDL_DialogFileFilter
SDL_DialogFileFilter
        IO (PtrConst CChar -> PtrConst CChar -> SDL_DialogFileFilter)
-> IO (PtrConst CChar)
-> IO (PtrConst CChar -> SDL_DialogFileFilter)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "name"
-> Ptr SDL_DialogFileFilter
-> IO (CFieldType SDL_DialogFileFilter "name")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"name") Ptr SDL_DialogFileFilter
ptr0
        IO (PtrConst CChar -> SDL_DialogFileFilter)
-> IO (PtrConst CChar) -> IO SDL_DialogFileFilter
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "pattern'"
-> Ptr SDL_DialogFileFilter
-> IO (CFieldType SDL_DialogFileFilter "pattern'")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"pattern'") Ptr SDL_DialogFileFilter
ptr0

instance Marshal.WriteRaw SDL_DialogFileFilter where
  writeRaw :: Ptr SDL_DialogFileFilter -> SDL_DialogFileFilter -> IO ()
writeRaw =
    \Ptr SDL_DialogFileFilter
ptr0 ->
      \SDL_DialogFileFilter
s1 ->
        case SDL_DialogFileFilter
s1 of
          SDL_DialogFileFilter PtrConst CChar
name2 PtrConst CChar
pattern'3 ->
            Proxy "name"
-> Ptr SDL_DialogFileFilter
-> CFieldType SDL_DialogFileFilter "name"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"name") Ptr SDL_DialogFileFilter
ptr0 PtrConst CChar
CFieldType SDL_DialogFileFilter "name"
name2
              IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "pattern'"
-> Ptr SDL_DialogFileFilter
-> CFieldType SDL_DialogFileFilter "pattern'"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"pattern'") Ptr SDL_DialogFileFilter
ptr0 PtrConst CChar
CFieldType SDL_DialogFileFilter "pattern'"
pattern'3

deriving via Marshal.EquivStorable SDL_DialogFileFilter instance BG.Storable SDL_DialogFileFilter

deriving via
  Struct.IsStructViaReadRaw SDL_DialogFileFilter
  instance
    Struct.IsStruct SDL_DialogFileFilter

-- | [C declaration]: @name@, defined at @SDL3\/SDL_dialog.h 72:17@
instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.CompatHasField.HasField "name" SDL_DialogFileFilter ty
  where
  hasField :: SDL_DialogFileFilter -> (ty -> SDL_DialogFileFilter, ty)
hasField =
    \SDL_DialogFileFilter
x0 ->
      ( \ty
y1 ->
          SDL_DialogFileFilter{name :: PtrConst CChar
name = ty
PtrConst CChar
y1, pattern' :: PtrConst CChar
pattern' = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"pattern'" SDL_DialogFileFilter
x0}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"name" SDL_DialogFileFilter
x0
      )

instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.HasField "name" (BG.Ptr SDL_DialogFileFilter) (BG.Ptr ty)
  where
  getField :: Ptr SDL_DialogFileFilter -> Ptr ty
getField = Proxy "name"
-> Ptr SDL_DialogFileFilter
-> Ptr (CFieldType SDL_DialogFileFilter "name")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"name")

instance HasCField.HasCField SDL_DialogFileFilter "name" where
  type
    CFieldType SDL_DialogFileFilter "name" =
      PtrConst.PtrConst BG.CChar

  offset# :: Proxy# SDL_DialogFileFilter -> Proxy# "name" -> Int
offset# = \Proxy# SDL_DialogFileFilter
_ -> \Proxy# "name"
_ -> Int
0

-- | [C declaration]: @pattern@, defined at @SDL3\/SDL_dialog.h 73:17@
instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.CompatHasField.HasField "pattern'" SDL_DialogFileFilter ty
  where
  hasField :: SDL_DialogFileFilter -> (ty -> SDL_DialogFileFilter, ty)
hasField =
    \SDL_DialogFileFilter
x0 ->
      ( \ty
y1 ->
          SDL_DialogFileFilter{pattern' :: PtrConst CChar
pattern' = ty
PtrConst CChar
y1, name :: PtrConst CChar
name = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"name" SDL_DialogFileFilter
x0}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"pattern'" SDL_DialogFileFilter
x0
      )

instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.HasField "pattern'" (BG.Ptr SDL_DialogFileFilter) (BG.Ptr ty)
  where
  getField :: Ptr SDL_DialogFileFilter -> Ptr ty
getField = Proxy "pattern'"
-> Ptr SDL_DialogFileFilter
-> Ptr (CFieldType SDL_DialogFileFilter "pattern'")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"pattern'")

instance HasCField.HasCField SDL_DialogFileFilter "pattern'" where
  type
    CFieldType SDL_DialogFileFilter "pattern'" =
      PtrConst.PtrConst BG.CChar

  offset# :: Proxy# SDL_DialogFileFilter -> Proxy# "pattern'" -> Int
offset# = \Proxy# SDL_DialogFileFilter
_ -> \Proxy# "pattern'"
_ -> Int
8

-- | Auxiliary type used by 'SDL_DialogFileCallback'
--
--     [C declaration]: @SDL_DialogFileCallback@, defined at @SDL3\/SDL_dialog.h 113:24@
newtype SDL_DialogFileCallback_Aux = SDL_DialogFileCallback_Aux
  { SDL_DialogFileCallback_Aux
-> Ptr Void -> PtrConst (PtrConst CChar) -> CInt -> IO ()
unwrap :: BG.Ptr BG.Void -> PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CInt -> IO ()
  }
  deriving stock ((forall x.
 SDL_DialogFileCallback_Aux -> Rep SDL_DialogFileCallback_Aux x)
-> (forall x.
    Rep SDL_DialogFileCallback_Aux x -> SDL_DialogFileCallback_Aux)
-> Generic SDL_DialogFileCallback_Aux
forall x.
Rep SDL_DialogFileCallback_Aux x -> SDL_DialogFileCallback_Aux
forall x.
SDL_DialogFileCallback_Aux -> Rep SDL_DialogFileCallback_Aux x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
SDL_DialogFileCallback_Aux -> Rep SDL_DialogFileCallback_Aux x
from :: forall x.
SDL_DialogFileCallback_Aux -> Rep SDL_DialogFileCallback_Aux x
$cto :: forall x.
Rep SDL_DialogFileCallback_Aux x -> SDL_DialogFileCallback_Aux
to :: forall x.
Rep SDL_DialogFileCallback_Aux x -> SDL_DialogFileCallback_Aux
BG.Generic)

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

-- __unique:__ @toSDL_DialogFileCallback_Aux@
hs_bindgen_99f6498d5c37dad6
  :: SDL_DialogFileCallback_Aux
  -> IO (BG.FunPtr SDL_DialogFileCallback_Aux)
hs_bindgen_99f6498d5c37dad6 :: SDL_DialogFileCallback_Aux
-> IO (FunPtr SDL_DialogFileCallback_Aux)
hs_bindgen_99f6498d5c37dad6 =
  \SDL_DialogFileCallback_Aux
fun0 ->
    (FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ())
 -> FunPtr SDL_DialogFileCallback_Aux)
-> IO (FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ()))
-> IO (FunPtr SDL_DialogFileCallback_Aux)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
      FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ())
-> FunPtr SDL_DialogFileCallback_Aux
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr
      ( (Ptr Void -> Ptr Void -> CInt -> IO ())
-> IO (FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ()))
hs_bindgen_99f6498d5c37dad6_base
          ( \Ptr Void
x1 ->
              \Ptr Void
x2 ->
                \CInt
x3 ->
                  forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_DialogFileCallback_Aux
fun0 (FFIType (Ptr Void) -> Ptr Void
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (Ptr Void)
x1) (FFIType (PtrConst (PtrConst CChar)) -> PtrConst (PtrConst CChar)
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (PtrConst (PtrConst CChar))
x2) (FFIType CInt -> CInt
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType CInt
FFIType CInt
x3)
          )
      )

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

-- __unique:__ @fromSDL_DialogFileCallback_Aux@
hs_bindgen_10f8f9d1eb0aafd5
  :: BG.FunPtr SDL_DialogFileCallback_Aux
  -> SDL_DialogFileCallback_Aux
hs_bindgen_10f8f9d1eb0aafd5 :: FunPtr SDL_DialogFileCallback_Aux -> SDL_DialogFileCallback_Aux
hs_bindgen_10f8f9d1eb0aafd5 =
  \FunPtr SDL_DialogFileCallback_Aux
funPtr0 ->
    (Ptr Void -> PtrConst (PtrConst CChar) -> CInt -> IO ())
-> SDL_DialogFileCallback_Aux
SDL_DialogFileCallback_Aux
      ( \Ptr Void
x1 ->
          \PtrConst (PtrConst CChar)
x2 ->
            \CInt
x3 ->
              FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ())
-> Ptr Void -> Ptr Void -> CInt -> IO ()
hs_bindgen_10f8f9d1eb0aafd5_base
                (FunPtr SDL_DialogFileCallback_Aux
-> FunPtr (Ptr Void -> Ptr Void -> CInt -> IO ())
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr FunPtr SDL_DialogFileCallback_Aux
funPtr0)
                (Ptr Void -> FFIType (Ptr Void)
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Ptr Void
x1)
                (PtrConst (PtrConst CChar) -> FFIType (PtrConst (PtrConst CChar))
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType PtrConst (PtrConst CChar)
x2)
                (CInt -> FFIType CInt
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType CInt
x3)
      )

instance BG.ToFunPtr SDL_DialogFileCallback_Aux where
  toFunPtr :: SDL_DialogFileCallback_Aux
-> IO (FunPtr SDL_DialogFileCallback_Aux)
toFunPtr = SDL_DialogFileCallback_Aux
-> IO (FunPtr SDL_DialogFileCallback_Aux)
hs_bindgen_99f6498d5c37dad6

instance BG.FromFunPtr SDL_DialogFileCallback_Aux where
  fromFunPtr :: FunPtr SDL_DialogFileCallback_Aux -> SDL_DialogFileCallback_Aux
fromFunPtr = FunPtr SDL_DialogFileCallback_Aux -> SDL_DialogFileCallback_Aux
hs_bindgen_10f8f9d1eb0aafd5

instance
  (ty ~ (BG.Ptr BG.Void -> PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CInt -> IO ()))
  => BG.CompatHasField.HasField "unwrap" SDL_DialogFileCallback_Aux ty
  where
  hasField :: SDL_DialogFileCallback_Aux
-> (ty -> SDL_DialogFileCallback_Aux, ty)
hasField =
    \SDL_DialogFileCallback_Aux
x0 ->
      ( \ty
y1 ->
          SDL_DialogFileCallback_Aux{unwrap :: Ptr Void -> PtrConst (PtrConst CChar) -> CInt -> IO ()
unwrap = ty
Ptr Void -> PtrConst (PtrConst CChar) -> CInt -> IO ()
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_DialogFileCallback_Aux
x0
      )

instance
  (ty ~ (BG.Ptr BG.Void -> PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CInt -> IO ()))
  => BG.HasField "unwrap" (BG.Ptr SDL_DialogFileCallback_Aux) (BG.Ptr ty)
  where
  getField :: Ptr SDL_DialogFileCallback_Aux -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_DialogFileCallback_Aux
-> Ptr (CFieldType SDL_DialogFileCallback_Aux "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_DialogFileCallback_Aux "unwrap" where
  type
    CFieldType SDL_DialogFileCallback_Aux "unwrap" =
      BG.Ptr BG.Void -> PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CInt -> IO ()

  offset# :: Proxy# SDL_DialogFileCallback_Aux -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_DialogFileCallback_Aux
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Callback used by file dialog functions.
--
--     The specific usage is described in each function.
--
--     If @filelist@ is:
--
--     * NULL, an error occurred. Details can be obtained with SDL_GetError().
--
--     * A pointer to NULL, the user either didn\'t choose any file or canceled the dialog.
--
--     * A pointer to non- @NULL@, the user chose one or more files. The argument is a null-terminated array of pointers to UTF-8 encoded strings, each containing a path.
--
--     The filelist argument should not be freed; it will automatically be freed when the callback returns.
--
--     The filter argument is the index of the filter that was selected, or -1 if no filter was selected or if the platform or method doesn\'t support fetching the selected filter.
--
--     In Android, the @filelist@ are @content:\/\/@ URIs. They should be opened using SDL_IOFromFile() with appropriate modes. This applies both to open and save file dialog.
--
--     [@userdata@]: an app-provided pointer, for the callback\'s use.
--
--     [@filelist@]: the file(s) chosen by the user.
--
--     [@filter@]: index of the selected filter.
--
--     @since 3.2.0
--
--     [See also]: 'SDL_DialogFileFilter', 'sDL_ShowOpenFileDialog', 'sDL_ShowSaveFileDialog', 'sDL_ShowOpenFolderDialog', 'sDL_ShowFileDialogWithProperties'
--
--     [C declaration]: @SDL_DialogFileCallback@, defined at @SDL3\/SDL_dialog.h 113:24@
newtype SDL_DialogFileCallback = SDL_DialogFileCallback
  { SDL_DialogFileCallback -> FunPtr SDL_DialogFileCallback_Aux
unwrap :: BG.FunPtr SDL_DialogFileCallback_Aux
  }
  deriving stock ((forall x. SDL_DialogFileCallback -> Rep SDL_DialogFileCallback x)
-> (forall x.
    Rep SDL_DialogFileCallback x -> SDL_DialogFileCallback)
-> Generic SDL_DialogFileCallback
forall x. Rep SDL_DialogFileCallback x -> SDL_DialogFileCallback
forall x. SDL_DialogFileCallback -> Rep SDL_DialogFileCallback x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_DialogFileCallback -> Rep SDL_DialogFileCallback x
from :: forall x. SDL_DialogFileCallback -> Rep SDL_DialogFileCallback x
$cto :: forall x. Rep SDL_DialogFileCallback x -> SDL_DialogFileCallback
to :: forall x. Rep SDL_DialogFileCallback x -> SDL_DialogFileCallback
BG.Generic, SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
(SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> (SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> Eq SDL_DialogFileCallback
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
== :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
$c/= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
/= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
Eq, Eq SDL_DialogFileCallback
Eq SDL_DialogFileCallback =>
(SDL_DialogFileCallback -> SDL_DialogFileCallback -> Ordering)
-> (SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> (SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> (SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> (SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool)
-> (SDL_DialogFileCallback
    -> SDL_DialogFileCallback -> SDL_DialogFileCallback)
-> (SDL_DialogFileCallback
    -> SDL_DialogFileCallback -> SDL_DialogFileCallback)
-> Ord SDL_DialogFileCallback
SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
SDL_DialogFileCallback -> SDL_DialogFileCallback -> Ordering
SDL_DialogFileCallback
-> SDL_DialogFileCallback -> SDL_DialogFileCallback
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Ordering
compare :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Ordering
$c< :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
< :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
$c<= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
<= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
$c> :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
> :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
$c>= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
>= :: SDL_DialogFileCallback -> SDL_DialogFileCallback -> Bool
$cmax :: SDL_DialogFileCallback
-> SDL_DialogFileCallback -> SDL_DialogFileCallback
max :: SDL_DialogFileCallback
-> SDL_DialogFileCallback -> SDL_DialogFileCallback
$cmin :: SDL_DialogFileCallback
-> SDL_DialogFileCallback -> SDL_DialogFileCallback
min :: SDL_DialogFileCallback
-> SDL_DialogFileCallback -> SDL_DialogFileCallback
Ord, Int -> SDL_DialogFileCallback -> ShowS
[SDL_DialogFileCallback] -> ShowS
SDL_DialogFileCallback -> String
(Int -> SDL_DialogFileCallback -> ShowS)
-> (SDL_DialogFileCallback -> String)
-> ([SDL_DialogFileCallback] -> ShowS)
-> Show SDL_DialogFileCallback
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_DialogFileCallback -> ShowS
showsPrec :: Int -> SDL_DialogFileCallback -> ShowS
$cshow :: SDL_DialogFileCallback -> String
show :: SDL_DialogFileCallback -> String
$cshowList :: [SDL_DialogFileCallback] -> ShowS
showList :: [SDL_DialogFileCallback] -> ShowS
Show)
  deriving newtype
    ( FFIType SDL_DialogFileCallback -> SDL_DialogFileCallback
SDL_DialogFileCallback -> FFIType SDL_DialogFileCallback
(SDL_DialogFileCallback -> FFIType SDL_DialogFileCallback)
-> (FFIType SDL_DialogFileCallback -> SDL_DialogFileCallback)
-> HasFFIType SDL_DialogFileCallback
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_DialogFileCallback -> FFIType SDL_DialogFileCallback
toFFIType :: SDL_DialogFileCallback -> FFIType SDL_DialogFileCallback
$cfromFFIType :: FFIType SDL_DialogFileCallback -> SDL_DialogFileCallback
fromFFIType :: FFIType SDL_DialogFileCallback -> SDL_DialogFileCallback
BG.HasFFIType
    , Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
Ptr SDL_DialogFileCallback -> Int -> IO SDL_DialogFileCallback
Ptr SDL_DialogFileCallback
-> Int -> SDL_DialogFileCallback -> IO ()
Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
SDL_DialogFileCallback -> Int
(SDL_DialogFileCallback -> Int)
-> (SDL_DialogFileCallback -> Int)
-> (Ptr SDL_DialogFileCallback -> Int -> IO SDL_DialogFileCallback)
-> (Ptr SDL_DialogFileCallback
    -> Int -> SDL_DialogFileCallback -> IO ())
-> (forall b. Ptr b -> Int -> IO SDL_DialogFileCallback)
-> (forall b. Ptr b -> Int -> SDL_DialogFileCallback -> IO ())
-> (Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback)
-> (Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ())
-> Storable SDL_DialogFileCallback
forall b. Ptr b -> Int -> IO SDL_DialogFileCallback
forall b. Ptr b -> Int -> SDL_DialogFileCallback -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SDL_DialogFileCallback -> Int
sizeOf :: SDL_DialogFileCallback -> Int
$calignment :: SDL_DialogFileCallback -> Int
alignment :: SDL_DialogFileCallback -> Int
$cpeekElemOff :: Ptr SDL_DialogFileCallback -> Int -> IO SDL_DialogFileCallback
peekElemOff :: Ptr SDL_DialogFileCallback -> Int -> IO SDL_DialogFileCallback
$cpokeElemOff :: Ptr SDL_DialogFileCallback
-> Int -> SDL_DialogFileCallback -> IO ()
pokeElemOff :: Ptr SDL_DialogFileCallback
-> Int -> SDL_DialogFileCallback -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SDL_DialogFileCallback
peekByteOff :: forall b. Ptr b -> Int -> IO SDL_DialogFileCallback
$cpokeByteOff :: forall b. Ptr b -> Int -> SDL_DialogFileCallback -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SDL_DialogFileCallback -> IO ()
$cpeek :: Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
peek :: Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
$cpoke :: Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
poke :: Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
BG.Storable
    , Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
(Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback)
-> ReadRaw SDL_DialogFileCallback
forall a. (Ptr a -> IO a) -> ReadRaw a
$creadRaw :: Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
readRaw :: Ptr SDL_DialogFileCallback -> IO SDL_DialogFileCallback
Marshal.ReadRaw
    , Proxy SDL_DialogFileCallback -> Int
(Proxy SDL_DialogFileCallback -> Int)
-> (Proxy SDL_DialogFileCallback -> Int)
-> StaticSize SDL_DialogFileCallback
forall a. (Proxy a -> Int) -> (Proxy a -> Int) -> StaticSize a
$cstaticSizeOf :: Proxy SDL_DialogFileCallback -> Int
staticSizeOf :: Proxy SDL_DialogFileCallback -> Int
$cstaticAlignment :: Proxy SDL_DialogFileCallback -> Int
staticAlignment :: Proxy SDL_DialogFileCallback -> Int
Marshal.StaticSize
    , Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
(Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ())
-> WriteRaw SDL_DialogFileCallback
forall a. (Ptr a -> a -> IO ()) -> WriteRaw a
$cwriteRaw :: Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
writeRaw :: Ptr SDL_DialogFileCallback -> SDL_DialogFileCallback -> IO ()
Marshal.WriteRaw
    )

instance
  (ty ~ BG.FunPtr SDL_DialogFileCallback_Aux)
  => BG.CompatHasField.HasField "unwrap" SDL_DialogFileCallback ty
  where
  hasField :: SDL_DialogFileCallback -> (ty -> SDL_DialogFileCallback, ty)
hasField =
    \SDL_DialogFileCallback
x0 ->
      ( \ty
y1 ->
          SDL_DialogFileCallback{unwrap :: FunPtr SDL_DialogFileCallback_Aux
unwrap = ty
FunPtr SDL_DialogFileCallback_Aux
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_DialogFileCallback
x0
      )

instance
  (ty ~ BG.FunPtr SDL_DialogFileCallback_Aux)
  => BG.HasField "unwrap" (BG.Ptr SDL_DialogFileCallback) (BG.Ptr ty)
  where
  getField :: Ptr SDL_DialogFileCallback -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_DialogFileCallback
-> Ptr (CFieldType SDL_DialogFileCallback "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_DialogFileCallback "unwrap" where
  type
    CFieldType SDL_DialogFileCallback "unwrap" =
      BG.FunPtr SDL_DialogFileCallback_Aux

  offset# :: Proxy# SDL_DialogFileCallback -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_DialogFileCallback
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Various types of file dialogs.
--
--     This is used by @SDL_ShowFileDialogWithProperties()@ to decide what kind of dialog to present to the user.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_ShowFileDialogWithProperties'
--
--     [C declaration]: @enum SDL_FileDialogType@, defined at @SDL3\/SDL_dialog.h 272:14@
newtype SDL_FileDialogType = SDL_FileDialogType
  { SDL_FileDialogType -> CUInt
unwrap :: BG.CUInt
  }
  deriving stock ((forall x. SDL_FileDialogType -> Rep SDL_FileDialogType x)
-> (forall x. Rep SDL_FileDialogType x -> SDL_FileDialogType)
-> Generic SDL_FileDialogType
forall x. Rep SDL_FileDialogType x -> SDL_FileDialogType
forall x. SDL_FileDialogType -> Rep SDL_FileDialogType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_FileDialogType -> Rep SDL_FileDialogType x
from :: forall x. SDL_FileDialogType -> Rep SDL_FileDialogType x
$cto :: forall x. Rep SDL_FileDialogType x -> SDL_FileDialogType
to :: forall x. Rep SDL_FileDialogType x -> SDL_FileDialogType
BG.Generic, SDL_FileDialogType -> SDL_FileDialogType -> Bool
(SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> (SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> Eq SDL_FileDialogType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
== :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
$c/= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
/= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
Eq, Eq SDL_FileDialogType
Eq SDL_FileDialogType =>
(SDL_FileDialogType -> SDL_FileDialogType -> Ordering)
-> (SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> (SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> (SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> (SDL_FileDialogType -> SDL_FileDialogType -> Bool)
-> (SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType)
-> (SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType)
-> Ord SDL_FileDialogType
SDL_FileDialogType -> SDL_FileDialogType -> Bool
SDL_FileDialogType -> SDL_FileDialogType -> Ordering
SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_FileDialogType -> SDL_FileDialogType -> Ordering
compare :: SDL_FileDialogType -> SDL_FileDialogType -> Ordering
$c< :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
< :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
$c<= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
<= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
$c> :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
> :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
$c>= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
>= :: SDL_FileDialogType -> SDL_FileDialogType -> Bool
$cmax :: SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType
max :: SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType
$cmin :: SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType
min :: SDL_FileDialogType -> SDL_FileDialogType -> SDL_FileDialogType
Ord)
  deriving newtype (FFIType SDL_FileDialogType -> SDL_FileDialogType
SDL_FileDialogType -> FFIType SDL_FileDialogType
(SDL_FileDialogType -> FFIType SDL_FileDialogType)
-> (FFIType SDL_FileDialogType -> SDL_FileDialogType)
-> HasFFIType SDL_FileDialogType
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_FileDialogType -> FFIType SDL_FileDialogType
toFFIType :: SDL_FileDialogType -> FFIType SDL_FileDialogType
$cfromFFIType :: FFIType SDL_FileDialogType -> SDL_FileDialogType
fromFFIType :: FFIType SDL_FileDialogType -> SDL_FileDialogType
BG.HasFFIType)

instance Marshal.StaticSize SDL_FileDialogType where
  staticSizeOf :: Proxy SDL_FileDialogType -> Int
staticSizeOf = \Proxy SDL_FileDialogType
_ -> (Int
4 :: Int)

  staticAlignment :: Proxy SDL_FileDialogType -> Int
staticAlignment = \Proxy SDL_FileDialogType
_ -> (Int
4 :: Int)

instance Marshal.ReadRaw SDL_FileDialogType where
  readRaw :: Ptr SDL_FileDialogType -> IO SDL_FileDialogType
readRaw =
    \Ptr SDL_FileDialogType
ptr0 ->
      (CUInt -> SDL_FileDialogType) -> IO (CUInt -> SDL_FileDialogType)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CUInt -> SDL_FileDialogType
SDL_FileDialogType
        IO (CUInt -> SDL_FileDialogType)
-> IO CUInt -> IO SDL_FileDialogType
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr SDL_FileDialogType -> Int -> IO CUInt
forall a b. ReadRaw a => Ptr b -> Int -> IO a
Marshal.readRawByteOff Ptr SDL_FileDialogType
ptr0 (Int
0 :: Int)

instance Marshal.WriteRaw SDL_FileDialogType where
  writeRaw :: Ptr SDL_FileDialogType -> SDL_FileDialogType -> IO ()
writeRaw =
    \Ptr SDL_FileDialogType
ptr0 ->
      \SDL_FileDialogType
s1 ->
        case SDL_FileDialogType
s1 of
          SDL_FileDialogType CUInt
unwrap2 ->
            Ptr SDL_FileDialogType -> Int -> CUInt -> IO ()
forall a b. WriteRaw a => Ptr b -> Int -> a -> IO ()
Marshal.writeRawByteOff Ptr SDL_FileDialogType
ptr0 (Int
0 :: Int) CUInt
unwrap2

deriving via Marshal.EquivStorable SDL_FileDialogType instance BG.Storable SDL_FileDialogType

deriving via BG.CUInt instance BG.Prim SDL_FileDialogType

instance CEnum.CEnum SDL_FileDialogType where
  type CEnumZ SDL_FileDialogType = BG.CUInt

  toCEnum :: CEnumZ SDL_FileDialogType -> SDL_FileDialogType
toCEnum = CUInt -> SDL_FileDialogType
CEnumZ SDL_FileDialogType -> SDL_FileDialogType
SDL_FileDialogType

  fromCEnum :: SDL_FileDialogType -> CEnumZ SDL_FileDialogType
fromCEnum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap"

  declaredValues :: forall (proxy :: * -> *).
proxy SDL_FileDialogType -> DeclaredValues SDL_FileDialogType
declaredValues =
    \proxy SDL_FileDialogType
_ ->
      [(CEnumZ SDL_FileDialogType, NonEmpty String)]
-> DeclaredValues SDL_FileDialogType
forall a.
Ord (CEnumZ a) =>
[(CEnumZ a, NonEmpty String)] -> DeclaredValues a
CEnum.declaredValuesFromList
        [ (CUInt
CEnumZ SDL_FileDialogType
0, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_FILEDIALOG_OPENFILE")
        , (CUInt
CEnumZ SDL_FileDialogType
1, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_FILEDIALOG_SAVEFILE")
        , (CUInt
CEnumZ SDL_FileDialogType
2, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_FILEDIALOG_OPENFOLDER")
        ]

  showsUndeclared :: forall (proxy :: * -> *).
proxy SDL_FileDialogType
-> Int -> CEnumZ SDL_FileDialogType -> ShowS
showsUndeclared =
    String
-> proxy SDL_FileDialogType
-> Int
-> CEnumZ SDL_FileDialogType
-> ShowS
forall a (proxy :: * -> *).
Show (CEnumZ a) =>
String -> proxy a -> Int -> CEnumZ a -> ShowS
CEnum.showsWrappedUndeclared String
"SDL_FileDialogType"

  readPrecUndeclared :: ReadPrec SDL_FileDialogType
readPrecUndeclared =
    String -> ReadPrec SDL_FileDialogType
forall a. (CEnum a, Read (CEnumZ a)) => String -> ReadPrec a
CEnum.readPrecWrappedUndeclared String
"SDL_FileDialogType"

  isDeclared :: SDL_FileDialogType -> Bool
isDeclared = SDL_FileDialogType -> Bool
forall a. SequentialCEnum a => a -> Bool
CEnum.seqIsDeclared

  mkDeclared :: CEnumZ SDL_FileDialogType -> Maybe SDL_FileDialogType
mkDeclared = CEnumZ SDL_FileDialogType -> Maybe SDL_FileDialogType
forall a. SequentialCEnum a => CEnumZ a -> Maybe a
CEnum.seqMkDeclared

instance CEnum.SequentialCEnum SDL_FileDialogType where
  minDeclaredValue :: SDL_FileDialogType
minDeclaredValue = SDL_FileDialogType
SDL_FILEDIALOG_OPENFILE

  maxDeclaredValue :: SDL_FileDialogType
maxDeclaredValue = SDL_FileDialogType
SDL_FILEDIALOG_OPENFOLDER

instance Show SDL_FileDialogType where
  showsPrec :: Int -> SDL_FileDialogType -> ShowS
showsPrec = Int -> SDL_FileDialogType -> ShowS
forall a. CEnum a => Int -> a -> ShowS
CEnum.shows

instance Read SDL_FileDialogType where
  readPrec :: ReadPrec SDL_FileDialogType
readPrec = ReadPrec SDL_FileDialogType
forall a. CEnum a => ReadPrec a
CEnum.readPrec

  readList :: ReadS [SDL_FileDialogType]
readList = ReadS [SDL_FileDialogType]
forall a. Read a => ReadS [a]
BG.readListDefault

  readListPrec :: ReadPrec [SDL_FileDialogType]
readListPrec = ReadPrec [SDL_FileDialogType]
forall a. Read a => ReadPrec [a]
BG.readListPrecDefault

instance
  (ty ~ BG.CUInt)
  => BG.CompatHasField.HasField "unwrap" SDL_FileDialogType ty
  where
  hasField :: SDL_FileDialogType -> (ty -> SDL_FileDialogType, ty)
hasField =
    \SDL_FileDialogType
x0 ->
      ( \ty
y1 ->
          SDL_FileDialogType{unwrap :: CUInt
unwrap = ty
CUInt
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_FileDialogType
x0
      )

instance
  (ty ~ BG.CUInt)
  => BG.HasField "unwrap" (BG.Ptr SDL_FileDialogType) (BG.Ptr ty)
  where
  getField :: Ptr SDL_FileDialogType -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_FileDialogType
-> Ptr (CFieldType SDL_FileDialogType "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_FileDialogType "unwrap" where
  type
    CFieldType SDL_FileDialogType "unwrap" =
      BG.CUInt

  offset# :: Proxy# SDL_FileDialogType -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_FileDialogType
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | [C declaration]: @SDL_FILEDIALOG_OPENFILE@, defined at @SDL3\/SDL_dialog.h 274:5@
pattern SDL_FILEDIALOG_OPENFILE :: SDL_FileDialogType
pattern $mSDL_FILEDIALOG_OPENFILE :: forall {r}. SDL_FileDialogType -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_FILEDIALOG_OPENFILE :: SDL_FileDialogType
SDL_FILEDIALOG_OPENFILE = SDL_FileDialogType 0

-- | [C declaration]: @SDL_FILEDIALOG_SAVEFILE@, defined at @SDL3\/SDL_dialog.h 275:5@
pattern SDL_FILEDIALOG_SAVEFILE :: SDL_FileDialogType
pattern $mSDL_FILEDIALOG_SAVEFILE :: forall {r}. SDL_FileDialogType -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_FILEDIALOG_SAVEFILE :: SDL_FileDialogType
SDL_FILEDIALOG_SAVEFILE = SDL_FileDialogType 1

-- | [C declaration]: @SDL_FILEDIALOG_OPENFOLDER@, defined at @SDL3\/SDL_dialog.h 276:5@
pattern SDL_FILEDIALOG_OPENFOLDER :: SDL_FileDialogType
pattern $mSDL_FILEDIALOG_OPENFOLDER :: forall {r}. SDL_FileDialogType -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_FILEDIALOG_OPENFOLDER :: SDL_FileDialogType
SDL_FILEDIALOG_OPENFOLDER = SDL_FileDialogType 2

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_FILTERS_POINTER@, literal @\"SDL.filedialog.filters\"@, defined at @SDL3\/SDL_dialog.h 328:9@
sDL_PROP_FILE_DIALOG_FILTERS_POINTER :: BG.ByteString
sDL_PROP_FILE_DIALOG_FILTERS_POINTER :: ByteString
sDL_PROP_FILE_DIALOG_FILTERS_POINTER =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x74
    , Word8
0x65
    , Word8
0x72
    , Word8
0x73
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_NFILTERS_NUMBER@, literal @\"SDL.filedialog.nfilters\"@, defined at @SDL3\/SDL_dialog.h 329:9@
sDL_PROP_FILE_DIALOG_NFILTERS_NUMBER :: BG.ByteString
sDL_PROP_FILE_DIALOG_NFILTERS_NUMBER :: ByteString
sDL_PROP_FILE_DIALOG_NFILTERS_NUMBER =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x6E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x74
    , Word8
0x65
    , Word8
0x72
    , Word8
0x73
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_WINDOW_POINTER@, literal @\"SDL.filedialog.window\"@, defined at @SDL3\/SDL_dialog.h 330:9@
sDL_PROP_FILE_DIALOG_WINDOW_POINTER :: BG.ByteString
sDL_PROP_FILE_DIALOG_WINDOW_POINTER :: ByteString
sDL_PROP_FILE_DIALOG_WINDOW_POINTER =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x77
    , Word8
0x69
    , Word8
0x6E
    , Word8
0x64
    , Word8
0x6F
    , Word8
0x77
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_LOCATION_STRING@, literal @\"SDL.filedialog.location\"@, defined at @SDL3\/SDL_dialog.h 331:9@
sDL_PROP_FILE_DIALOG_LOCATION_STRING :: BG.ByteString
sDL_PROP_FILE_DIALOG_LOCATION_STRING :: ByteString
sDL_PROP_FILE_DIALOG_LOCATION_STRING =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x63
    , Word8
0x61
    , Word8
0x74
    , Word8
0x69
    , Word8
0x6F
    , Word8
0x6E
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_MANY_BOOLEAN@, literal @\"SDL.filedialog.many\"@, defined at @SDL3\/SDL_dialog.h 332:9@
sDL_PROP_FILE_DIALOG_MANY_BOOLEAN :: BG.ByteString
sDL_PROP_FILE_DIALOG_MANY_BOOLEAN :: ByteString
sDL_PROP_FILE_DIALOG_MANY_BOOLEAN =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x6D
    , Word8
0x61
    , Word8
0x6E
    , Word8
0x79
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_TITLE_STRING@, literal @\"SDL.filedialog.title\"@, defined at @SDL3\/SDL_dialog.h 333:9@
sDL_PROP_FILE_DIALOG_TITLE_STRING :: BG.ByteString
sDL_PROP_FILE_DIALOG_TITLE_STRING :: ByteString
sDL_PROP_FILE_DIALOG_TITLE_STRING =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x74
    , Word8
0x69
    , Word8
0x74
    , Word8
0x6C
    , Word8
0x65
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_ACCEPT_STRING@, literal @\"SDL.filedialog.accept\"@, defined at @SDL3\/SDL_dialog.h 334:9@
sDL_PROP_FILE_DIALOG_ACCEPT_STRING :: BG.ByteString
sDL_PROP_FILE_DIALOG_ACCEPT_STRING :: ByteString
sDL_PROP_FILE_DIALOG_ACCEPT_STRING =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x61
    , Word8
0x63
    , Word8
0x63
    , Word8
0x65
    , Word8
0x70
    , Word8
0x74
    ]

-- | [C declaration]: @macro SDL_PROP_FILE_DIALOG_CANCEL_STRING@, literal @\"SDL.filedialog.cancel\"@, defined at @SDL3\/SDL_dialog.h 335:9@
sDL_PROP_FILE_DIALOG_CANCEL_STRING :: BG.ByteString
sDL_PROP_FILE_DIALOG_CANCEL_STRING :: ByteString
sDL_PROP_FILE_DIALOG_CANCEL_STRING =
  [Word8] -> ByteString
BG.pack
    [ Word8
0x53
    , Word8
0x44
    , Word8
0x4C
    , Word8
0x2E
    , Word8
0x66
    , Word8
0x69
    , Word8
0x6C
    , Word8
0x65
    , Word8
0x64
    , Word8
0x69
    , Word8
0x61
    , Word8
0x6C
    , Word8
0x6F
    , Word8
0x67
    , Word8
0x2E
    , Word8
0x63
    , Word8
0x61
    , Word8
0x6E
    , Word8
0x63
    , Word8
0x65
    , Word8
0x6C
    ]