packages feed

titan-1.0.2: src/Hails/Graphics/UI/Gtk/Simplify/ReactiveGtk.hs

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
module Hails.Graphics.UI.Gtk.Simplify.ReactiveGtk where

import Control.Monad (void)
import Control.Monad.Reader (liftIO)

import Graphics.UI.Gtk

import Data.ReactiveValue

menuItemActivateField :: MenuItem -> ReactiveFieldActivatable 
menuItemActivateField m = mkActivatable op
 where op f = void (m `on` menuItemActivate $ liftIO f)

buttonActivateField :: Button -> ReactiveFieldActivatable 
buttonActivateField b = mkActivatable op
 where op f = void (b `onClicked` f)

toolButtonActivateField :: ToolButton -> ReactiveFieldActivatable 
toolButtonActivateField t = mkActivatable op
 where op f = void (t `onToolButtonClicked` f)

instance ReactiveValueActivatable ToolButton where
  defaultActivation = toolButtonActivateField

instance ReactiveValueActivatable Button where
  defaultActivation = buttonActivateField

instance ReactiveValueActivatable MenuItem where
  defaultActivation = menuItemActivateField