module Graphics.UI.AF.WxForm.WxEnumeration ( enumeration ) where import Graphics.UI.AF.WxForm.EditorComponent import Graphics.UI.AF.General import Graphics.UI.WX hiding (value, entry, Parent, items, label) import qualified Graphics.UI.WX as WX (items) import List (findIndex) enumeration :: (Show a) => String -- ^Label for the resulting 'EC'. -> [(String, a, a -> Bool)] -- ^ValueName, Value, isValue -> a -- ^The initial value in 'EC' a () (see return value) -> EC a enumeration typeName items y = mapValue intToA (const aToInt) $ builderToCom' $ let enumSize = sum $ map (+ bottomAndSpaceSize) $ map length itemNames bottomAndSpaceSize = 3 in do comH <- if enumSize < 40 then box Horizontal else dropdownChoice return comH where intToA sel = itemValues !! sel aToInt x = maybe 0 id (List.findIndex (== True) $ (map (\f -> f x) isItems)) enumLabel = PriLabel GoodConstr typeName box direction = do Parent w <- getPanel r1 <- io $ radioBox w direction itemNames [ ] let gui = (SelfContained (\label' -> do set r1 [text := label'] return $ hfill $ widget r1 ) enumLabel ) addGuiAndOnSelect r1 gui dropdownChoice = do Parent w <- getPanel r1 <- io $ choice w [WX.items := itemNames] let gui = singleGui enumLabel r1 hfill addGuiAndOnSelect r1 gui addGuiAndOnSelect enum gui = do (comH, parms) <- addCustomGui (aToInt y) (setSelection enum) enum gui io $ set enum [ on select := get enum selection >>= (testInputParm' parms) SetOnReject ] return comH setSelection enum x = set enum [ selection := x] (itemNames, itemValues, isItems) = unzip3 items {- Old enumeration (20071216) -- |Constructs an enumerated EC. The GUI will be a radioBox or a drop-down choice. enumeration :: (Show a) => String -- ^Label for the resulting 'EC'. -> [(String, a, a -> Bool)] -- ^ValueName, Value, isValue -> a -- ^The initial value in 'EC' a () (see return value) -> EC a enumeration typeName items y = builderToCom' $ let enumSize = sum $ map (+ bottomAndSpaceSize) $ map length itemNames bottomAndSpaceSize = 3 in do comH <- if enumSize < 40 then box Horizontal else dropdownChoice return comH where enumLabel = PriLabel GoodConstr typeName box direction = do Parent w <- getPanel r1 <- io $ radioBox w direction itemNames [ ] let gui = (SelfContained (\label -> do set r1 [text := label] return $ hfill $ widget r1 ) enumLabel ) foo r1 gui dropdownChoice = do Parent w <- getPanel r1 <- io $ choice w [WX.items := itemNames] let gui = singleGui enumLabel r1 hfill foo r1 gui foo enum gui = do lastSelection <- io $ varCreate 0 (comH, parms) <- addCustomGuiNoEquals y (setSelection enum lastSelection) enum gui io $ set enum [ on select := do sel <- get enum selection last <- varGet lastSelection when (sel /= last) (getSelection enum >>= (testInputParm' parms) SetOnReject) ] return comH getSelection enum = do sel <- get enum selection return (itemValues !! sel) setSelection enum lastSelection x = maybe (return()) (\i -> set enum [ selection := i] >> varSet lastSelection i ) (List.findIndex (== True) $ (map (\f -> f x) isItems)) (itemNames, itemValues, isItems) = unzip3 items -}