diff options
Diffstat (limited to 'src/Update')
-rw-r--r-- | src/Update/Update.elm | 35 | ||||
-rw-r--r-- | src/Update/UpdateTimer.elm | 18 | ||||
-rw-r--r-- | src/Update/UpdateTimerEdition.elm | 20 |
3 files changed, 69 insertions, 4 deletions
diff --git a/src/Update/Update.elm b/src/Update/Update.elm index fa11921..4725970 100644 --- a/src/Update/Update.elm +++ b/src/Update/Update.elm @@ -8,6 +8,8 @@ import Signal import Dict import Time (Time) import Maybe +import Keyboard (KeyCode) +import Char import Model.Model (..) import Model.Timer (..) @@ -16,6 +18,7 @@ import Model.Id (..) import Model.IdGenerator (..) import Update.UpdateTimer (..) +import Update.UpdateTimerEdition (..) type Action = NoOp @@ -25,6 +28,7 @@ type Action = | RemoveTimer Id | EditTimer Id | ReadOnly + | KeyPressed KeyCode updates : Signal.Channel Action updates = Signal.channel NoOp @@ -46,10 +50,37 @@ update action model = , timers <- substractTimersTime delta model.timers } UpdateTimer id action -> - { model | timers <- Dict.update id (Maybe.map (updateTimer action)) model.timers } + let inEdition = + model.timerEdition + |> Maybe.map (\timerEdition -> timerEdition.id == id) + |> Maybe.withDefault False + in if inEdition + then + model + else + { 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) } + { model + | timerEdition <- Just (newTimerEdition id) + , timers <- Dict.update id (Maybe.map (updateTimer Pause)) model.timers + } ReadOnly -> { model | timerEdition <- Nothing } + KeyPressed keyCode -> + if isEnter keyCode + then + case model.timerEdition of + Just timerEdition -> + { model + | timers <- Dict.update timerEdition.id (Maybe.map (updateTimer (SetTime (toTime timerEdition.numbers)))) model.timers + , timerEdition <- Nothing + } + Nothing -> + { model | timerEdition <- Nothing } + else + { model | timerEdition <- Maybe.map (updateTimerEdition (keyCodeToChar keyCode)) model.timerEdition } + +isEnter : KeyCode -> Bool +isEnter = (==) 107 diff --git a/src/Update/UpdateTimer.elm b/src/Update/UpdateTimer.elm index 3eba549..e4671d9 100644 --- a/src/Update/UpdateTimer.elm +++ b/src/Update/UpdateTimer.elm @@ -3,26 +3,40 @@ module Update.UpdateTimer , updateTimer ) where +import Time (Time) + import Model.Timer (..) import Model.Id (..) type TimerAction = Restart + | Pause | ToggleRunning | Stop + | SetTime Time updateTimer : TimerAction -> Timer -> Timer updateTimer action timer = case action of - ToggleRunning -> - { timer | isRunning <- timer.currentTime > 0.0 && not timer.isRunning } Restart -> { timer | isRunning <- True , currentTime <- initTime timer.initialTime } + Pause -> + { timer + | isRunning <- False + } + ToggleRunning -> + { timer | isRunning <- timer.currentTime > 0.0 && not timer.isRunning } Stop -> { timer | isRunning <- False , currentTime <- initTime timer.initialTime } + SetTime time -> + let augmentedTime = time + 999 + in { timer + | initialTime <- augmentedTime + , currentTime <- augmentedTime + } diff --git a/src/Update/UpdateTimerEdition.elm b/src/Update/UpdateTimerEdition.elm new file mode 100644 index 0000000..da12ed0 --- /dev/null +++ b/src/Update/UpdateTimerEdition.elm @@ -0,0 +1,20 @@ +module Update.UpdateTimerEdition + ( updateTimerEdition + ) where + +import Char (..) +import Debug + +import Model.TimerEdition (..) + +updateTimerEdition : Maybe Char -> TimerEdition -> TimerEdition +updateTimerEdition maybeChar timerEdition = + case maybeChar of + Just char -> + if isDigit char + then + { timerEdition | numbers <- char :: timerEdition.numbers } + else + timerEdition + Nothing -> + timerEdition |