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
|
2020-06-05 22:53:11 +03:00
|
|
|
|
|
|
|
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)
|
2020-07-08 06:08:35 +03:00
|
|
|
import Control.Lens
|
2020-06-08 21:25:52 +03:00
|
|
|
import Control.Monad (forM_)
|
|
|
|
|
2020-06-05 22:53:11 +03:00
|
|
|
import Data.Default
|
2021-01-12 20:34:39 +03:00
|
|
|
import GHC.Generics
|
2020-06-05 22:53:11 +03:00
|
|
|
import TextShow
|
|
|
|
|
2020-10-05 22:45:42 +03:00
|
|
|
import Monomer.Core.Combinators
|
2020-10-05 21:24:54 +03:00
|
|
|
import Monomer.Core.Style
|
2020-06-05 22:53:11 +03:00
|
|
|
import Monomer.Graphics.Color
|
2020-10-05 23:10:08 +03:00
|
|
|
import Monomer.Core.WidgetTypes
|
2020-10-05 21:24:54 +03:00
|
|
|
import Monomer.Core.Util
|
2020-06-05 22:53:11 +03:00
|
|
|
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)
|
2020-06-05 22:53:11 +03:00
|
|
|
|
2020-12-05 22:47:19 +03:00
|
|
|
testComposite :: WidgetNode CompState AppEvent
|
2020-12-14 17:45:08 +03:00
|
|
|
testComposite = composite "testComposite" id (Just InitComposite) buildComposite handleCompositeEvent
|
2020-06-05 22:53:11 +03:00
|
|
|
|
2020-12-18 06:57:02 +03:00
|
|
|
handleCompositeEvent wenv model evt = case evt of
|
2020-10-22 06:28:46 +03:00
|
|
|
InitComposite -> [Task $ do
|
2020-06-30 01:50:05 +03:00
|
|
|
threadDelay 1000
|
|
|
|
putStrLn "Initialized composite"
|
2020-10-22 06:28:46 +03:00
|
|
|
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"
|
2020-10-22 06:28:46 +03:00
|
|
|
return Nothing]
|
|
|
|
StartProducer -> [Producer $ \sendMessage ->
|
2020-06-08 21:25:52 +03:00
|
|
|
forM_ [1..10] $ \_ -> do
|
|
|
|
sendMessage (HandleProducer 1)
|
2020-10-22 06:28:46 +03:00
|
|
|
threadDelay $ 1000 * 1000]
|
|
|
|
HandleProducer val -> [Model $ model & csProduced %~ (+val)]
|
2020-06-05 22:53:11 +03:00
|
|
|
|
2020-12-14 17:45:08 +03:00
|
|
|
buildComposite wenv model = trace "Created composite UI" $
|
2020-06-12 21:41:37 +03:00
|
|
|
vgrid [
|
2020-06-05 22:53:11 +03:00
|
|
|
scroll $ label "This is a composite label!",
|
2020-06-12 21:41:37 +03:00
|
|
|
scroll $ label "This is a composite label again!",
|
2020-06-05 22:53:11 +03:00
|
|
|
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
|
2020-06-05 22:53:11 +03:00
|
|
|
],
|
|
|
|
hgrid [
|
2020-09-22 20:05:46 +03:00
|
|
|
button "Run Producer" StartProducer,
|
2020-07-16 07:28:04 +03:00
|
|
|
label ("Produced: " <> showt (_csProduced model))
|
2020-06-05 22:53:11 +03:00
|
|
|
]
|
2020-09-29 02:49:17 +03:00
|
|
|
] `style` [bgColor gray]
|
2020-06-05 22:53:11 +03:00
|
|
|
]
|