{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MonoLocalBinds #-}
module Data.GI.Gtk.ModelView.TreeModel (
module Export,
ColumnId,
makeColumnIdInt,
makeColumnIdBool,
makeColumnIdString,
makeColumnIdPixbuf,
invalidColumnId,
columnIdToNumber,
stringToTreePath,
treeModelGetValue,
treeModelGetIter
) where
import Prelude ()
import Prelude.Compat
import Data.Int (Int32)
import Data.Text (Text)
import Data.GI.Base.GValue (fromGValue, get_object)
import Data.GI.Base.ManagedPtr (newObject)
import Foreign.Ptr (Ptr)
import GI.GdkPixbuf.Objects.Pixbuf (Pixbuf(..))
import GI.Gtk.Structs.TreeIter (TreeIter)
import GI.Gtk.Interfaces.TreeModel as Export hiding (treeModelGetValue, treeModelGetIter)
import qualified GI.Gtk.Interfaces.TreeModel as GI (treeModelGetValue, treeModelGetIter)
import Data.GI.Gtk.ModelView.Types (stringToTreePath,
ColumnId(..),
ColumnAccess(..))
import Control.Monad.IO.Class (MonadIO)
import GI.Gtk.Structs.TreePath (treePathGetDepth, TreePath(..))
import Data.Maybe (fromJust)
makeColumnIdInt :: Int32 -> ColumnId row Int32
makeColumnIdInt :: Int32 -> ColumnId row Int32
makeColumnIdInt = (GValue -> IO Int32)
-> ((row -> Int32) -> ColumnAccess row)
-> Int32
-> ColumnId row Int32
forall row ty.
(GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
ColumnId GValue -> IO Int32
forall a. IsGValue a => GValue -> IO a
fromGValue (row -> Int32) -> ColumnAccess row
forall row. (row -> Int32) -> ColumnAccess row
CAInt
makeColumnIdBool :: Int32 -> ColumnId row Bool
makeColumnIdBool :: Int32 -> ColumnId row Bool
makeColumnIdBool = (GValue -> IO Bool)
-> ((row -> Bool) -> ColumnAccess row)
-> Int32
-> ColumnId row Bool
forall row ty.
(GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
ColumnId GValue -> IO Bool
forall a. IsGValue a => GValue -> IO a
fromGValue (row -> Bool) -> ColumnAccess row
forall row. (row -> Bool) -> ColumnAccess row
CABool
makeColumnIdString :: Int32 -> ColumnId row Text
makeColumnIdString :: Int32 -> ColumnId row Text
makeColumnIdString = (GValue -> IO Text)
-> ((row -> Text) -> ColumnAccess row)
-> Int32
-> ColumnId row Text
forall row ty.
(GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
ColumnId (\v :: GValue
v -> Maybe Text -> Text
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe Text -> Text) -> IO (Maybe Text) -> IO Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> GValue -> IO (Maybe Text)
forall a. IsGValue a => GValue -> IO a
fromGValue GValue
v) (row -> Text) -> ColumnAccess row
forall row. (row -> Text) -> ColumnAccess row
CAString
makeColumnIdPixbuf :: Int32 -> ColumnId row Pixbuf
makeColumnIdPixbuf :: Int32 -> ColumnId row Pixbuf
makeColumnIdPixbuf = (GValue -> IO Pixbuf)
-> ((row -> Pixbuf) -> ColumnAccess row)
-> Int32
-> ColumnId row Pixbuf
forall row ty.
(GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
ColumnId (\v :: GValue
v -> (GValue -> IO (Ptr Pixbuf)
forall b. GObject b => GValue -> IO (Ptr b)
get_object GValue
v :: IO (Ptr Pixbuf)) IO (Ptr Pixbuf) -> (Ptr Pixbuf -> IO Pixbuf) -> IO Pixbuf
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ManagedPtr Pixbuf -> Pixbuf) -> Ptr Pixbuf -> IO Pixbuf
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Pixbuf -> Pixbuf
Pixbuf) (row -> Pixbuf) -> ColumnAccess row
forall row. (row -> Pixbuf) -> ColumnAccess row
CAPixbuf
columnIdToNumber :: ColumnId row ty -> Int32
columnIdToNumber :: ColumnId row ty -> Int32
columnIdToNumber (ColumnId _ _ i :: Int32
i) = Int32
i
invalidColumnId :: ColumnId row ty
invalidColumnId :: ColumnId row ty
invalidColumnId = (GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
forall row ty.
(GValue -> IO ty)
-> ((row -> ty) -> ColumnAccess row) -> Int32 -> ColumnId row ty
ColumnId ([Char] -> GValue -> IO ty
forall a. HasCallStack => [Char] -> a
error "invalidColumnId: no GValue extractor")
([Char] -> (row -> ty) -> ColumnAccess row
forall a. HasCallStack => [Char] -> a
error "invalidColumnId: no access type") (-1)
instance Eq (ColumnId row ty) where
(ColumnId _ _ i1 :: Int32
i1) == :: ColumnId row ty -> ColumnId row ty -> Bool
== (ColumnId _ _ i2 :: Int32
i2) = Int32
i1Int32 -> Int32 -> Bool
forall a. Eq a => a -> a -> Bool
==Int32
i2
instance Show (ColumnId row ty) where
show :: ColumnId row ty -> [Char]
show (ColumnId _ _ i :: Int32
i) = Int32 -> [Char]
forall a. Show a => a -> [Char]
show Int32
i
treeModelGetValue :: IsTreeModel self => self
-> TreeIter
-> ColumnId row ty
-> IO ty
treeModelGetValue :: self -> TreeIter -> ColumnId row ty -> IO ty
treeModelGetValue self :: self
self iter :: TreeIter
iter (ColumnId getter :: GValue -> IO ty
getter _ colId :: Int32
colId) =
self -> TreeIter -> Int32 -> IO GValue
forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsTreeModel a) =>
a -> TreeIter -> Int32 -> m GValue
GI.treeModelGetValue self
self TreeIter
iter Int32
colId IO GValue -> (GValue -> IO ty) -> IO ty
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= GValue -> IO ty
getter
treeModelGetIter :: (MonadIO m, IsTreeModel model) => model -> TreePath -> m (Maybe TreeIter)
treeModelGetIter :: model -> TreePath -> m (Maybe TreeIter)
treeModelGetIter model :: model
model path :: TreePath
path =
TreePath -> m Int32
forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
TreePath -> m Int32
treePathGetDepth TreePath
path m Int32 -> (Int32 -> m (Maybe TreeIter)) -> m (Maybe TreeIter)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
0 -> Maybe TreeIter -> m (Maybe TreeIter)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe TreeIter
forall a. Maybe a
Nothing
_ -> model -> TreePath -> m (Bool, TreeIter)
forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsTreeModel a) =>
a -> TreePath -> m (Bool, TreeIter)
GI.treeModelGetIter model
model TreePath
path m (Bool, TreeIter)
-> ((Bool, TreeIter) -> m (Maybe TreeIter)) -> m (Maybe TreeIter)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
(True, iter :: TreeIter
iter) -> Maybe TreeIter -> m (Maybe TreeIter)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe TreeIter -> m (Maybe TreeIter))
-> Maybe TreeIter -> m (Maybe TreeIter)
forall a b. (a -> b) -> a -> b
$ TreeIter -> Maybe TreeIter
forall a. a -> Maybe a
Just TreeIter
iter
_ -> Maybe TreeIter -> m (Maybe TreeIter)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe TreeIter
forall a. Maybe a
Nothing