module Hbro.Gtk.Entry where
import Hbro.Types
import Hbro.Util
import Control.Monad.Error
import Control.Monad.Reader
import Control.Monad.Trans.Control
import Graphics.UI.Gtk.Abstract.Widget
import Graphics.UI.Gtk.Entry.Editable
import Graphics.UI.Gtk.Entry.Entry
import Graphics.UI.Gtk.Gdk.EventM
import System.Glib.Signals
onEntryValidated :: (MonadIO m, MonadBaseControl IO m, MonadError HError m, MonadReader r m, HasConfig r, HasGUI r, HasPromptBar r, HasOptions r, HasZMQContext r, HasHooks r, EntryClass t) => t -> EntryHook -> m (ConnectId t)
onEntryValidated entry f = liftBaseWith $ \runInIO -> on entry keyPressEvent $ do
key <- eventKeyName
io $ when (key == "Return") $ do
void . runInIO $ (io (entryGetText entry) >>= f) `catchError` \e -> io (print e) >> notify 5000 (show e)
return False
onEntryChanged :: (MonadIO m, MonadBaseControl IO m, MonadError HError m, MonadReader r m, HasConfig r, HasGUI r, HasPromptBar r, HasOptions r, HasZMQContext r, HasHooks r, EditableClass t, EntryClass t) => t -> EntryHook -> m (ConnectId t)
onEntryChanged entry f = liftBaseWith $ \runInIO -> on entry editableChanged $ do
void . runInIO $ (io (entryGetText entry) >>= f) `catchError` \e -> io (print e) >> notify 5000 (show e)