{-# LANGUAGE CPP #-}
module FDefaults(module FDefaults,module Alignment,fromMaybe) where
import Fudget
import CompOps
import Xtypes
import Alignment(Alignment(..))
--import Geometry(pmax)
import Data.Maybe(fromMaybe)
import Sizing(Sizing)
import GCAttrs --(ColorSpec,colorSpec)
{-
HBC uses "cpp -C -traditional" which causes all the to be left behind
when the macro definitions are processed. That is why the definitions
are inside a comment.
-}
type Customiser a = a -> a
cust :: (a->a) -> Customiser a -- to obtain better type signatures
cust = id
type PF p a b = F (Either (Customiser p) a) b
type PK p a b = K (Either (Customiser p) a) b
getpar pp = fromMaybe (error "getpar:: missing default") . getparMaybe pp
getparMaybe pp [] = Nothing
getparMaybe pp (p:ps) =
case pp p of
Just a -> Just a
Nothing -> getparMaybe pp ps
noPF :: PF p a b -> F a b
noPF f = f >=^< Right
standard :: Customiser a
standard = id
class HasFontSpec xxx where { setFontSpec :: (FontSpec) -> Customiser xxx; getFontSpec :: xxx -> (FontSpec); getFontSpecMaybe :: xxx -> Maybe (FontSpec); getFontSpec = fromMaybe (error "get FontSpec: missing default") . getFontSpecMaybe }
setFont f = setFontSpec (fontSpec f)
--class HasTitle xxx where { setTitle :: (String) -> Customiser xxx; getTitle :: xxx -> (String); getTitleMaybe :: xxx -> Maybe (String); getTitle = fromMaybe (error "get Title: missing default") . getTitleMaybe }
class HasKeys xxx where { setKeys :: ([(ModState,KeySym)]) -> Customiser xxx; getKeys :: xxx -> ([(ModState,KeySym)]); getKeysMaybe :: xxx -> Maybe ([(ModState,KeySym)]); getKeys = fromMaybe (error "get Keys: missing default") . getKeysMaybe }
class HasWinAttr xxx where { setWinAttr :: ([WindowAttributes]) -> Customiser xxx; getWinAttr :: xxx -> ([WindowAttributes]); getWinAttrMaybe :: xxx -> Maybe ([WindowAttributes]); getWinAttr = fromMaybe (error "get WinAttr: missing default") . getWinAttrMaybe }
class HasBorderWidth xxx where { setBorderWidth :: (Int) -> Customiser xxx; getBorderWidth :: xxx -> (Int); getBorderWidthMaybe :: xxx -> Maybe (Int); getBorderWidth = fromMaybe (error "get BorderWidth: missing default") . getBorderWidthMaybe }
class HasBgColorSpec xxx where { setBgColorSpec :: (ColorSpec) -> Customiser xxx; getBgColorSpec :: xxx -> (ColorSpec); getBgColorSpecMaybe :: xxx -> Maybe (ColorSpec); getBgColorSpec = fromMaybe (error "get BgColorSpec: missing default") . getBgColorSpecMaybe }
class HasFgColorSpec xxx where { setFgColorSpec :: (ColorSpec) -> Customiser xxx; getFgColorSpec :: xxx -> (ColorSpec); getFgColorSpecMaybe :: xxx -> Maybe (ColorSpec); getFgColorSpec = fromMaybe (error "get FgColorSpec: missing default") . getFgColorSpecMaybe }
-- eta expanded because of the stupid monomorphism restriction
setBgColor c = setBgColorSpec . colorSpec $ c
setFgColor c = setFgColorSpec . colorSpec $ c
--getBgColor c = getBgColorSpec $ c
--getFgColor c = getFgColorSpec $ c
class HasMargin xxx where { setMargin :: (Int) -> Customiser xxx; getMargin :: xxx -> (Int); getMarginMaybe :: xxx -> Maybe (Int); getMargin = fromMaybe (error "get Margin: missing default") . getMarginMaybe }
class HasAlign xxx where { setAlign :: (Alignment) -> Customiser xxx; getAlign :: xxx -> (Alignment); getAlignMaybe :: xxx -> Maybe (Alignment); getAlign = fromMaybe (error "get Align: missing default") . getAlignMaybe }
class HasInitSize xxx where { setInitSize :: a -> Customiser (xxx a); getInitSizeMaybe :: xxx a -> Maybe a; getInitSize :: xxx a -> a; getInitSize = fromMaybe (error "get InitSize: missing default") . getInitSizeMaybe }
class HasInitDisp xxx where { setInitDisp :: a -> Customiser (xxx a); getInitDispMaybe :: xxx a -> Maybe a; getInitDisp :: xxx a -> a; getInitDisp = fromMaybe (error "get InitDisp: missing default") . getInitDispMaybe }
class HasStretchable xxx where { setStretchable :: ((Bool,Bool)) -> Customiser xxx; getStretchable :: xxx -> ((Bool,Bool)); getStretchableMaybe :: xxx -> Maybe ((Bool,Bool)); getStretchable = fromMaybe (error "get Stretchable: missing default") . getStretchableMaybe }
class HasInitText xxx where { setInitText :: ([String]) -> Customiser xxx; getInitText :: xxx -> ([String]); getInitTextMaybe :: xxx -> Maybe ([String]); getInitText = fromMaybe (error "get InitText: missing default") . getInitTextMaybe }
class HasSizing xxx where { setSizing :: (Sizing) -> Customiser xxx; getSizing :: xxx -> (Sizing); getSizingMaybe :: xxx -> Maybe (Sizing); getSizing = fromMaybe (error "get Sizing: missing default") . getSizingMaybe }