module Graphics.UI.FLTK.Ask (input,ask,message,dirChooser,fileChooser) where
import Foreign (nullPtr)
import Foreign.C.String (withCString, peekCString, CString)
foreign import ccall "_fl_input" _fl_input :: CString -> IO CString
foreign import ccall "_fl_ask" _fl_ask :: CString -> IO Bool
foreign import ccall "_fl_message" _fl_message :: CString -> IO ()
foreign import ccall "_fl_dir_chooser" _fl_dir_chooser :: CString -> CString -> IO CString
foreign import ccall "_fl_file_chooser" _fl_file_chooser :: CString->CString -> CString -> IO CString
sPeek ptr | ptr == nullPtr = return ""
| True = peekCString ptr
input :: String -> IO String
input s = withCString s (\cs -> _fl_input cs >>= sPeek)
ask :: String -> IO Bool
ask s = withCString s _fl_ask
message :: String -> IO ()
message s = withCString s _fl_message
dirChooser :: String -> FilePath -> IO FilePath
dirChooser m s = withCString m (\ms -> withCString s (\cs -> _fl_dir_chooser ms cs >>= sPeek))
fileChooser :: String -> String -> FilePath -> IO FilePath
fileChooser m p s = withCString m (\ms -> withCString p (\ps -> withCString s (\cs -> _fl_file_chooser ms ps cs >>= sPeek)))