summaryrefslogtreecommitdiff
path: root/assignment-13/uFPL/Sim.icl
diff options
context:
space:
mode:
authorCamil Staps2018-01-06 22:34:14 +0100
committerCamil Staps2018-01-06 22:34:14 +0100
commit1011f38ccf1d16e820ff21c687a99b4d65b00e40 (patch)
treefd2ae838f14bc48dd3de7bc77bc6f4400b66e3b7 /assignment-13/uFPL/Sim.icl
parentWorking simulator with running per second (diff)
Simulator improvements; continue with countdown example
Diffstat (limited to 'assignment-13/uFPL/Sim.icl')
-rw-r--r--assignment-13/uFPL/Sim.icl27
1 files changed, 20 insertions, 7 deletions
diff --git a/assignment-13/uFPL/Sim.icl b/assignment-13/uFPL/Sim.icl
index 0f232fc..7556867 100644
--- a/assignment-13/uFPL/Sim.icl
+++ b/assignment-13/uFPL/Sim.icl
@@ -288,10 +288,13 @@ where
set (unlift (allShares rs)) ishares
sim =
- (updateSharedInformation (Title "Rules") [] irules
- -&&- updateSharedInformation (Title "Shares") [] ishares
+ (updateSharedInformation (Title "Rules")
+ [UpdateUsing id (const id) (listEditor (Just $ const Nothing) True False Nothing gEditor{|*|})] irules
+ -&&-
+ updateSharedInformation (Title "Shares")
+ [UpdateUsing id (const id) (listEditor (Just $ const Nothing) True False Nothing gEditor{|*|})] ishares
) -&&-
- (show -&&- check)
+ (check -&&- show)
<<@ ArrangeHorizontal
newShares :: [INamedRule] IShares -> Task IState
@@ -356,14 +359,24 @@ where
ifOk _ _ = Nothing
buttonActions :: IShares -> [TaskCont String (Task String)]
- buttonActions shrs =
- [action ("Toggle B" <+ i) $ press i \\ i <- [0..5] | any ((==) ("b" <+ i) o isharedName) shrs]
+ buttonActions shrs = flatten
+ [ [ action ("Toggle B" <+ i) $ toggle i
+ , action ("Press B" <+ i) $ press i
+ ] \\ i <- [0..5] | any ((==) ("b" <+ i) o isharedName) shrs]
where
- press :: Int -> Task IState
- press i = get istate >>= lift >>= \st -> case st of
+ toggle :: Int -> Task IState
+ toggle i = get istate >>= lift >>= \st -> case st of
(st :: State) -> set (unlift {st & vars='M'.alter upd ("b" <+ i) st.vars}) istate
with upd (Just s=:{val=v :: Bool}) = Just {s & val=dynamic not v, dirty=s.subscriptions}
+ press :: Int -> Task IState
+ press i = change True >>| step >>| change False
+ with
+ change v = get istate >>= lift >>= \st -> case st of
+ (st :: State) -> set (unlift {st & vars='M'.alter (upd v) ("b" <+ i) st.vars}) istate
+
+ upd v (Just s) = Just {s & val=dynamic v, dirty=s.subscriptions}
+
millisActions :: IShares -> [TaskCont String (Task String)]
millisActions shrs
| any ((==) "millis" o isharedName) shrs =