module Graphics.UI.Gtk.Helpers.FileDialog
( openOpenFileDialog
)
where
import Graphics.UI.Gtk
type Ext = ([String], String)
openOpenFileDialog :: String -> [Ext] -> IO (Maybe String)
openOpenFileDialog title exts = do
dialog <- fileChooserDialogNew
(Just title)
Nothing
FileChooserActionOpen
[("gtk-cancel"
,ResponseCancel)
,("gtk-ok"
, ResponseAccept)]
ffs <- extsToFilters exts
mapM_ (fileChooserAddFilter dialog) ffs
widgetShow dialog
result <- dialogRun dialog
res <- case result of
ResponseAccept -> fileChooserGetFilename dialog
_ -> return Nothing
widgetDestroy dialog
return res
extsToFilters :: [Ext] -> IO [FileFilter]
extsToFilters = mapM extToFilter
extToFilter :: Ext -> IO FileFilter
extToFilter (pats, name) = do
ff <- fileFilterNew
fileFilterSetName ff name
mapM_ (fileFilterAddPattern ff) pats
return ff