module Util.FileType ( FileType (..),extension,fromExtension , fromFilePath,wildcard,bitmapType , unknownFileType,unknownFileTypeIn , justPngWildcard) where import qualified Graphics.UI.WXCore as WXC import Data.Char (toLower) import System.FilePath (takeExtension) import Util.Sexp (Sexp(Atom)) import Util.Sexpable (Sexpable (..),unexpected,unknownAtom) import I18n(__) data FileType = Bmp | Jpeg | Png | Tif deriving (Eq) instance Sexpable FileType where toSexp = Atom . extension fromSexp (Atom ext) = case fromExtension ext of Nothing -> unknownAtom ext Just ft -> return ft fromSexp sexp = unexpected sexp extension :: FileType -> String extension ext = case ext of { Bmp -> "bmp"; Jpeg -> "jpeg" ; Png -> "png"; Tif -> "tif"} fromExtension :: String -> Maybe FileType fromExtension ext = case map toLower ext of "bmp" -> Just Bmp "jpg" -> Just Jpeg; "jpeg" -> Just Jpeg "png" -> Just Png; "tif" -> Just Tif _ -> Nothing unknownFileType :: String -> String unknownFileType ext = (__ "Unknown file type") ++ " '" ++ ext ++ "'" unknownFileTypeIn :: FilePath -> String unknownFileTypeIn filepath = (__ "Unknown file type")++ " '" ++ (tail $ takeExtension filepath) ++ "'" fromFilePath :: FilePath -> Maybe FileType fromFilePath = fromExtension . tail . takeExtension wildcard :: [(String,[String])] wildcard = [ ("bmp",["*.bmp","*.BMP"]) , ("jpeg",["*.jpg","*.JPG","*.jpeg","*.JPEG"]) , ("png",["*.png","*.PNG"]) , ("tif",["*.tif","*.TIF"]) ] justPngWildcard :: [(String,[String])] justPngWildcard = [("png",["*.png","*.PNG"])] bitmapType :: FileType -> Int bitmapType ext = case ext of Bmp -> WXC.wxBITMAP_TYPE_BMP Jpeg -> WXC.wxBITMAP_TYPE_JPEG Png -> WXC.wxBITMAP_TYPE_PNG Tif -> WXC.wxBITMAP_TYPE_TIF