update, alleen nog laatste punt'
[ap2015.git] / a5 / mart / a5.icl
1 module a5
2 /*
3 Mart Lubbers s4109503
4 Charlie Gerhardus s3050009
5 */
6
7 import iTasks
8 import Text // To check string length
9
10 :: Idea = {idea :: String, details :: Maybe Note, user :: Name, number :: Int}
11 :: ProtoIdea = {idea :: String, details :: Maybe Note}
12 :: Name:== String
13
14 derive class iTask Idea, ProtoIdea // generic magic
15
16 ideas :: Shared [Idea]
17 ideas = sharedStore "Ideas" []
18
19 storeIdea :: Name ProtoIdea -> Idea
20 storeIdea n x=:{ProtoIdea | idea,details} =
21 {Idea | user=n, idea=idea, details=details, number=42}
22
23 addNewIdea :: Name -> Task [Idea]
24 addNewIdea name = enterInformation "Add new idea" [EnterWith (storeIdea name)]
25 >>* [OnAction ActionOk (hasValue (\v.return v))]
26 >>= \n.upd (\is.[n:is]) ideas
27
28 viewList = (enterChoiceWithShared "Idea collection" [] ideas)
29 >&^ viewSharedInformation "Selected idea" []
30
31 mainTask = enterInformation "What is your username?" []
32 >>= \name.forever (
33 (addNewIdea name -|| viewList)
34 // >>* [OnAction ActionOk (always (return (get ideas)))]
35 // OnAction (Action "Delete All" [ActionIcon "delete"]) (always (upd (\_.[]) ideas))
36 //// OnAction (Action "Delete" [ActionIcon "delete"]) (always (return Void)),
37 //// OnAction (Action "Like" [ActionIcon "like"]) (always (return Void))
38 // ]
39 )
40
41 Start :: *World -> *World
42 Start world = startEngine mainTask world