module Hob.Context.StyleContext (
    StyleContext,
    defaultStyleContext,
    uiFile,
    uiTheme,
    sourceStyleScheme,
    sourceStyleFont
) where

import Control.Monad                 (liftM)
import Graphics.Rendering.Pango.Font (FontDescription,
                                      fontDescriptionFromString)
import Graphics.UI.Gtk.SourceView    (SourceStyleScheme,
                                      SourceStyleSchemeManager,
                                      sourceStyleSchemeManagerGetDefault,
                                      sourceStyleSchemeManagerGetScheme,
                                      sourceStyleSchemeManagerSetSearchPath)
import System.FilePath               ((</>))

data StyleContext = StyleContext {
    contextDataPath     :: FilePath,
    contextStyleManager :: SourceStyleSchemeManager
}

defaultStyleContext :: FilePath -> IO StyleContext
defaultStyleContext dataDir = do
    styleManager <- sourceStyleSchemeManagerGetDefault
    sourceStyleSchemeManagerSetSearchPath styleManager (Just [dataDir </> "themes" </> "gtksourceview"])
    return $ StyleContext dataDir styleManager

uiFile :: StyleContext -> FilePath
uiFile ctx = contextDataPath ctx </> "ui.glade"

uiTheme :: StyleContext -> FilePath
uiTheme ctx = contextDataPath ctx </> "themes" </> "gtk" </> "default" </> "gtk-dark.css"

sourceStyleScheme :: StyleContext -> Maybe FilePath -> IO (Maybe SourceStyleScheme)
sourceStyleScheme ctx _ = do
    style <- sourceStyleSchemeManagerGetScheme (contextStyleManager ctx) "molokai"
    return $ Just style

sourceStyleFont :: StyleContext -> Maybe FilePath -> IO (Maybe FontDescription)
sourceStyleFont _ _ = liftM Just $ fontDescriptionFromString "monospace 12"