----------------------------------------------------------------------------------------- {-| Module : Defines Copyright : (c) Daan Leijen 2003 License : wxWindows Maintainer : wxhaskell-devel@lists.sourceforge.net Stability : provisional Portability : portable Exports standard /defines/ of wxWidgets. -} ----------------------------------------------------------------------------------------- module Graphics.UI.WXCore.Defines( -- * GUI toolkit WxToolkit(..), wxToolkit, wxVersion -- * Files , getAbsoluteFilePath , dirSep, pathSep ) where import System.Directory import System.FilePath import Graphics.UI.WXCore.WxcClasses import System.IO.Unsafe( unsafePerformIO ) {-------------------------------------------------------------------------------- --------------------------------------------------------------------------------} -- | wxWidgets library kinds. data WxToolkit = WxGTK -- ^ GTK | WxMac -- ^ MacOS | WxMSW -- ^ Any windows | WxMotif | WxMGL -- ^ SciTech soft MGL | WxUniversal | WxOSTwo -- ^ OS\/2 | WxXEleven -- ^ X11 | WxUnknown deriving (Eq,Show,Enum) {-# NOINLINE wxToolkit #-} -- | Get the current wxWidgets library kind. wxToolkit :: WxToolkit wxToolkit = unsafePerformIO $ findDefine WxUnknown toolkits where toolkits = [("__WXGTK__", WxGTK) ,("__WXMAC__", WxMac) ,("__WXMSW__", WxMSW) ,("__WXMOTIF__", WxMotif) ,("__WXMGL__", WxMGL) ,("__WXUNIVERSAL__", WxUniversal) ,("__WXOS2__", WxOSTwo) ,("__WXX11__", WxXEleven) ] findDefine :: a -> [(String,a)] -> IO a findDefine def [] = return def findDefine def ((name,val):xs) = do defined <- isDefined name if (defined) then return val else findDefine def xs {-# NOINLINE wxVersion #-} -- | Return the version of the wxWidgets library. It is composed of the major -- version times 1000, plus the minor version times 100, plus the release number. -- For example, version 2.1.15 would be 2115. wxVersion :: Int wxVersion = unsafePerformIO $ versionNumber {----------------------------------------------------------------------------------------- relative files -----------------------------------------------------------------------------------------} -- | Find a file relative to the application or current directory. -- (absolute paths are passed without modification). This allows one -- to access resources relative to the installation directory in a -- portable way. getAbsoluteFilePath :: FilePath -> IO FilePath getAbsoluteFilePath fname = do exist <- doesFileExist fname if exist then return fname else do appdir <- getApplicationDir let appdirfname = appdir </> fname appdirfnameExists <- doesFileExist appdirfname if appdirfnameExists then return appdirfname else do cwd <- getCurrentDirectory let cwdfname = cwd </> fname cwdfnameExists <- doesFileExist cwdfname if cwdfnameExists then return cwdfname else return fname {-# DEPRECATED dirSep "Use System.FilePath module and/or its module's pathSeparator instead" #-} -- | deprecated: Use System.FilePath module and/or its module\'s 'pathSeparator' instead. dirSep :: String dirSep = case wxToolkit of WxMSW -> "\\" _other -> "/" {-# DEPRECATED pathSep "Use System.FilePath module's searchPathSeparator instead" #-} -- | deprecated: Use System.FilePath module\'s 'searchPathSeparator' instead. pathSep :: String pathSep = case wxToolkit of WxMSW -> ";" _other -> ":"