content: {-# 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
  