-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./Brillo/Internals/TinyFileDialogs.chs" #-}
{-# LANGUAGE LambdaCase #-}

module Brillo.Internals.TinyFileDialogs (
  -- * Functions
  beep,
  notifyPopup,
  messageBox,
  inputBox,
  saveFileDialog,
  openFileDialog,
  selectFolderDialog,
  colorChooser,
  -- * Message box options
  IconType(..),
  MessageBox,
  OK(..),
  OKCancel(..),
  YesNo(..),
  YesNoCancel(..),
)
where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Marshal.Utils as C2HSImp
import qualified Foreign.Ptr as C2HSImp



import Prelude (
  Applicative (pure),
  Bool (..),
  Bounded,
  Enum,
  Eq ((==)),
  fromIntegral,
  Functor (fmap),
  id,
  Int,
  IO,
  maxBound,
  Maybe (Just, Nothing),
  minBound,
  Ord,
  Read,
  return,
  Semigroup ((<>)),
  show,
  Show,
  (.),
  (<>),
  (>>),
  (>>=),
  ($),
 )

import Data.List (lookup)
import Data.Char (toLower)
import Data.Text qualified as T
import Foreign (Ptr, Word8, nullPtr, peekArray, withArray, withArrayLen, withMany)
import Foreign.C (CInt, CString, CUChar)
import System.Exit (die)

import Foreign.C (peekCString, withCString)




{-# LINE 66 "./Brillo/Internals/TinyFileDialogs.chs" #-}


withCText :: T.Text -> (CString -> IO a) -> IO a
withCText :: forall a. Text -> (CString -> IO a) -> IO a
withCText = String -> (CString -> IO a) -> IO a
forall a. String -> (CString -> IO a) -> IO a
withCString (String -> (CString -> IO a) -> IO a)
-> (Text -> String) -> Text -> (CString -> IO a) -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack

withCShowLower :: (Show a) => a -> (CString -> IO b) -> IO b
withCShowLower :: forall a b. Show a => a -> (CString -> IO b) -> IO b
withCShowLower = Text -> (CString -> IO b) -> IO b
forall a. Text -> (CString -> IO a) -> IO a
withCText (Text -> (CString -> IO b) -> IO b)
-> (a -> Text) -> a -> (CString -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toLower (String -> String) -> (a -> String) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show

withCMaybeText :: Maybe T.Text -> (CString -> IO a) -> IO a
withCMaybeText :: forall a. Maybe Text -> (CString -> IO a) -> IO a
withCMaybeText Maybe Text
mt CString -> IO a
f = case Maybe Text
mt of
  Maybe Text
Nothing -> CString -> IO a
f CString
forall a. Ptr a
nullPtr
  Just Text
t  -> Text -> (CString -> IO a) -> IO a
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
t CString -> IO a
f

peekMaybeText :: CString -> IO (Maybe T.Text)
peekMaybeText :: CString -> IO (Maybe Text)
peekMaybeText CString
cstr = if CString
cstr CString -> CString -> Bool
forall a. Eq a => a -> a -> Bool
== CString
forall a. Ptr a
nullPtr
  then Maybe Text -> IO (Maybe Text)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Text
forall a. Maybe a
Nothing
  else (String -> Maybe Text) -> IO String -> IO (Maybe Text)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> (String -> Text) -> String -> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack) (IO String -> IO (Maybe Text)) -> IO String -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ CString -> IO String
peekCString CString
cstr

peekMaybeTextMultiple :: CString -> IO (Maybe [T.Text])
peekMaybeTextMultiple :: CString -> IO (Maybe [Text])
peekMaybeTextMultiple = (Maybe Text -> Maybe [Text])
-> IO (Maybe Text) -> IO (Maybe [Text])
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Text -> [Text]) -> Maybe Text -> Maybe [Text]
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Text -> [Text]) -> Maybe Text -> Maybe [Text])
-> (Text -> [Text]) -> Maybe Text -> Maybe [Text]
forall a b. (a -> b) -> a -> b
$ HasCallStack => Text -> Text -> [Text]
Text -> Text -> [Text]
T.splitOn (Char -> Text
T.singleton Char
'|')) (IO (Maybe Text) -> IO (Maybe [Text]))
-> (CString -> IO (Maybe Text)) -> CString -> IO (Maybe [Text])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CString -> IO (Maybe Text)
peekMaybeText

