Work on selection lists and option menus
This commit is contained in:
+25
-14
@@ -3,6 +3,7 @@ module Dodge.Menu.Option
|
||||
--import Dodge.ScodeToChar
|
||||
--import Data.Maybe
|
||||
--import Dodge.WindowLayout
|
||||
import Dodge.SelectionList
|
||||
import Padding
|
||||
import Picture.Base
|
||||
import Dodge.Data.CardinalPoint
|
||||
@@ -11,18 +12,8 @@ import Dodge.Data.Universe
|
||||
import qualified Data.Set as Set
|
||||
import LensHelp
|
||||
|
||||
initializeOptionMenu :: String -> [MenuOption] -> Maybe String -> (Universe -> Universe) -> Universe -> ScreenLayer
|
||||
initializeOptionMenu title ops defstr eff u =
|
||||
OptionScreen
|
||||
{ _scTitle = title
|
||||
, _scOptions = ops
|
||||
, _scOffset = 0
|
||||
, _scMaybeOption = fmap (Toggle eff . const . MODString) defstr
|
||||
, _scOptionFlag = NormalOptions
|
||||
, _scSelectionList = makeOptionsSelectionList 10 (Just 0) u ops
|
||||
, _scAvailableLines = 10
|
||||
, _scShownItems = []
|
||||
, _scListDisplayParams = ListDisplayParams
|
||||
optionListDisplayParams :: ListDisplayParams
|
||||
optionListDisplayParams = ListDisplayParams
|
||||
{ _ldpPosX = 50
|
||||
, _ldpPosY = 50
|
||||
, _ldpScale = 2
|
||||
@@ -31,7 +22,6 @@ initializeOptionMenu title ops defstr eff u =
|
||||
, _ldpSizeRestriction = SelectionSizeRestriction overflowit
|
||||
, _ldpCursorType = BorderCursor (Set.fromList [North,South,West])
|
||||
}
|
||||
}
|
||||
where
|
||||
overflowit = SelectionItem
|
||||
{ _siPictures = [text "MORE OPTIONS"]
|
||||
@@ -42,6 +32,22 @@ initializeOptionMenu title ops defstr eff u =
|
||||
, _siOffX = 0
|
||||
}
|
||||
|
||||
initializeOptionMenu :: String -> [MenuOption] -> Maybe String -> (Universe -> Universe) -> Universe -> ScreenLayer
|
||||
initializeOptionMenu title ops defstr eff u =
|
||||
OptionScreen
|
||||
{ _scTitle = title
|
||||
, _scOptions = ops
|
||||
, _scOffset = 0
|
||||
, _scPositionedMenuOption = case defstr of
|
||||
Nothing -> NoPositionedMenuOption
|
||||
Just str -> BottomMenuOption $ (Toggle eff . const . MODString) str
|
||||
, _scOptionFlag = NormalOptions
|
||||
, _scSelectionList = makeOptionsSelectionList 10 (Just 0) u ops
|
||||
, _scAvailableLines = getAvailableListLines optionListDisplayParams (u ^. uvConfig)
|
||||
, _scShownItems = []
|
||||
, _scListDisplayParams = optionListDisplayParams
|
||||
}
|
||||
|
||||
refreshOptionsSelectionList :: Universe -> Universe
|
||||
refreshOptionsSelectionList u = u & uvScreenLayers . ix 0 %~ f
|
||||
where
|
||||
@@ -61,9 +67,14 @@ makeOptionsSelectionList maxlines mselpos u mos = SelectionList
|
||||
optionsToSelections :: Int -> Universe -> [MenuOption] -> [SelectionItem]
|
||||
optionsToSelections maxlines u allops = map colStrToSelItem colstrs
|
||||
where
|
||||
ops = take maxlines allops
|
||||
ops | maxlines >= length allops = allops
|
||||
| otherwise = take (maxlines - 1) allops ++ [cycleOptionsOption]
|
||||
maxOptionLength = 3 + maximum (0 : map (optionValueOffset u) ops)
|
||||
colstrs = map (menuOptionToString u maxOptionLength) ops
|
||||
cycleOptionsOption = Toggle cycleOptions (const (MODString "MORE OPTIONS"))
|
||||
|
||||
cycleOptions :: Universe -> Universe
|
||||
cycleOptions = id
|
||||
|
||||
colStrToSelItem :: (Color,String) -> SelectionItem
|
||||
colStrToSelItem (col,str) = SelectionItem
|
||||
|
||||
Reference in New Issue
Block a user