{-| Module : Tutorial01_Basics Copyright : (c) 2018 Francisco Vallarino License : BSD-3-Clause (see the LICENSE file) Maintainer : fjvallarino@gmail.com Stability : experimental Portability : non-portable Main module for the '01 - Basics' tutorial. -} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Tutorial01_Basics where import Control.Lens import Data.Text (Text) import Monomer import TextShow import qualified Monomer.Lens as L newtype AppModel = AppModel { _clickCount :: Int } deriving (Eq, Show) data AppEvent = AppInit | AppIncrease deriving (Eq, Show) 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)] main01 :: IO () main01 = do startApp model handleEvent buildUI config where config = [ appWindowTitle "Tutorial 01 - Basics", appWindowIcon "./assets/images/icon.bmp", appTheme darkTheme, appFontDef "Regular" "./assets/fonts/Roboto-Regular.ttf", appInitEvent AppInit ] model = AppModel 0