withCTexts :: [T.Text] -> ((CInt, Ptr CString) -> IO a) -> IO a
withCTexts :: forall a. [Text] -> ((CInt, Ptr CString) -> IO a) -> IO a
withCTexts [Text]
ts (CInt, Ptr CString) -> IO a
f = (Text -> (CString -> IO a) -> IO a)
-> [Text] -> ([CString] -> IO a) -> IO a
forall a b res.
(a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res
withMany Text -> (CString -> IO a) -> IO a
forall a. Text -> (CString -> IO a) -> IO a
withCText [Text]
ts (([CString] -> IO a) -> IO a) -> ([CString] -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \[CString]
ptrs ->
  [CString] -> (Int -> Ptr CString -> IO a) -> IO a
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [CString]
ptrs ((Int -> Ptr CString -> IO a) -> IO a)
-> (Int -> Ptr CString -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \Int
len Ptr CString
ptr -> (CInt, Ptr CString) -> IO a
f (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len, Ptr CString
ptr)

class (Enum a, Bounded a) => MessageBox a where
  messageBoxType :: a -> T.Text
  messageBoxValue :: a -> Int

data IconType = Info | Warning | Error | Question
  deriving (IconType -> IconType -> Bool
(IconType -> IconType -> Bool)
-> (IconType -> IconType -> Bool) -> Eq IconType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: IconType -> IconType -> Bool
== :: IconType -> IconType -> Bool
$c/= :: IconType -> IconType -> Bool
/= :: IconType -> IconType -> Bool
Eq, Eq IconType
Eq IconType =>
(IconType -> IconType -> Ordering)
-> (IconType -> IconType -> Bool)
-> (IconType -> IconType -> Bool)
-> (IconType -> IconType -> Bool)
-> (IconType -> IconType -> Bool)
-> (IconType -> IconType -> IconType)
-> (IconType -> IconType -> IconType)
-> Ord IconType
IconType -> IconType -> Bool
IconType -> IconType -> Ordering
IconType -> IconType -> IconType
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 :: IconType -> IconType -> Ordering
compare :: IconType -> IconType -> Ordering
$c< :: IconType -> IconType -> Bool
< :: IconType -> IconType -> Bool
$c<= :: IconType -> IconType -> Bool
<= :: IconType -> IconType -> Bool
$c> :: IconType -> IconType -> Bool
> :: IconType -> IconType -> Bool
$c>= :: IconType -> IconType -> Bool
>= :: IconType -> IconType -> Bool
$cmax :: IconType -> IconType -> IconType
max :: IconType -> IconType -> IconType
$cmin :: IconType -> IconType -> IconType
min :: IconType -> IconType -> IconType
Ord, Int -> IconType -> String -> String
[IconType] -> String -> String
IconType -> String
(Int -> IconType -> String -> String)
-> (IconType -> String)
-> ([IconType] -> String -> String)
-> Show IconType
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> IconType -> String -> String
showsPrec :: Int -> IconType -> String -> String
$cshow :: IconType -> String
show :: IconType -> String
$cshowList :: [IconType] -> String -> String
showList :: [IconType] -> String -> String
Show, ReadPrec [IconType]
ReadPrec IconType
Int -> ReadS IconType
ReadS [IconType]
(Int -> ReadS IconType)
-> ReadS [IconType]
-> ReadPrec IconType
-> ReadPrec [IconType]
-> Read IconType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS IconType
readsPrec :: Int -> ReadS IconType
$creadList :: ReadS [IconType]
readList :: ReadS [IconType]
$creadPrec :: ReadPrec IconType
readPrec :: ReadPrec IconType
$creadListPrec :: ReadPrec [IconType]
readListPrec :: ReadPrec [IconType]
Read, Int -> IconType
IconType -> Int
IconType -> [IconType]
IconType -> IconType
IconType -> IconType -> [IconType]
IconType -> IconType -> IconType -> [IconType]
(IconType -> IconType)
-> (IconType -> IconType)
-> (Int -> IconType)
-> (IconType -> Int)
-> (IconType -> [IconType])
-> (IconType -> IconType -> [IconType])
-> (IconType -> IconType -> [IconType])
-> (IconType -> IconType -> IconType -> [IconType])
-> Enum IconType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: IconType -> IconType
succ :: IconType -> IconType
$cpred :: IconType -> IconType
pred :: IconType -> IconType
$ctoEnum :: Int -> IconType
toEnum :: Int -> IconType
$cfromEnum :: IconType -> Int
fromEnum :: IconType -> Int
$cenumFrom :: IconType -> [IconType]
enumFrom :: IconType -> [IconType]
$cenumFromThen :: IconType -> IconType -> [IconType]
enumFromThen :: IconType -> IconType -> [IconType]
$cenumFromTo :: IconType -> IconType -> [IconType]
enumFromTo :: IconType -> IconType -> [IconType]
$cenumFromThenTo :: IconType -> IconType -> IconType -> [IconType]
enumFromThenTo :: IconType -> IconType -> IconType -> [IconType]
Enum, IconType
IconType -> IconType -> Bounded IconType
forall a. a -> a -> Bounded a
$cminBound :: IconType
minBound :: IconType
$cmaxBound :: IconType
maxBound :: IconType
Bounded)

data OK = OK
  deriving (OK -> OK -> Bool
(OK -> OK -> Bool) -> (OK -> OK -> Bool) -> Eq OK
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OK -> OK -> Bool
== :: OK -> OK -> Bool
$c/= :: OK -> OK -> Bool
/= :: OK -> OK -> Bool
Eq, Eq OK
Eq OK =>
(OK -> OK -> Ordering)
-> (OK -> OK -> Bool)
-> (OK -> OK -> Bool)
-> (OK -> OK -> Bool)
-> (OK -> OK -> Bool)
-> (OK -> OK -> OK)
-> (OK -> OK -> OK)
-> Ord OK
OK -> OK -> Bool
OK -> OK -> Ordering
OK -> OK -> OK
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 :: OK -> OK -> Ordering
compare :: OK -> OK -> Ordering
$c< :: OK -> OK -> Bool
< :: OK -> OK -> Bool
$c<= :: OK -> OK -> Bool
<= :: OK -> OK -> Bool
$c> :: OK -> OK -> Bool
> :: OK -> OK -> Bool
$c>= :: OK -> OK -> Bool
>= :: OK -> OK -> Bool
$cmax :: OK -> OK -> OK
max :: OK -> OK -> OK
$cmin :: OK -> OK -> OK
min :: OK -> OK -> OK
Ord, Int -> OK -> String -> String
[OK] -> String -> String
OK -> String
(Int -> OK -> String -> String)
-> (OK -> String) -> ([OK] -> String -> String) -> Show OK
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> OK -> String -> String
showsPrec :: Int -> OK -> String -> String
$cshow :: OK -> String
show :: OK -> String
$cshowList :: [OK] -> String -> String
showList :: [OK] -> String -> String
Show, ReadPrec [OK]
ReadPrec OK
Int -> ReadS OK
ReadS [OK]
(Int -> ReadS OK)
-> ReadS [OK] -> ReadPrec OK -> ReadPrec [OK] -> Read OK
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS OK
readsPrec :: Int -> ReadS OK
$creadList :: ReadS [OK]
readList :: ReadS [OK]
$creadPrec :: ReadPrec OK
readPrec :: ReadPrec OK
$creadListPrec :: ReadPrec [OK]
readListPrec :: ReadPrec [OK]
Read, Int -> OK
OK -> Int
OK -> [OK]
OK -> OK
OK -> OK -> [OK]
OK -> OK -> OK -> [OK]
(OK -> OK)
-> (OK -> OK)
-> (Int -> OK)
-> (OK -> Int)
-> (OK -> [OK])
-> (OK -> OK -> [OK])
-> (OK -> OK -> [OK])
-> (OK -> OK -> OK -> [OK])
-> Enum OK
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: OK -> OK
succ :: OK -> OK
$cpred :: OK -> OK
pred :: OK -> OK
$ctoEnum :: Int -> OK
toEnum :: Int -> OK
$cfromEnum :: OK -> Int
fromEnum :: OK -> Int
$cenumFrom :: OK -> [OK]
enumFrom :: OK -> [OK]
$cenumFromThen :: OK -> OK -> [OK]
enumFromThen :: OK -> OK -> [OK]
$cenumFromTo :: OK -> OK -> [OK]
enumFromTo :: OK -> OK -> [OK]
$cenumFromThenTo :: OK -> OK -> OK -> [OK]
enumFromThenTo :: OK -> OK -> OK -> [OK]
Enum, OK
OK -> OK -> Bounded OK
forall a. a -> a -> Bounded a
$cminBound :: OK
minBound :: OK
$cmaxBound :: OK
maxBound :: OK
Bounded)

instance MessageBox OK where
  messageBoxType :: OK -> Text
messageBoxType OK
_ = String -> Text
T.pack String
"ok"
  messageBoxValue :: OK -> Int
messageBoxValue OK
OK = Int
1

data OKCancel = OC_OK | OC_Cancel
  deriving (OKCancel -> OKCancel -> Bool
(OKCancel -> OKCancel -> Bool)
-> (OKCancel -> OKCancel -> Bool) -> Eq OKCancel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OKCancel -> OKCancel -> Bool
== :: OKCancel -> OKCancel -> Bool
$c/= :: OKCancel -> OKCancel -> Bool
/= :: OKCancel -> OKCancel -> Bool
Eq, Eq OKCancel
Eq OKCancel =>
(OKCancel -> OKCancel -> Ordering)
-> (OKCancel -> OKCancel -> Bool)
-> (OKCancel -> OKCancel -> Bool)
-> (OKCancel -> OKCancel -> Bool)
-> (OKCancel -> OKCancel -> Bool)
-> (OKCancel -> OKCancel -> OKCancel)
-> (OKCancel -> OKCancel -> OKCancel)
-> Ord OKCancel
OKCancel -> OKCancel -> Bool
OKCancel -> OKCancel -> Ordering
OKCancel -> OKCancel -> OKCancel
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 :: OKCancel -> OKCancel -> Ordering
compare :: OKCancel -> OKCancel -> Ordering
$c< :: OKCancel -> OKCancel -> Bool
< :: OKCancel -> OKCancel -> Bool
$c<= :: OKCancel -> OKCancel -> Bool
<= :: OKCancel -> OKCancel -> Bool
$c> :: OKCancel -> OKCancel -> Bool
> :: OKCancel -> OKCancel -> Bool
$c>= :: OKCancel -> OKCancel -> Bool
>= :: OKCancel -> OKCancel -> Bool
$cmax :: OKCancel -> OKCancel -> OKCancel
max :: OKCancel -> OKCancel -> OKCancel
$cmin :: OKCancel -> OKCancel -> OKCancel
min :: OKCancel -> OKCancel -> OKCancel
Ord, Int -> OKCancel -> String -> String
[OKCancel] -> String -> String
OKCancel -> String
(Int -> OKCancel -> String -> String)
-> (OKCancel -> String)
-> ([OKCancel] -> String -> String)
-> Show OKCancel
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> OKCancel -> String -> String
showsPrec :: Int -> OKCancel -> String -> String
$cshow :: OKCancel -> String
show :: OKCancel -> String
$cshowList :: [OKCancel] -> String -> String
showList :: [OKCancel] -> String -> String
Show, ReadPrec [OKCancel]
ReadPrec OKCancel
Int -> ReadS OKCancel
ReadS [OKCancel]
(Int -> ReadS OKCancel)
-> ReadS [OKCancel]
-> ReadPrec OKCancel
-> ReadPrec [OKCancel]
-> Read OKCancel
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS OKCancel
readsPrec :: Int -> ReadS OKCancel
$creadList :: ReadS [OKCancel]
readList :: ReadS [OKCancel]
$creadPrec :: ReadPrec OKCancel
readPrec :: ReadPrec OKCancel
$creadListPrec :: ReadPrec [OKCancel]
readListPrec :: ReadPrec [OKCancel]
Read, Int -> OKCancel
OKCancel -> Int
OKCancel -> [OKCancel]
OKCancel -> OKCancel
OKCancel -> OKCancel -> [OKCancel]
OKCancel -> OKCancel -> OKCancel -> [OKCancel]
(OKCancel -> OKCancel)
-> (OKCancel -> OKCancel)
-> (Int -> OKCancel)
-> (OKCancel -> Int)
-> (OKCancel -> [OKCancel])
-> (OKCancel -> OKCancel -> [OKCancel])
-> (OKCancel -> OKCancel -> [OKCancel])
-> (OKCancel -> OKCancel -> OKCancel -> [OKCancel])
-> Enum OKCancel
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: OKCancel -> OKCancel
succ :: OKCancel -> OKCancel
$cpred :: OKCancel -> OKCancel
pred :: OKCancel -> OKCancel
$ctoEnum :: Int -> OKCancel
toEnum :: Int -> OKCancel
$cfromEnum :: OKCancel -> Int
fromEnum :: OKCancel -> Int
$cenumFrom :: OKCancel -> [OKCancel]
enumFrom :: OKCancel -> [OKCancel]
$cenumFromThen :: OKCancel -> OKCancel -> [OKCancel]
enumFromThen :: OKCancel -> OKCancel -> [OKCancel]
$cenumFromTo :: OKCancel -> OKCancel -> [OKCancel]
enumFromTo :: OKCancel -> OKCancel -> [OKCancel]
$cenumFromThenTo :: OKCancel -> OKCancel -> OKCancel -> [OKCancel]
enumFromThenTo :: OKCancel -> OKCancel -> OKCancel -> [OKCancel]
Enum, OKCancel
OKCancel -> OKCancel -> Bounded OKCancel
forall a. a -> a -> Bounded a
$cminBound :: OKCancel
minBound :: OKCancel
$cmaxBound :: OKCancel
maxBound :: OKCancel
Bounded)

instance MessageBox OKCancel where
  messageBoxType :: OKCancel -> Text
messageBoxType OKCancel
_ = String -> Text
T.pack String
"okcancel"
  messageBoxValue :: OKCancel -> Int
messageBoxValue OKCancel
OC_Cancel = Int
0
  messageBoxValue OKCancel
OC_OK     = Int
1

data YesNo = YN_Yes | YN_No
  deriving (YesNo -> YesNo -> Bool
(YesNo -> YesNo -> Bool) -> (YesNo -> YesNo -> Bool) -> Eq YesNo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: YesNo -> YesNo -> Bool
== :: YesNo -> YesNo -> Bool
$c/= :: YesNo -> YesNo -> Bool
/= :: YesNo -> YesNo -> Bool
Eq, Eq YesNo
Eq YesNo =>
(YesNo -> YesNo -> Ordering)
-> (YesNo -> YesNo -> Bool)
-> (YesNo -> YesNo -> Bool)
-> (YesNo -> YesNo -> Bool)
-> (YesNo -> YesNo -> Bool)
-> (YesNo -> YesNo -> YesNo)
-> (YesNo -> YesNo -> YesNo)
-> Ord YesNo
YesNo -> YesNo -> Bool
YesNo -> YesNo -> Ordering
YesNo -> YesNo -> YesNo
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 :: YesNo -> YesNo -> Ordering
compare :: YesNo -> YesNo -> Ordering
$c< :: YesNo -> YesNo -> Bool
< :: YesNo -> YesNo -> Bool
$c<= :: YesNo -> YesNo -> Bool
<= :: YesNo -> YesNo -> Bool
$c> :: YesNo -> YesNo -> Bool
> :: YesNo -> YesNo -> Bool
$c>= :: YesNo -> YesNo -> Bool
>= :: YesNo -> YesNo -> Bool
$cmax :: YesNo -> YesNo -> YesNo
max :: YesNo -> YesNo -> YesNo
$cmin :: YesNo -> YesNo -> YesNo
min :: YesNo -> YesNo -> YesNo
Ord, Int -> YesNo -> String -> String
[YesNo] -> String -> String
YesNo -> String
(Int -> YesNo -> String -> String)
-> (YesNo -> String) -> ([YesNo] -> String -> String) -> Show YesNo
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> YesNo -> String -> String
showsPrec :: Int -> YesNo -> String -> String
$cshow :: YesNo -> String
show :: YesNo -> String
$cshowList :: [YesNo] -> String -> String
showList :: [YesNo] -> String -> String
Show, ReadPrec [YesNo]
ReadPrec YesNo
Int -> ReadS YesNo
ReadS [YesNo]
(Int -> ReadS YesNo)
-> ReadS [YesNo]
-> ReadPrec YesNo
-> ReadPrec [YesNo]
-> Read YesNo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS YesNo
readsPrec :: Int -> ReadS YesNo
$creadList :: ReadS [YesNo]
readList :: ReadS [YesNo]
$creadPrec :: ReadPrec YesNo
readPrec :: ReadPrec YesNo
$creadListPrec :: ReadPrec [YesNo]
readListPrec :: ReadPrec [YesNo]
Read, Int -> YesNo
YesNo -> Int
YesNo -> [YesNo]
YesNo -> YesNo
YesNo -> YesNo -> [YesNo]
YesNo -> YesNo -> YesNo -> [YesNo]
(YesNo -> YesNo)
-> (YesNo -> YesNo)
-> (Int -> YesNo)
-> (YesNo -> Int)
-> (YesNo -> [YesNo])
-> (YesNo -> YesNo -> [YesNo])
-> (YesNo -> YesNo -> [YesNo])
-> (YesNo -> YesNo -> YesNo -> [YesNo])
-> Enum YesNo
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: YesNo -> YesNo
succ :: YesNo -> YesNo
$cpred :: YesNo -> YesNo
pred :: YesNo -> YesNo
$ctoEnum :: Int -> YesNo
toEnum :: Int -> YesNo
$cfromEnum :: YesNo -> Int
fromEnum :: YesNo -> Int
$cenumFrom :: YesNo -> [YesNo]
enumFrom :: YesNo -> [YesNo]
$cenumFromThen :: YesNo -> YesNo -> [YesNo]
enumFromThen :: YesNo -> YesNo -> [YesNo]
$cenumFromTo :: YesNo -> YesNo -> [YesNo]
enumFromTo :: YesNo -> YesNo -> [YesNo]
$cenumFromThenTo :: YesNo -> YesNo -> YesNo -> [YesNo]
enumFromThenTo :: YesNo -> YesNo -> YesNo -> [YesNo]
Enum, YesNo
YesNo -> YesNo -> Bounded YesNo
forall a. a -> a -> Bounded a
$cminBound :: YesNo
minBound :: YesNo
$cmaxBound :: YesNo
maxBound :: YesNo
Bounded)

instance MessageBox YesNo where
  messageBoxType :: YesNo -> Text
messageBoxType YesNo
_ = String -> Text
T.pack String
"yesno"
  messageBoxValue :: YesNo -> Int
messageBoxValue YesNo
YN_No  = Int
0
  messageBoxValue YesNo
YN_Yes = Int
1

data YesNoCancel = YNC_Yes | YNC_No | YNC_Cancel
  deriving (YesNoCancel -> YesNoCancel -> Bool
(YesNoCancel -> YesNoCancel -> Bool)
-> (YesNoCancel -> YesNoCancel -> Bool) -> Eq YesNoCancel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: YesNoCancel -> YesNoCancel -> Bool
== :: YesNoCancel -> YesNoCancel -> Bool
$c/= :: YesNoCancel -> YesNoCancel -> Bool
/= :: YesNoCancel -> YesNoCancel -> Bool
Eq, Eq YesNoCancel
Eq YesNoCancel =>
(YesNoCancel -> YesNoCancel -> Ordering)
-> (YesNoCancel -> YesNoCancel -> Bool)
-> (YesNoCancel -> YesNoCancel -> Bool)
-> (YesNoCancel -> YesNoCancel -> Bool)
-> (YesNoCancel -> YesNoCancel -> Bool)
-> (YesNoCancel -> YesNoCancel -> YesNoCancel)
-> (YesNoCancel -> YesNoCancel -> YesNoCancel)
-> Ord YesNoCancel
YesNoCancel -> YesNoCancel -> Bool
YesNoCancel -> YesNoCancel -> Ordering
YesNoCancel -> YesNoCancel -> YesNoCancel
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 :: YesNoCancel -> YesNoCancel -> Ordering
compare :: YesNoCancel -> YesNoCancel -> Ordering
$c< :: YesNoCancel -> YesNoCancel -> Bool
< :: YesNoCancel -> YesNoCancel -> Bool
$c<= :: YesNoCancel -> YesNoCancel -> Bool
<= :: YesNoCancel -> YesNoCancel -> Bool
$c> :: YesNoCancel -> YesNoCancel -> Bool
> :: YesNoCancel -> YesNoCancel -> Bool
$c>= :: YesNoCancel -> YesNoCancel -> Bool
>= :: YesNoCancel -> YesNoCancel -> Bool
$cmax :: YesNoCancel -> YesNoCancel -> YesNoCancel
max :: YesNoCancel -> YesNoCancel -> YesNoCancel
$cmin :: YesNoCancel -> YesNoCancel -> YesNoCancel
min :: YesNoCancel -> YesNoCancel -> YesNoCancel
Ord, Int -> YesNoCancel -> String -> String
[YesNoCancel] -> String -> String
YesNoCancel -> String
(Int -> YesNoCancel -> String -> String)
-> (YesNoCancel -> String)
-> ([YesNoCancel] -> String -> String)
-> Show YesNoCancel
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> YesNoCancel -> String -> String
showsPrec :: Int -> YesNoCancel -> String -> String
$cshow :: YesNoCancel -> String
show :: YesNoCancel -> String
$cshowList :: [YesNoCancel] -> String -> String
showList :: [YesNoCancel] -> String -> String
Show, ReadPrec [YesNoCancel]
ReadPrec YesNoCancel
Int -> ReadS YesNoCancel
ReadS [YesNoCancel]
(Int -> ReadS YesNoCancel)
-> ReadS [YesNoCancel]
-> ReadPrec YesNoCancel
-> ReadPrec [YesNoCancel]
-> Read YesNoCancel
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS YesNoCancel
readsPrec :: Int -> ReadS YesNoCancel
$creadList :: ReadS [YesNoCancel]
readList :: ReadS [YesNoCancel]
$creadPrec :: ReadPrec YesNoCancel
readPrec :: ReadPrec YesNoCancel
$creadListPrec :: ReadPrec [YesNoCancel]
readListPrec :: ReadPrec [YesNoCancel]
Read, Int -> YesNoCancel
YesNoCancel -> Int
YesNoCancel -> [YesNoCancel]
YesNoCancel -> YesNoCancel
YesNoCancel -> YesNoCancel -> [YesNoCancel]
YesNoCancel -> YesNoCancel -> YesNoCancel -> [YesNoCancel]
(YesNoCancel -> YesNoCancel)
-> (YesNoCancel -> YesNoCancel)
-> (Int -> YesNoCancel)
-> (YesNoCancel -> Int)
-> (YesNoCancel -> [YesNoCancel])
-> (YesNoCancel -> YesNoCancel -> [YesNoCancel])
-> (YesNoCancel -> YesNoCancel -> [YesNoCancel])
-> (YesNoCancel -> YesNoCancel -> YesNoCancel -> [YesNoCancel])
-> Enum YesNoCancel
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: YesNoCancel -> YesNoCancel
succ :: YesNoCancel -> YesNoCancel
$cpred :: YesNoCancel -> YesNoCancel
pred :: YesNoCancel -> YesNoCancel
$ctoEnum :: Int -> YesNoCancel
toEnum :: Int -> YesNoCancel
$cfromEnum :: YesNoCancel -> Int
fromEnum :: YesNoCancel -> Int
$cenumFrom :: YesNoCancel -> [YesNoCancel]
enumFrom :: YesNoCancel -> [YesNoCancel]
$cenumFromThen :: YesNoCancel -> YesNoCancel -> [YesNoCancel]
enumFromThen :: YesNoCancel -> YesNoCancel -> [YesNoCancel]
$cenumFromTo :: YesNoCancel -> YesNoCancel -> [YesNoCancel]
enumFromTo :: YesNoCancel -> YesNoCancel -> [YesNoCancel]
$cenumFromThenTo :: YesNoCancel -> YesNoCancel -> YesNoCancel -> [YesNoCancel]
enumFromThenTo :: YesNoCancel -> YesNoCancel -> YesNoCancel -> [YesNoCancel]
Enum, YesNoCancel
YesNoCancel -> YesNoCancel -> Bounded YesNoCancel
forall a. a -> a -> Bounded a
$cminBound :: YesNoCancel
minBound :: YesNoCancel
$cmaxBound :: YesNoCancel
maxBound :: YesNoCancel
Bounded)

instance MessageBox YesNoCancel where
  messageBoxType :: YesNoCancel -> Text
messageBoxType YesNoCancel
_ = String -> Text
T.pack String
"yesnocancel"
  messageBoxValue :: YesNoCancel -> Int
messageBoxValue YesNoCancel
YNC_Cancel = Int
0
  messageBoxValue YesNoCancel
YNC_Yes    = Int
1
  messageBoxValue YesNoCancel
YNC_No     = Int
2

c_messageBox :: (T.Text) -- ^ title
 -> (T.Text) -- ^ message, may contain @\\n@ and @\\t@
 -> (T.Text) -- ^ @"ok" "okcancel" "yesno" "yesnocancel"@
 -> (IconType) -- ^ 'Info', 'Warning', 'Error', 'Question'
 -> (Int) -- ^ default button: 0 for cancel/no, 1 for ok/yes, 2 for no in yesnocancel
 -> IO ((Int)) -- ^ 0 for cancel/no, 1 for ok/yes, 2 for no in yesnocancel

c_messageBox :: Text -> Text -> Text -> IconType -> Int -> IO Int
c_messageBox Text
a1 Text
a2 Text
a3 IconType
a4 Int
a5 =
  Text -> (CString -> IO Int) -> IO Int
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a1 ((CString -> IO Int) -> IO Int) -> (CString -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$ \CString
a1' -> 
  Text -> (CString -> IO Int) -> IO Int
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a2 ((CString -> IO Int) -> IO Int) -> (CString -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$ \CString
a2' -> 
  Text -> (CString -> IO Int) -> IO Int
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a3 ((CString -> IO Int) -> IO Int) -> (CString -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$ \CString
a3' -> 
  IconType -> (CString -> IO Int) -> IO Int
forall a b. Show a => a -> (CString -> IO b) -> IO b
withCShowLower IconType
a4 ((CString -> IO Int) -> IO Int) -> (CString -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$ \CString
a4' -> 
  let {a5' :: CInt
a5' = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a5} in 
  CString -> CString -> CString -> CString -> CInt -> IO CInt
c_messageBox'_ CString
a1' CString
a2' CString
a3' CString
a4' CInt
a5' IO CInt -> (CInt -> IO Int) -> IO Int
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
  let {res' :: Int
res' = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res} in
  Int -> IO Int
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 145 "./Brillo/Internals/TinyFileDialogs.chs" #-}


notifyPopup :: (T.Text) -- ^ title
 -> (T.Text) -- ^ message, may contain @\\n@ and @\\t@
 -> (IconType) -- ^ 'Info', 'Warning', 'Error'
 -> IO ()
notifyPopup :: Text -> Text -> IconType -> IO ()
notifyPopup Text
a1 Text
a2 IconType
a3 =
  Text -> (CString -> IO ()) -> IO ()
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a1 ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \CString
a1' -> 
  Text -> (CString -> IO ()) -> IO ()
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a2 ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \CString
a2' -> 
  IconType -> (CString -> IO ()) -> IO ()
forall a b. Show a => a -> (CString -> IO b) -> IO b
withCShowLower IconType
a3 ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \CString
a3' -> 
  CString -> CString -> CString -> IO CInt
notifyPopup'_ CString
a1' CString
a2' CString
a3' IO CInt -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 152 "./Brillo/Internals/TinyFileDialogs.chs" #-}


beep :: IO ()
beep =
  beep'_ >>
  return ()

{-# LINE 154 "./Brillo/Internals/TinyFileDialogs.chs" #-}


messageBox
  :: (MessageBox a)
  => T.Text -- ^ title
  -> T.Text -- ^ message, may contain @\\n@ and @\\t@
  -> IconType -- ^ 'Info', 'Warning', 'Error', 'Question'
  -> a -- ^ default button
  -> IO a
messageBox :: forall a. MessageBox a => Text -> Text -> IconType -> a -> IO a
messageBox Text
ttl Text
msg IconType
icon a
dflt = do
  Int
n <- Text -> Text -> Text -> IconType -> Int -> IO Int
c_messageBox Text
ttl Text
msg (a -> Text
forall a. MessageBox a => a -> Text
messageBoxType a
dflt) IconType
icon (a -> Int
forall a. MessageBox a => a -> Int
messageBoxValue a
dflt)
  case Int -> [(Int, a)] -> Maybe a
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Int
n [ (a -> Int
forall a. MessageBox a => a -> Int
messageBoxValue a
x, a
x) | a
x <- [a
forall a. Bounded a => a
minBound .. a
forall a. Bounded a => a
maxBound] ] of
    Just a
x  -> a -> IO a
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x
    Maybe a
Nothing -> String -> IO a
forall a. String -> IO a
die (String -> IO a) -> String -> IO a
forall a b. (a -> b) -> a -> b
$ String
"TinyFileDialogs.messageBox: "
      String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"internal error; unrecognized return value " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
n

inputBox :: (T.Text) -- ^ title
 -> (T.Text) -- ^ message, may NOT contain @\\n@ and @\\t@ on windows
 -> (Maybe T.Text) -- ^ default input, if 'Nothing' it's a passwordBox
 -> IO ((Maybe T.Text)) -- ^ returns 'Nothing' on cancel

inputBox :: Text -> Text -> Maybe Text -> IO (Maybe Text)
inputBox Text
a1 Text
a2 Maybe Text
a3 =
  Text -> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a1 ((CString -> IO (Maybe Text)) -> IO (Maybe Text))
-> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
a1' -> 
  Text -> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a. Text -> (CString -> IO a) -> IO a
withCText Text
a2 ((CString -> IO (Maybe Text)) -> IO (Maybe Text))
-> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
a2' -> 
  Maybe Text -> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a. Maybe Text -> (CString -> IO a) -> IO a
withCMaybeText Maybe Text
a3 ((CString -> IO (Maybe Text)) -> IO (Maybe Text))
-> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
a3' -> 
  CString -> CString -> CString -> IO CString
inputBox'_ CString
a1' CString
a2' CString
a3' IO CString -> (CString -> IO (Maybe Text)) -> IO (Maybe Text)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CString
res ->
  CString -> IO (Maybe Text)
peekMaybeText CString
res IO (Maybe Text)
-> (Maybe Text -> IO (Maybe Text)) -> IO (Maybe Text)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Maybe Text
res' ->
  Maybe Text -> IO (Maybe Text)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe Text
res')

{-# LINE 175 "./Brillo/Internals/TinyFileDialogs.chs" #-}


saveFileDialog :: (T.Text) -- ^ title
 -> (T.Text) -- ^ default path and file
 -> ([T.Text]) -- ^ filter patterns, @["*.jpg","*.png"]@
 -> (T.Text) -- ^ single filter description, @"text files"@
 -> IO ((Maybe T.Text)) -- ^ returns 'Nothing' on cancel

saveFileDialog a1 a2 a3 a4 =
  withCText a1 $ \a1' -> 
  withCText a2 $ \a2' -> 
  withCTexts a3 $ \(a3'1, a3'2) -> 
  withCText a4 $ \a4' -> 
  saveFileDialog'_ a1' a2' a3'1  a3'2 a4' >>= \res ->
  peekMaybeText res >>= \res' ->
  return (res')

{-# LINE 183 "./Brillo/Internals/TinyFileDialogs.chs" #-}


openFileDialog :: (T.Text) -- ^ title
 -> (T.Text) -- ^ default path and file
 -> ([T.Text]) -- ^ filter patterns, @["*.jpg","*.png"]@
 -> (T.Text) -- ^ single filter description, @"text files"@
 -> (Bool) -- ^ allow multiple selects
 -> IO ((Maybe [T.Text])) -- ^ returns 'Nothing' on cancel

openFileDialog a1 a2 a3 a4 a5 =
  withCText a1 $ \a1' -> 
  withCText a2 $ \a2' -> 
  withCTexts a3 $ \(a3'1, a3'2) -> 
  withCText a4 $ \a4' -> 
  let {a5' = C2HSImp.fromBool a5} in 
  openFileDialog'_ a1' a2' a3'1  a3'2 a4' a5' >>= \res ->
  peekMaybeTextMultiple res >>= \res' ->
  return (res')

{-# LINE 192 "./Brillo/Internals/TinyFileDialogs.chs" #-}


selectFolderDialog :: (T.Text) -- ^ title
 -> (T.Text) -- ^ default path
 -> IO ((Maybe T.Text)) -- ^ returns 'Nothing' on cancel

selectFolderDialog a1 a2 =
  withCText a1 $ \a1' -> 
  withCText a2 $ \a2' -> 
  selectFolderDialog'_ a1' a2' >>= \res ->
  peekMaybeText res >>= \res' ->
  return (res')

{-# LINE 198 "./Brillo/Internals/TinyFileDialogs.chs" #-}


c_colorChooser :: (T.Text) -> (Maybe T.Text) -> (Ptr CUChar) -> (Ptr CUChar) -> IO ((Maybe T.Text)) -- ^ returns 'Nothing' on cancel

c_colorChooser a1 a2 a3 a4 =
  withCText a1 $ \a1' -> 
  withCMaybeText a2 $ \a2' -> 
  let {a3' = id a3} in 
  let {a4' = id a4} in 
  c_colorChooser'_ a1' a2' a3' a4' >>= \res ->
  peekMaybeText res >>= \res' ->
  return (res')

{-# LINE 206 "./Brillo/Internals/TinyFileDialogs.chs" #-}


withColor :: (Word8, Word8, Word8) -> (Ptr CUChar -> IO a) -> IO a
withColor (r, g, b) = withArray $ fmap fromIntegral [r, g, b]

colorChooser
  :: T.Text                           -- ^ title
  -> (Word8, Word8, Word8)            -- ^ default RGB color
  -> IO (Maybe (Word8, Word8, Word8)) -- ^ returns 'Nothing' on cancel
colorChooser :: Text -> (Word8, Word8, Word8) -> IO (Maybe (Word8, Word8, Word8))
colorChooser Text
title (Word8, Word8, Word8)
color = (Word8, Word8, Word8)
-> (Ptr CUChar -> IO (Maybe (Word8, Word8, Word8)))
-> IO (Maybe (Word8, Word8, Word8))
forall a. (Word8, Word8, Word8) -> (Ptr CUChar -> IO a) -> IO a
withColor (Word8, Word8, Word8)
color ((Ptr CUChar -> IO (Maybe (Word8, Word8, Word8)))
 -> IO (Maybe (Word8, Word8, Word8)))
-> (Ptr CUChar -> IO (Maybe (Word8, Word8, Word8)))
-> IO (Maybe (Word8, Word8, Word8))
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
ptr -> do
  Maybe Text
res <- Text -> Maybe Text -> Ptr CUChar -> Ptr CUChar -> IO (Maybe Text)
c_colorChooser Text
title Maybe Text
forall a. Maybe a
Nothing Ptr CUChar
ptr Ptr CUChar
ptr
  case Maybe Text
res of
    Maybe Text
Nothing -> Maybe (Word8, Word8, Word8) -> IO (Maybe (Word8, Word8, Word8))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Word8, Word8, Word8)
forall a. Maybe a
Nothing
    Just Text
_  -> ([CUChar] -> Maybe (Word8, Word8, Word8))
-> IO [CUChar] -> IO (Maybe (Word8, Word8, Word8))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
      ((\case
        [Word8
r, Word8
g, Word8
b] -> (Word8, Word8, Word8) -> Maybe (Word8, Word8, Word8)
forall a. a -> Maybe a
Just (Word8
r, Word8
g, Word8
b)
        [Word8]
_        -> Maybe (Word8, Word8, Word8)
forall a. Maybe a
Nothing
        ) ([Word8] -> Maybe (Word8, Word8, Word8))
-> ([CUChar] -> [Word8]) -> [CUChar] -> Maybe (Word8, Word8, Word8)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CUChar -> Word8) -> [CUChar] -> [Word8]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CUChar -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral)
      (Int -> Ptr CUChar -> IO [CUChar]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
3 Ptr CUChar
ptr)

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_messageBox"
  c_messageBox'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_notifyPopup"
  notifyPopup'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (IO C2HSImp.CInt))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_beep"
  beep'_ :: (IO ())

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_inputBox"
  inputBox'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (IO (C2HSImp.Ptr C2HSImp.CChar)))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_saveFileDialog"
  saveFileDialog'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (IO (C2HSImp.Ptr C2HSImp.CChar)))))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_openFileDialog"
  openFileDialog'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr C2HSImp.CChar))))))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_selectFolderDialog"
  selectFolderDialog'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> (IO (C2HSImp.Ptr C2HSImp.CChar))))

foreign import ccall safe "Brillo/Internals/TinyFileDialogs.chs.h tinyfd_colorChooser"
  c_colorChooser'_ :: ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CChar) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO (C2HSImp.Ptr C2HSImp.CChar))))))