module Graphics.UI.Editor.Parameters (
Parameters
, Parameter(..)
, paraName
, paraSynopsis
, paraDirection
, paraShowLabel
, paraShadow
, paraOuterAlignment
, paraInnerAlignment
, paraOuterPadding
, paraInnerPadding
, paraMinSize
, paraHorizontal
, paraStockId
, paraMultiSel
, paraPack
, getParameter
, getParameterPrim
, (<<<-)
, emptyParams
, Direction(..)
, HorizontalAlign(..)
) where
import Graphics.UI.Gtk
import Data.Maybe
import Data.Text (Text)
import qualified Data.List as List
data Direction = Horizontal | Vertical
deriving (Eq,Show)
data HorizontalAlign = StartHorizontal | StopHorizontal | Keep
deriving (Eq,Show)
type Parameters = [Parameter]
data Parameter = ParaName Text
| ParaSynopsis Text
| ParaDirection Direction
| ParaShadow ShadowType
| ParaShowLabel Bool
| ParaOuterAlignment (Float,Float,Float,Float)
| ParaOuterPadding (Int,Int,Int,Int)
| ParaInnerAlignment (Float,Float,Float,Float)
| ParaInnerPadding (Int,Int,Int,Int)
| ParaMinSize (Int, Int)
| ParaHorizontal HorizontalAlign
| ParaStockId Text
| ParaMultiSel Bool
| ParaPack Packing
deriving (Eq,Show)
emptyParams :: [Parameter]
emptyParams = []
paraName :: Parameter -> Maybe Text
paraName (ParaName str) = Just str
paraName _ = Nothing
paraSynopsis :: Parameter -> Maybe Text
paraSynopsis (ParaSynopsis str) = Just str
paraSynopsis _ = Nothing
paraShowLabel :: Parameter -> Maybe Bool
paraShowLabel (ParaShowLabel b) = Just b
paraShowLabel _ = 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
paraStockId :: Parameter -> Maybe Text
paraStockId (ParaStockId str) = Just str
paraStockId _ = Nothing
paraMultiSel :: Parameter -> Maybe Bool
paraMultiSel (ParaMultiSel b) = Just b
paraMultiSel _ = Nothing
paraPack :: Parameter -> Maybe Packing
paraPack (ParaPack b) = Just b
paraPack _ = Nothing
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
_ -> error "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 ""
, ParaStockId ""
, ParaSynopsis ""
, ParaDirection Horizontal
, ParaShadow ShadowNone
, ParaOuterAlignment (0.4, 0.5, 1.0, 0.7)
, ParaOuterPadding (5, 5, 5, 5)
, ParaInnerAlignment (0.4, 0.5, 1.0, 0.7)
, ParaInnerPadding (5, 5, 5, 5)
, ParaMinSize (1,1)
, ParaHorizontal Keep
, ParaMultiSel True
, ParaPack PackNatural
, ParaShowLabel True
]