module Graphics.UI.Gtk.Reactive.TreeView where

import Control.Monad.IO.Class (liftIO)
import Control.Monad (void)
import Data.ReactiveValue
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Helpers.TreeView

-- treeViewSelectedRowsReactive :: TreeView -> ReactiveFieldRead IO [TreePath]
-- treeViewSelectedRowsReactive tv = ReactiveFieldRead getter notifier
--  where getter = treeSelectionGetSelectedRows =<< treeViewGetSelection tv
--        notifier p = void (tv `on` cursorChanged $ liftIO p)

treeViewSelectedRowsReactive :: TreeView -> ReactiveFieldRead IO [TreePath]
treeViewSelectedRowsReactive tv = ReactiveFieldRead getter notifier
 where getter = treeViewGetSelectedPath tv
       notifier p = void (tv `on` cursorChanged $ liftIO p)

treeViewGetSelectedReactive :: TreeView -> ListStore a -> ReactiveFieldRead IO (Maybe a)
treeViewGetSelectedReactive tv ls = ReactiveFieldRead getter notifier
 where getter = treeViewGetSelected tv ls
       notifier p = void (tv `on` cursorChanged $ liftIO p)