{-# LINE 2 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
{-# LANGUAGE Rank2Types #-}
{-# LINE 3 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
module Graphics.UI.Gtk.ModelView.TreeModel (
TreeModel,
TreeModelClass,
castToTreeModel, gTypeTreeModel,
toTreeModel,
TypedTreeModel,
TypedTreeModelClass,
toTypedTreeModel,
TreeIter(..),
TreePath,
ColumnId,
makeColumnIdInt,
makeColumnIdBool,
makeColumnIdString,
makeColumnIdPixbuf,
invalidColumnId,
columnIdToNumber,
stringToTreePath,
treeModelGetFlags,
treeModelGetIter,
treeModelGetIterFromString,
treeModelGetIterFirst,
treeModelGetPath,
treeModelGetValue,
treeModelIterNext,
treeModelIterChildren,
treeModelIterHasChild,
treeModelIterNChildren,
treeModelIterNthChild,
treeModelIterParent,
treeModelForeach,
treeModelGetStringFromIter,
treeModelRefNode,
treeModelUnrefNode,
treeModelRowChanged,
treeModelRowInserted,
treeModelRowHasChildToggled,
treeModelRowDeleted,
treeModelRowsReordered,
rowChanged,
rowInserted,
rowHasChildToggled,
rowDeleted,
rowsReordered,
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.Flags (toFlags)
import System.Glib.UTFString
import Graphics.UI.Gtk.Signals
{-# LINE 164 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
import Graphics.UI.Gtk.Types
{-# LINE 165 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
import System.Glib.GValue (GValue(GValue), allocaGValue)
import Graphics.UI.Gtk.ModelView.CustomStore (TreeModelFlags(..))
import Graphics.UI.Gtk.ModelView.Types (TypedTreeModel,
TypedTreeModelClass,
toTypedTreeModel,
TreeIter(..),
receiveTreeIter,
peekTreeIter,
TreePath,
NativeTreePath(..),
withTreePath,
fromTreePath,
peekTreePath,
stringToTreePath,
ColumnId(..),
ColumnAccess(..))
import System.Glib.GValueTypes ( valueGetInt, valueGetBool,
valueGetString, valueGetGObject )
{-# LINE 184 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
makeColumnIdInt :: Int -> ColumnId row Int
makeColumnIdInt = ColumnId valueGetInt CAInt
makeColumnIdBool :: Int -> ColumnId row Bool
makeColumnIdBool = ColumnId valueGetBool CABool
makeColumnIdString :: GlibString string => Int -> ColumnId row string
makeColumnIdString = ColumnId valueGetString CAString
makeColumnIdPixbuf :: Int -> ColumnId row Pixbuf
makeColumnIdPixbuf = ColumnId valueGetGObject CAPixbuf
columnIdToNumber :: ColumnId row ty -> Int
columnIdToNumber (ColumnId _ _ i) = i
invalidColumnId :: ColumnId row ty
invalidColumnId = ColumnId (error "invalidColumnId: no GValue extractor")
(error "invalidColumnId: no access type") (-1)
instance Eq (ColumnId row ty) where
(ColumnId _ _ i1) == (ColumnId _ _ i2) = i1==i2
instance Show (ColumnId row ty) where
show (ColumnId _ _ i) = show i
treeModelGetFlags :: TreeModelClass self => self -> IO [TreeModelFlags]
treeModelGetFlags self =
liftM (toFlags . fromIntegral) $
(\(TreeModel arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_flags argPtr1)
{-# LINE 235 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
treeModelGetIterFromString :: (TreeModelClass self, GlibString string) => self
-> string
-> IO (Maybe TreeIter)
treeModelGetIterFromString self pathString =
receiveTreeIter $ \iterPtr ->
withUTFString pathString $ \pathStringPtr ->
(\(TreeModel arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_iter_from_string argPtr1 arg2 arg3)
{-# LINE 250 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
pathStringPtr
treeModelGetIter :: TreeModelClass self => self
-> TreePath
-> IO (Maybe TreeIter)
treeModelGetIter _ [] = return Nothing
treeModelGetIter self path =
receiveTreeIter $ \iterPtr ->
withTreePath path $ \path ->
(\(TreeModel arg1) arg2 (NativeTreePath arg3) -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_iter argPtr1 arg2 arg3)
{-# LINE 269 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
path
treeModelGetIterFirst :: TreeModelClass self => self
-> IO (Maybe TreeIter)
treeModelGetIterFirst self =
receiveTreeIter $ \iterPtr ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_iter_first argPtr1 arg2)
{-# LINE 283 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
treeModelGetPath :: TreeModelClass self => self
-> TreeIter -> IO TreePath
treeModelGetPath self iter =
with iter $ \iterPtr ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_path argPtr1 arg2)
{-# LINE 296 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
>>= fromTreePath
treeModelGetValue :: TreeModelClass self => self
-> TreeIter
-> ColumnId row ty
-> IO ty
treeModelGetValue self iter (ColumnId getter _ colId) =
allocaGValue $ \gVal ->
with iter $ \iterPtr -> do
(\(TreeModel arg1) arg2 arg3 (GValue arg4) -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_value argPtr1 arg2 arg3 arg4)
{-# LINE 310 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
(fromIntegral colId)
gVal
getter gVal
treeModelIterNext :: TreeModelClass self => self -> TreeIter -> IO (Maybe TreeIter)
treeModelIterNext self iter =
receiveTreeIter $ \iterPtr -> do
poke iterPtr iter
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_next argPtr1 arg2)
{-# LINE 325 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
treeModelIterChildren :: TreeModelClass self => self
-> TreeIter
-> IO (Maybe TreeIter)
treeModelIterChildren self parent =
receiveTreeIter $ \iterPtr ->
with parent $ \parentPtr ->
(\(TreeModel arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_children argPtr1 arg2 arg3)
{-# LINE 339 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
parentPtr
treeModelIterHasChild :: TreeModelClass self => self
-> TreeIter
-> IO Bool
treeModelIterHasChild self iter =
liftM toBool $
with iter $ \iterPtr ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_has_child argPtr1 arg2)
{-# LINE 353 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
treeModelIterNChildren :: TreeModelClass self => self
-> Maybe TreeIter
-> IO Int
treeModelIterNChildren self iter =
liftM fromIntegral $
maybeWith with iter $ \iterPtr ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_n_children argPtr1 arg2)
{-# LINE 367 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
treeModelIterNthChild :: TreeModelClass self => self
-> Maybe TreeIter
-> Int
-> IO (Maybe TreeIter)
treeModelIterNthChild self parent n =
receiveTreeIter $ \iterPtr ->
maybeWith with parent $ \parentPtr ->
(\(TreeModel arg1) arg2 arg3 arg4 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_nth_child argPtr1 arg2 arg3 arg4)
{-# LINE 385 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
parentPtr
(fromIntegral n)
treeModelIterParent :: TreeModelClass self => self
-> TreeIter
-> IO (Maybe TreeIter)
treeModelIterParent self child =
receiveTreeIter $ \iterPtr ->
with child $ \childPtr ->
(\(TreeModel arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_iter_parent argPtr1 arg2 arg3)
{-# LINE 400 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iterPtr
childPtr
treeModelForeach :: TreeModelClass self => self -> (TreeIter -> IO Bool) -> IO ()
treeModelForeach self fun = do
fPtr <- mkTreeModelForeachFunc (\_ _ iterPtr _ -> do
iter <- peek iterPtr
liftM (fromIntegral.fromBool) $ fun iter
)
(\(TreeModel arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_foreach argPtr1 arg2 arg3)
{-# LINE 420 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
fPtr
nullPtr
freeHaskellFunPtr fPtr
type TreeModelForeachFunc = FunPtr (((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> ((Ptr ()) -> (IO CInt))))))
{-# LINE 426 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
foreign import ccall "wrapper" mkTreeModelForeachFunc ::
(Ptr TreeModel -> Ptr NativeTreePath -> Ptr TreeIter -> Ptr () -> IO CInt) ->
IO TreeModelForeachFunc
treeModelGetStringFromIter :: (TreeModelClass self, GlibString string) => self
-> TreeIter
-> IO string
treeModelGetStringFromIter self iter = with iter $ \iter ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_get_string_from_iter argPtr1 arg2)
{-# LINE 444 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iter
>>= readUTFString
treeModelRefNode :: TreeModelClass self => self
-> TreeIter
-> IO ()
treeModelRefNode self iter = with iter $ \iter ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_ref_node argPtr1 arg2)
{-# LINE 468 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iter
treeModelUnrefNode :: TreeModelClass self => self
-> TreeIter
-> IO ()
treeModelUnrefNode self iter = with iter $ \iter ->
(\(TreeModel arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_unref_node argPtr1 arg2)
{-# LINE 484 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
iter
treeModelRowChanged :: TreeModelClass self => self
-> TreePath
-> TreeIter
-> IO ()
treeModelRowChanged self path iter =
with iter $ \iter ->
withTreePath path $ \path ->
(\(TreeModel arg1) (NativeTreePath arg2) arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_row_changed argPtr1 arg2 arg3)
{-# LINE 503 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
path
iter
treeModelRowInserted :: TreeModelClass self => self
-> TreePath
-> TreeIter
-> IO ()
treeModelRowInserted self path iter =
with iter $ \iter ->
withTreePath path $ \path ->
(\(TreeModel arg1) (NativeTreePath arg2) arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_row_inserted argPtr1 arg2 arg3)
{-# LINE 523 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
path
iter
treeModelRowHasChildToggled :: TreeModelClass self => self
-> TreePath
-> TreeIter
-> IO ()
treeModelRowHasChildToggled self path iter =
with iter $ \iter ->
withTreePath path $ \path ->
(\(TreeModel arg1) (NativeTreePath arg2) arg3 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_row_has_child_toggled argPtr1 arg2 arg3)
{-# LINE 544 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
path
iter
treeModelRowDeleted :: TreeModelClass self => self
-> TreePath
-> IO ()
treeModelRowDeleted self path =
withTreePath path $ \path ->
(\(TreeModel arg1) (NativeTreePath arg2) -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_row_deleted argPtr1 arg2)
{-# LINE 566 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
path
treeModelRowsReordered :: TreeModelClass self => self
-> TreePath
-> Maybe TreeIter
-> [Int]
-> IO ()
treeModelRowsReordered self path iter array = do
n <- treeModelIterNChildren self iter
let l = length array
if n/=l then error ("treeModelRowsReordered: passed-in array is of size "
++show l++" but there are "++show n++
" children at path "++show path) else
withTreePath path $ \path ->
maybeWith with iter $ \iter ->
withArray (map fromIntegral array) $ \newOrderPtr ->
(\(TreeModel arg1) (NativeTreePath arg2) arg3 arg4 -> withForeignPtr arg1 $ \argPtr1 ->gtk_tree_model_rows_reordered argPtr1 arg2 arg3 arg4)
{-# LINE 599 "./Graphics/UI/Gtk/ModelView/TreeModel.chs" #-}
(toTreeModel self)
path
iter
newOrderPtr
rowChanged :: TreeModelClass self => Signal self (TreePath -> TreeIter -> IO ())
rowChanged = Signal (connect_BOXED_BOXED__NONE "row-changed" peekTreePath peekTreeIter)
rowInserted :: TreeModelClass self => Signal self (TreePath -> TreeIter -> IO ())
rowInserted = Signal (connect_BOXED_BOXED__NONE "row-inserted" peekTreePath peekTreeIter)
rowHasChildToggled :: TreeModelClass self => Signal self (TreePath -> TreeIter -> IO ())
rowHasChildToggled = Signal (connect_BOXED_BOXED__NONE "row-has-child-toggled" peekTreePath peekTreeIter)
rowDeleted :: TreeModelClass self => Signal self (TreePath -> IO ())
rowDeleted = Signal (connect_BOXED__NONE "row-deleted" peekTreePath)
rowsReordered :: TreeModelClass self =>
Signal self (TreePath -> Maybe TreeIter -> [Int] -> IO ())
rowsReordered = Signal $ \after model user ->
connect_BOXED_BOXED_PTR__NONE "rows-reordered" peekTreePath
(maybePeek peekTreeIter) after model $ \path iter arrayPtr -> do
n <- treeModelIterNChildren model iter
newOrder <- peekArray n arrayPtr
user path iter (map fromIntegral (newOrder :: [(CInt)]))
foreign import ccall safe "gtk_tree_model_get_flags"
gtk_tree_model_get_flags :: ((Ptr TreeModel) -> (IO CInt))
foreign import ccall safe "gtk_tree_model_get_iter_from_string"
gtk_tree_model_get_iter_from_string :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> ((Ptr CChar) -> (IO CInt))))
foreign import ccall safe "gtk_tree_model_get_iter"
gtk_tree_model_get_iter :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> ((Ptr NativeTreePath) -> (IO CInt))))
foreign import ccall safe "gtk_tree_model_get_iter_first"
gtk_tree_model_get_iter_first :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO CInt)))
foreign import ccall safe "gtk_tree_model_get_path"
gtk_tree_model_get_path :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO (Ptr NativeTreePath))))
foreign import ccall safe "gtk_tree_model_get_value"
gtk_tree_model_get_value :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (CInt -> ((Ptr GValue) -> (IO ())))))
foreign import ccall safe "gtk_tree_model_iter_next"
gtk_tree_model_iter_next :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO CInt)))
foreign import ccall safe "gtk_tree_model_iter_children"
gtk_tree_model_iter_children :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> ((Ptr TreeIter) -> (IO CInt))))
foreign import ccall safe "gtk_tree_model_iter_has_child"
gtk_tree_model_iter_has_child :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO CInt)))
foreign import ccall safe "gtk_tree_model_iter_n_children"
gtk_tree_model_iter_n_children :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO CInt)))
foreign import ccall safe "gtk_tree_model_iter_nth_child"
gtk_tree_model_iter_nth_child :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> ((Ptr TreeIter) -> (CInt -> (IO CInt)))))
foreign import ccall safe "gtk_tree_model_iter_parent"
gtk_tree_model_iter_parent :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> ((Ptr TreeIter) -> (IO CInt))))
foreign import ccall safe "gtk_tree_model_foreach"
gtk_tree_model_foreach :: ((Ptr TreeModel) -> ((FunPtr ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> ((Ptr ()) -> (IO CInt)))))) -> ((Ptr ()) -> (IO ()))))
foreign import ccall safe "gtk_tree_model_get_string_from_iter"
gtk_tree_model_get_string_from_iter :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO (Ptr CChar))))
foreign import ccall safe "gtk_tree_model_ref_node"
gtk_tree_model_ref_node :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO ())))
foreign import ccall safe "gtk_tree_model_unref_node"
gtk_tree_model_unref_node :: ((Ptr TreeModel) -> ((Ptr TreeIter) -> (IO ())))
foreign import ccall safe "gtk_tree_model_row_changed"
gtk_tree_model_row_changed :: ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> (IO ()))))
foreign import ccall safe "gtk_tree_model_row_inserted"
gtk_tree_model_row_inserted :: ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> (IO ()))))
foreign import ccall safe "gtk_tree_model_row_has_child_toggled"
gtk_tree_model_row_has_child_toggled :: ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> (IO ()))))
foreign import ccall safe "gtk_tree_model_row_deleted"
gtk_tree_model_row_deleted :: ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> (IO ())))
foreign import ccall safe "gtk_tree_model_rows_reordered"
gtk_tree_model_rows_reordered :: ((Ptr TreeModel) -> ((Ptr NativeTreePath) -> ((Ptr TreeIter) -> ((Ptr CInt) -> (IO ())))))