module Graphics.UI.Gtk.Helpers.FileDialog ( openOpenFileDialog ) where import Graphics.UI.Gtk type Ext = ([String], String) -- Auxiliary functions: open file dialogs openOpenFileDialog :: String -> [Ext] -> IO (Maybe String) openOpenFileDialog title exts = do dialog <- fileChooserDialogNew (Just title) --dialog title Nothing FileChooserActionOpen --the kind of dialog we want [("gtk-cancel" --The buttons to display ,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