{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Main (main) where import Control.Lens import Monomer import TextShow import Lib newtype AppModel = AppModel { _clickCount :: Int } deriving (Eq, Show) data AppEvent = AppInit | AppIncrease deriving (Show, Eq) makeLenses 'AppModel buildUI :: WidgetEnv AppModel AppEvent -> AppModel -> WidgetNode AppModel AppEvent buildUI wenv model = widgetTree where widgetTree = vstack [ label "Hello world", spacer, hstack [ label $ "Click count: " <> showt (model ^. clickCount), spacer, button "Increase count" AppIncrease ] ] `styleBasic` [padding 10] handleEvent :: WidgetEnv AppModel AppEvent -> WidgetNode AppModel AppEvent -> AppModel -> AppEvent -> [AppEventResponse AppModel AppEvent] handleEvent wenv node model evt = case evt of AppInit -> [] AppIncrease -> [Model (model & clickCount +~ 1)] main :: IO () main = do putStrLn "haskell-clock" t <- curTimeString putStrLn t guiMain guiMain :: IO () guiMain = do startApp model handleEvent buildUI config where config = [ appWindowTitle "Haskell Clock", --appWindowIcon "./assets/images/icon.png", appTheme darkTheme, appFontDef "Regular" "/usr/share/fonts/TTF/FiraCode-Regular.ttf", appInitEvent AppInit ] model = AppModel 0