aboutsummaryrefslogtreecommitdiff
path: root/src/Update/Update.elm
blob: fa11921d130454b64588c0c45e0ea491771815d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module Update.Update
  ( Action(..)
  , updates
  , update
  ) where

import Signal
import Dict
import Time (Time)
import Maybe

import Model.Model (..)
import Model.Timer (..)
import Model.TimerEdition (..)
import Model.Id (..)
import Model.IdGenerator (..)

import Update.UpdateTimer (..)

type Action =
  NoOp
  | AddNewTimer
  | DeltaTime Time
  | UpdateTimer Id TimerAction
  | RemoveTimer Id
  | EditTimer Id
  | ReadOnly

updates : Signal.Channel Action
updates = Signal.channel NoOp

update : Action -> Model -> Model
update action model =
  case action of
    NoOp -> model
    AddNewTimer ->
      let (id, newTimerIdGenerator) = getId model.timerIdGenerator
          timerName = "Timer " ++ (toString id)
      in  { model
          | timers <- Dict.insert id (initialTimer model.currentTime timerName) model.timers
          , timerIdGenerator <- newTimerIdGenerator
          }
    DeltaTime delta ->
      { model
      | currentTime <- model.currentTime + delta
      , timers <- substractTimersTime delta model.timers
      }
    UpdateTimer id action ->
      { model | timers <- Dict.update id (Maybe.map (updateTimer action)) model.timers }
    RemoveTimer id ->
      { model | timers <- Dict.remove id model.timers }
    EditTimer id ->
      { model | timerEdition <- Just (newTimerEdition id) }
    ReadOnly ->
      { model | timerEdition <- Nothing }