packages feed

keera-hails-reactive-gtk-0.6.0: src/Graphics/UI/Gtk/Reactive/Entry.hs

{-# LANGUAGE TypeSynonymInstances  #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
-- | Publishes the main elements of an entry as reactive fields
--
-- Copyright   : (C) Keera Studios Ltd, 2013
-- License     : BSD3
-- Maintainer  : support@keera.co.uk
module Graphics.UI.Gtk.Reactive.Entry where

import Data.ReactiveValue
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Reactive.Property

entryTextReactive :: (EditableClass e, EntryClass e) => e -> ReactiveFieldReadWrite IO String
entryTextReactive e = reactiveProperty e editableChanged entryText

-- import Control.Monad (void, when)
-- entryTextReactive :: (EditableClass e, EntryClass e) => e -> ReactiveFieldReadWrite IO String
-- entryTextReactive e = ReactiveFieldReadWrite setter getter notifier
--  where getter     = get e entryText
--        setter v   = postGUIAsync $ do
--                       p <- get e entryText
--                       when (p /= v) $ set e [entryText := v]
--        notifier p = void (on e editableChanged p)

instance ReactiveValueReadWrite Entry String IO where

instance ReactiveValueRead Entry String IO where
 reactiveValueOnCanRead = reactiveValueOnCanRead . entryTextReactive
 reactiveValueRead      = reactiveValueRead . entryTextReactive

instance ReactiveValueWrite Entry String IO where
 reactiveValueWrite = reactiveValueWrite . entryTextReactive