split mainLoop up into eventHandler and draw functions

This commit is contained in:
Jonathan Lamothe 2019-08-20 00:18:23 -04:00
parent 72f9d51977
commit 3fab328e17
4 changed files with 76 additions and 2 deletions

View File

@ -22,6 +22,7 @@ description: Please see the README on GitHub at <https://github.com/jlam
dependencies:
- base >= 4.7 && < 5
- aeson >= 1.4.4.0 && < 1.5
- extra >= 1.6.17 && < 1.7
- microlens-th >= 0.4.2.3 && < 0.5
- ncurses >= 0.2.16 && < 0.3
- raw-strings-qq >= 1.1 && < 1.2

View File

@ -21,10 +21,15 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
module Mtlstats (initState, mainLoop) where
import Control.Monad.Trans.State (StateT)
import Control.Monad.Extra (whenM)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.State (StateT, get)
import Data.Maybe (fromJust)
import qualified UI.NCurses as C
import Mtlstats.Events
import Mtlstats.Types
import Mtlstats.UI
-- | Initializes the progran
initState :: C.Curses ProgState
@ -32,4 +37,8 @@ initState = return newProgState
-- | Main program loop
mainLoop :: StateT ProgState C.Curses ()
mainLoop = return ()
mainLoop = do
get >>= lift . draw
w <- lift C.defaultWindow
whenM (lift (fromJust <$> C.getEvent w Nothing) >>= handleEvent)
mainLoop

34
src/Mtlstats/Events.hs Normal file
View File

@ -0,0 +1,34 @@
{- |
mtlstats
Copyright (C) 2019 Rhéal Lamothe
<rheal.lamothe@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-}
module Mtlstats.Events (handleEvent) where
import Control.Monad.Trans.State (StateT)
import qualified UI.NCurses as C
import Mtlstats.Types
-- | Event handler
handleEvent
:: C.Event
-- ^ The even being handled
-> StateT ProgState C.Curses Bool
handleEvent _ = return False

30
src/Mtlstats/UI.hs Normal file
View File

@ -0,0 +1,30 @@
{- |
mtlstats
Copyright (C) 2019 Rhéal Lamothe
<rheal.lamothe@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-}
module Mtlstats.UI (draw) where
import qualified UI.NCurses as C
import Mtlstats.Types
-- | Drawing function
draw :: ProgState -> C.Curses ()
draw _ = return ()