monomer/app/TestComposite.hs

82 lines
2.0 KiB
Haskell
Raw Normal View History

2021-01-12 20:34:39 +03:00
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
2020-06-08 21:25:52 +03:00
{-# LANGUAGE TemplateHaskell #-}
module TestComposite (testComposite) where
import Debug.Trace
2021-01-12 20:34:39 +03:00
import Codec.Serialise
2020-06-08 21:25:52 +03:00
import Control.Concurrent (threadDelay)
import Control.Lens
2020-06-08 21:25:52 +03:00
import Control.Monad (forM_)
import Data.Default
2021-01-12 20:34:39 +03:00
import GHC.Generics
import TextShow
import Monomer.Core.Combinators
import Monomer.Core.Style
import Monomer.Graphics.Color
2020-10-05 23:10:08 +03:00
import Monomer.Core.WidgetTypes
import Monomer.Core.Util
import Monomer.Widgets
import Types
2020-06-08 21:25:52 +03:00
data CompState = CompState {
_csCounter :: Int,
_csProduced :: Int
2021-01-12 20:34:39 +03:00
} deriving (Show, Eq, Generic, Serialise)
2020-06-08 21:25:52 +03:00
instance Default CompState where
def = CompState 0 0
makeLenses ''CompState
2020-08-05 20:58:50 +03:00
data CompEvent
= InitComposite
| MessageParent
| CallSandbox
| StartTask
| StartProducer
| HandleProducer Int
deriving (Eq, Show)
testComposite :: WidgetNode CompState AppEvent
testComposite = composite "testComposite" id (Just InitComposite) buildComposite handleCompositeEvent
handleCompositeEvent wenv model evt = case evt of
InitComposite -> [Task $ do
2020-06-30 01:50:05 +03:00
threadDelay 1000
putStrLn "Initialized composite"
return Nothing]
MessageParent -> [Report IncreaseMessage]
CallSandbox -> [Event (HandleProducer 20), Task $ return Nothing]
StartTask -> [Task $ do
2020-06-30 01:50:05 +03:00
putStrLn "Composite event handler called"
return Nothing]
StartProducer -> [Producer $ \sendMessage ->
2020-06-08 21:25:52 +03:00
forM_ [1..10] $ \_ -> do
sendMessage (HandleProducer 1)
threadDelay $ 1000 * 1000]
HandleProducer val -> [Model $ model & csProduced %~ (+val)]
buildComposite wenv model = trace "Created composite UI" $
2020-06-12 21:41:37 +03:00
vgrid [
scroll $ label "This is a composite label!",
2020-06-12 21:41:37 +03:00
scroll $ label "This is a composite label again!",
vgrid [
hgrid [
2020-09-22 20:05:46 +03:00
button "Message parent" MessageParent
2020-06-08 21:25:52 +03:00
],
hgrid [
2020-09-22 20:05:46 +03:00
button "Run task" StartTask
],
hgrid [
2020-09-22 20:05:46 +03:00
button "Run Producer" StartProducer,
label ("Produced: " <> showt (_csProduced model))
]
] `style` [bgColor gray]
]