leksah-0.1: src/IDE/Framework/Parameters.hs
-----------------------------------------------------------------------------
--
-- Module : IDE.Framework.Parameters
-- Copyright : (c) Juergen Nicklisch-Franken (aka Jutaro)
-- License : GNU-GPL
--
-- Maintainer : Juergen Nicklisch-Franken <jnf at arcor.de>
-- Stability : experimental
-- Portability : portable
--
-- | Module for parameters for editors
--
-----------------------------------------------------------------------------------
module IDE.Framework.Parameters (
Parameters
, Parameter(..)
, paraName
, paraSynopsis
, paraDirection
, paraShadow
, paraOuterAlignment
, paraInnerAlignment
, paraOuterPadding
, paraInnerPadding
, paraMinSize
, paraHorizontal
, getParameter
, getParameterPrim
, (<<<-)
, emptyParams
, Direction(..)
, HorizontalAlign(..)
) where
import Graphics.UI.Gtk
import Data.Maybe
import qualified Data.List as List
import IDE.Core.Exception
--
-- | The direction of a split
--
data Direction = Horizontal | Vertical
deriving (Eq,Show)
data HorizontalAlign = StartHorizontal | StopHorizontal | Keep
deriving (Eq,Show)
--
-- | A type for parameters for editors
--
type Parameters = [Parameter]
data Parameter = ParaName String
| ParaSynopsis String
| ParaDirection Direction
| ParaShadow ShadowType
| ParaOuterAlignment (Float,Float,Float,Float)
-- | xalign yalign xscale yscale
| ParaOuterPadding (Int,Int,Int,Int)
-- | paddingTop paddingBottom paddingLeft paddingRight
| ParaInnerAlignment (Float,Float,Float,Float)
-- | xalign yalign xscale yscale
| ParaInnerPadding (Int,Int,Int,Int)
-- | paddingTop paddingBottom paddingLeft paddingRight
| ParaMinSize (Int, Int)
| ParaHorizontal HorizontalAlign
deriving (Eq,Show)
instance Show ShadowType
where show _ = "Any Shadow"
emptyParams :: [Parameter]
emptyParams = []
paraName :: (Parameter -> (Maybe String))
paraName (ParaName str) = Just str
paraName _ = Nothing
paraSynopsis :: (Parameter -> (Maybe String))
paraSynopsis (ParaSynopsis str) = Just str
paraSynopsis _ = Nothing
paraDirection :: (Parameter -> (Maybe Direction))
paraDirection (ParaDirection d) = Just d
paraDirection _ = Nothing
paraShadow :: (Parameter -> (Maybe ShadowType))
paraShadow (ParaShadow d) = Just d
paraShadow _ = Nothing
paraOuterAlignment :: (Parameter -> (Maybe (Float,Float,Float,Float)))
paraOuterAlignment (ParaOuterAlignment d) = Just d
paraOuterAlignment _ = Nothing
paraInnerAlignment :: (Parameter -> (Maybe (Float,Float,Float,Float)))
paraInnerAlignment (ParaInnerAlignment d) = Just d
paraInnerAlignment _ = Nothing
paraOuterPadding :: (Parameter -> (Maybe (Int,Int,Int,Int)))
paraOuterPadding (ParaOuterPadding d) = Just d
paraOuterPadding _ = Nothing
paraInnerPadding :: (Parameter -> (Maybe (Int,Int,Int,Int)))
paraInnerPadding (ParaInnerPadding d) = Just d
paraInnerPadding _ = Nothing
paraMinSize :: (Parameter -> (Maybe (Int, Int)))
paraMinSize (ParaMinSize d) = Just d
paraMinSize _ = Nothing
paraHorizontal :: (Parameter -> (Maybe (HorizontalAlign)))
paraHorizontal (ParaHorizontal d) = Just d
paraHorizontal _ = Nothing
--
-- | Convenience method to get a parameter, or if not set the default parameter
--
getParameter :: (Parameter -> (Maybe beta)) -> Parameters -> beta
getParameter selector parameter =
case getParameterPrim selector parameter of
Just ele -> ele
_ -> case getParameterPrim selector defaultParameters of
Just ele -> ele
_ -> throwIDE "default parameter not defined"
getParameterPrim :: (Parameter -> (Maybe beta)) -> Parameters -> Maybe beta
getParameterPrim selector parameter =
case filter isJust $ map selector parameter of
(Just ele) : _ -> Just ele
_ -> Nothing
(<<<-) :: (Parameter -> (Maybe beta)) -> Parameter -> Parameters -> Parameters
(<<<-) selector para = \params -> para : filter (isNothing . selector) params
defaultParameters :: Parameters
defaultParameters =
[ ParaName ""
, ParaSynopsis ""
, ParaDirection Horizontal
, ParaShadow ShadowNone
, ParaOuterAlignment (0.5, 0.5, 0.95, 0.95)
, ParaOuterPadding (2, 5, 3, 3)
, ParaInnerAlignment (0.5, 0.5, 0.95, 0.95)
, ParaInnerPadding (2, 5, 3, 3)
, ParaMinSize (-1,-1)
, ParaHorizontal Keep]