This commit is contained in:
2025-09-19 19:56:12 +01:00
parent 2d856ddf9e
commit d4f2cdd3fd
20 changed files with 282 additions and 351 deletions
+11 -23
View File
@@ -14,9 +14,8 @@ import LensHelp
import Padding
import Picture.Base
initializeOptionMenu ::
String -> [MenuOption] -> EscapeMenuOption -> Universe -> ScreenLayer
initializeOptionMenu title ops pmo u =
initializeOptionMenu :: ExtraMenuOption -> String -> [MenuOption] -> Universe -> ScreenLayer
initializeOptionMenu pmo title ops u =
OptionScreen
{ _scTitle = title
, _scOptions = ops
@@ -28,12 +27,10 @@ initializeOptionMenu title ops pmo u =
, _scDisplayTime = 0
}
-- BO = Bottom Option
initializeOptionMenuBO ::
String -> [MenuOption] -> String -> (Universe -> Universe) -> Universe -> ScreenLayer
initializeOptionMenuBO title ops str eff = initializeOptionMenu title ops pmo
where
pmo = BottomEscapeMenuOption $ (Toggle eff . const . MODString) str
String -> (Universe -> Universe) -> String -> [MenuOption] -> Universe -> ScreenLayer
initializeOptionMenuBO str eff = initializeOptionMenu
$ BottomMenuOption $ (Toggle eff . const . MODString) str
refreshOptionsSelectionList :: Universe -> Universe
refreshOptionsSelectionList u = u & uvScreenLayers . ix 0 %~ f
@@ -51,17 +48,18 @@ optionsToSelections ::
Int ->
Universe ->
[MenuOption] ->
EscapeMenuOption ->
ExtraMenuOption ->
[SelectionItem (Universe -> Universe, Universe -> Universe)]
optionsToSelections maxlines u allops pmo = case pmo of
NoEscapeMenuOption -> map (menuOptionToSelectionItem u maxOptionLength) ops
TopEscapeMenuOption mo -> map (menuOptionToSelectionItem u maxOptionLength) (mo : ops)
BottomEscapeMenuOption mo -> map (menuOptionToSelectionItem u maxOptionLength) (ops ++ [mo])
NoExtraMenuOption -> map (menuOptionToSelectionItem u maxOptionLength) ops
TopMenuOption mo -> map (menuOptionToSelectionItem u maxOptionLength) (mo : ops)
BottomMenuOption mo -> map (menuOptionToSelectionItem u maxOptionLength) (ops ++ [mo])
where
offset = fromMaybe 0 $ u ^? uvScreenLayers . _head . scOffset
ops
| maxlines >= length allops = allops
| otherwise = take (maxlines - 2) (drop offset allops ++ repeat dummyMenuOption) ++ [cycleOptionsOption]
| otherwise = take (maxlines - 2) (drop offset allops ++ repeat dummyMenuOption)
++ [cycleOptionsOption]
maxOptionLength = 3 + maximum (0 : map (optionValueOffset u) ops)
cycleOptionsOption =
Toggle
@@ -117,13 +115,3 @@ menuOptionToSelectionItem w padAmount mo =
optionText = case _moString mo w of
MODStringOption s t -> rightPad padAmount '.' s ++ t
x -> _modString x
--menuOptionToString :: Universe -> Int -> MenuOption -> (Color, String)
--menuOptionToString w padAmount mo = (thecol, optionText)
-- where
-- thecol = case _moString mo w of
-- MODBlockedString{} -> greyN 0.5
-- _ -> white
-- optionText = case _moString mo w of
-- MODStringOption s t -> rightPad padAmount '.' s ++ t
-- x -> _modString x