module Main where
import Graphics.QML
import Control.Concurrent
import Control.Exception
import Data.IORef
import Data.Text (Text)
import qualified Data.Text as T
import Text.Read (readMaybe)
import Paths_hsqml_demo_samples
main :: IO ()
main = do
state <- newIORef $ T.pack ""
skey <- newSignalKey
clazz <- newClass [
defPropertySigRO' "result" skey (\_ ->
readIORef state),
defMethod' "factorial" (\obj txt -> do
let maybeN = readMaybe (T.unpack txt) :: Maybe Integer
n = case maybeN of
Nothing -> 0
Just n -> n
writeIORef state $ T.pack "Working..."
fireSignal skey obj
forkIO $ do
let out = T.take 1000 . T.pack . show $ product [1..n]
evaluate out
writeIORef state out
fireSignal skey obj
return ())]
ctx <- newObject clazz ()
doc <- getDataFileName "factorial2.qml"
runEngineLoop defaultEngineConfig {
initialDocument = fileDocument doc,
contextObject = Just $ anyObjRef ctx}