wxcore-0.92.3.0: src/haskell/Graphics/UI/WXCore/Defines.hs
-----------------------------------------------------------------------------------------
{-|
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 -> ":"