{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) -} module GI.Gtk.Objects.TreeStore ( -- * Exported types TreeStore(..) , TreeStoreK , toTreeStore , noTreeStore , -- * Methods -- ** treeStoreAppend treeStoreAppend , -- ** treeStoreClear treeStoreClear , -- ** treeStoreInsert treeStoreInsert , -- ** treeStoreInsertAfter treeStoreInsertAfter , -- ** treeStoreInsertBefore treeStoreInsertBefore , -- ** treeStoreInsertWithValues treeStoreInsertWithValues , -- ** treeStoreIsAncestor treeStoreIsAncestor , -- ** treeStoreIterDepth treeStoreIterDepth , -- ** treeStoreIterIsValid treeStoreIterIsValid , -- ** treeStoreMoveAfter treeStoreMoveAfter , -- ** treeStoreMoveBefore treeStoreMoveBefore , -- ** treeStoreNew treeStoreNew , -- ** treeStorePrepend treeStorePrepend , -- ** treeStoreRemove treeStoreRemove , -- ** treeStoreSet treeStoreSet , -- ** treeStoreSetColumnTypes treeStoreSetColumnTypes , -- ** treeStoreSetValue treeStoreSetValue , -- ** treeStoreSwap treeStoreSwap , ) where import Prelude () import Data.GI.Base.ShortPrelude import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import GI.Gtk.Types import GI.Gtk.Callbacks import qualified GI.GObject as GObject newtype TreeStore = TreeStore (ForeignPtr TreeStore) foreign import ccall "gtk_tree_store_get_type" c_gtk_tree_store_get_type :: IO GType type instance ParentTypes TreeStore = TreeStoreParentTypes type TreeStoreParentTypes = '[GObject.Object, Buildable, TreeDragDest, TreeDragSource, TreeModel, TreeSortable] instance GObject TreeStore where gobjectIsInitiallyUnowned _ = False gobjectType _ = c_gtk_tree_store_get_type class GObject o => TreeStoreK o instance (GObject o, IsDescendantOf TreeStore o) => TreeStoreK o toTreeStore :: TreeStoreK o => o -> IO TreeStore toTreeStore = unsafeCastTo TreeStore noTreeStore :: Maybe TreeStore noTreeStore = Nothing type instance AttributeList TreeStore = TreeStoreAttributeList type TreeStoreAttributeList = ('[ ] :: [(Symbol, *)]) type instance SignalList TreeStore = TreeStoreSignalList type TreeStoreSignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo), '("row-changed", TreeModelRowChangedSignalInfo), '("row-deleted", TreeModelRowDeletedSignalInfo), '("row-has-child-toggled", TreeModelRowHasChildToggledSignalInfo), '("row-inserted", TreeModelRowInsertedSignalInfo), '("sort-column-changed", TreeSortableSortColumnChangedSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)]) -- method TreeStore::new -- method type : Constructor -- Args : [Arg {argName = "n_columns", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "types", argType = TCArray False (-1) 0 (TBasicType TGType), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [Arg {argName = "n_columns", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- hInArgs : [Arg {argName = "types", argType = TCArray False (-1) 0 (TBasicType TGType), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TInterface "Gtk" "TreeStore" -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_newv" gtk_tree_store_newv :: Int32 -> -- n_columns : TBasicType TInt32 Ptr CGType -> -- types : TCArray False (-1) 0 (TBasicType TGType) IO (Ptr TreeStore) treeStoreNew :: (MonadIO m) => [GType] -> -- types m TreeStore treeStoreNew types = liftIO $ do let n_columns = fromIntegral $ length types types' <- (packMapStorableArray gtypeToCGType) types result <- gtk_tree_store_newv n_columns types' checkUnexpectedReturnNULL "gtk_tree_store_newv" result result' <- (wrapObject TreeStore) result freeMem types' return result' -- method TreeStore::append -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_append" gtk_tree_store_append :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" IO () treeStoreAppend :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent m (TreeIter) treeStoreAppend _obj parent = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' gtk_tree_store_append _obj' iter maybeParent iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr return iter' -- method TreeStore::clear -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_clear" gtk_tree_store_clear :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" IO () treeStoreClear :: (MonadIO m, TreeStoreK a) => a -> -- _obj m () treeStoreClear _obj = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj gtk_tree_store_clear _obj' touchManagedPtr _obj return () -- method TreeStore::insert -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_insert" gtk_tree_store_insert :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" Int32 -> -- position : TBasicType TInt32 IO () treeStoreInsert :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent Int32 -> -- position m (TreeIter) treeStoreInsert _obj parent position = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' gtk_tree_store_insert _obj' iter maybeParent position iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr return iter' -- method TreeStore::insert_after -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "sibling", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "sibling", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_insert_after" gtk_tree_store_insert_after :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- sibling : TInterface "Gtk" "TreeIter" IO () treeStoreInsertAfter :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent Maybe (TreeIter) -> -- sibling m (TreeIter) treeStoreInsertAfter _obj parent sibling = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' maybeSibling <- case sibling of Nothing -> return nullPtr Just jSibling -> do let jSibling' = unsafeManagedPtrGetPtr jSibling return jSibling' gtk_tree_store_insert_after _obj' iter maybeParent maybeSibling iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr whenJust sibling touchManagedPtr return iter' -- method TreeStore::insert_before -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "sibling", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "sibling", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_insert_before" gtk_tree_store_insert_before :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- sibling : TInterface "Gtk" "TreeIter" IO () treeStoreInsertBefore :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent Maybe (TreeIter) -> -- sibling m (TreeIter) treeStoreInsertBefore _obj parent sibling = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' maybeSibling <- case sibling of Nothing -> return nullPtr Just jSibling -> do let jSibling' = unsafeManagedPtrGetPtr jSibling return jSibling' gtk_tree_store_insert_before _obj' iter maybeParent maybeSibling iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr whenJust sibling touchManagedPtr return iter' -- method TreeStore::insert_with_values -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "columns", argType = TCArray False (-1) 6 (TBasicType TInt32), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "values", argType = TCArray False (-1) 6 (TInterface "GObject" "Value"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "columns", argType = TCArray False (-1) 6 (TBasicType TInt32), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "values", argType = TCArray False (-1) 6 (TInterface "GObject" "Value"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_insert_with_valuesv" gtk_tree_store_insert_with_valuesv :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" Int32 -> -- position : TBasicType TInt32 Ptr Int32 -> -- columns : TCArray False (-1) 6 (TBasicType TInt32) Ptr GValue -> -- values : TCArray False (-1) 6 (TInterface "GObject" "Value") Int32 -> -- n_values : TBasicType TInt32 IO () treeStoreInsertWithValues :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent Int32 -> -- position [Int32] -> -- columns [GValue] -> -- values m (TreeIter) treeStoreInsertWithValues _obj parent position columns values = liftIO $ do let n_values = fromIntegral $ length values let columns_expected_length_ = fromIntegral $ length columns when (columns_expected_length_ /= n_values) $ error "Gtk.treeStoreInsertWithValues : length of 'columns' does not agree with that of 'values'." let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' columns' <- packStorableArray columns let values' = map unsafeManagedPtrGetPtr values values'' <- packBlockArray 24 values' gtk_tree_store_insert_with_valuesv _obj' iter maybeParent position columns' values'' n_values iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr mapM_ touchManagedPtr values freeMem columns' freeMem values'' return iter' -- method TreeStore::is_ancestor -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "descendant", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "descendant", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_is_ancestor" gtk_tree_store_is_ancestor :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- descendant : TInterface "Gtk" "TreeIter" IO CInt treeStoreIsAncestor :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter TreeIter -> -- descendant m Bool treeStoreIsAncestor _obj iter descendant = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter let descendant' = unsafeManagedPtrGetPtr descendant result <- gtk_tree_store_is_ancestor _obj' iter' descendant' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr iter touchManagedPtr descendant return result' -- method TreeStore::iter_depth -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TInt32 -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_iter_depth" gtk_tree_store_iter_depth :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" IO Int32 treeStoreIterDepth :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter m Int32 treeStoreIterDepth _obj iter = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter result <- gtk_tree_store_iter_depth _obj' iter' touchManagedPtr _obj touchManagedPtr iter return result -- method TreeStore::iter_is_valid -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_iter_is_valid" gtk_tree_store_iter_is_valid :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" IO CInt treeStoreIterIsValid :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter m Bool treeStoreIterIsValid _obj iter = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter result <- gtk_tree_store_iter_is_valid _obj' iter' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr iter return result' -- method TreeStore::move_after -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_move_after" gtk_tree_store_move_after :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- position : TInterface "Gtk" "TreeIter" IO () treeStoreMoveAfter :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter Maybe (TreeIter) -> -- position m () treeStoreMoveAfter _obj iter position = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter maybePosition <- case position of Nothing -> return nullPtr Just jPosition -> do let jPosition' = unsafeManagedPtrGetPtr jPosition return jPosition' gtk_tree_store_move_after _obj' iter' maybePosition touchManagedPtr _obj touchManagedPtr iter whenJust position touchManagedPtr return () -- method TreeStore::move_before -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_move_before" gtk_tree_store_move_before :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- position : TInterface "Gtk" "TreeIter" IO () treeStoreMoveBefore :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter Maybe (TreeIter) -> -- position m () treeStoreMoveBefore _obj iter position = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter maybePosition <- case position of Nothing -> return nullPtr Just jPosition -> do let jPosition' = unsafeManagedPtrGetPtr jPosition return jPosition' gtk_tree_store_move_before _obj' iter' maybePosition touchManagedPtr _obj touchManagedPtr iter whenJust position touchManagedPtr return () -- method TreeStore::prepend -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "parent", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_prepend" gtk_tree_store_prepend :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- parent : TInterface "Gtk" "TreeIter" IO () treeStorePrepend :: (MonadIO m, TreeStoreK a) => a -> -- _obj Maybe (TreeIter) -> -- parent m (TreeIter) treeStorePrepend _obj parent = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter) maybeParent <- case parent of Nothing -> return nullPtr Just jParent -> do let jParent' = unsafeManagedPtrGetPtr jParent return jParent' gtk_tree_store_prepend _obj' iter maybeParent iter' <- (wrapBoxed TreeIter) iter touchManagedPtr _obj whenJust parent touchManagedPtr return iter' -- method TreeStore::remove -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_remove" gtk_tree_store_remove :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" IO CInt treeStoreRemove :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter m Bool treeStoreRemove _obj iter = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter result <- gtk_tree_store_remove _obj' iter' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr iter return result' -- method TreeStore::set_column_types -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "n_columns", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "types", argType = TCArray False (-1) 1 (TBasicType TGType), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [Arg {argName = "n_columns", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "types", argType = TCArray False (-1) 1 (TBasicType TGType), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_set_column_types" gtk_tree_store_set_column_types :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Int32 -> -- n_columns : TBasicType TInt32 Ptr CGType -> -- types : TCArray False (-1) 1 (TBasicType TGType) IO () treeStoreSetColumnTypes :: (MonadIO m, TreeStoreK a) => a -> -- _obj [GType] -> -- types m () treeStoreSetColumnTypes _obj types = liftIO $ do let n_columns = fromIntegral $ length types let _obj' = unsafeManagedPtrCastPtr _obj types' <- (packMapStorableArray gtypeToCGType) types gtk_tree_store_set_column_types _obj' n_columns types' touchManagedPtr _obj freeMem types' return () -- method TreeStore::set_value -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "column", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "value", argType = TInterface "GObject" "Value", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "column", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "value", argType = TInterface "GObject" "Value", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_set_value" gtk_tree_store_set_value :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Int32 -> -- column : TBasicType TInt32 Ptr GValue -> -- value : TInterface "GObject" "Value" IO () treeStoreSetValue :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter Int32 -> -- column GValue -> -- value m () treeStoreSetValue _obj iter column value = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter let value' = unsafeManagedPtrGetPtr value gtk_tree_store_set_value _obj' iter' column value' touchManagedPtr _obj touchManagedPtr iter touchManagedPtr value return () -- method TreeStore::set -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "columns", argType = TCArray False (-1) 4 (TBasicType TInt32), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "values", argType = TCArray False (-1) 4 (TInterface "GObject" "Value"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "n_values", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "columns", argType = TCArray False (-1) 4 (TBasicType TInt32), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "values", argType = TCArray False (-1) 4 (TInterface "GObject" "Value"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_set_valuesv" gtk_tree_store_set_valuesv :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- iter : TInterface "Gtk" "TreeIter" Ptr Int32 -> -- columns : TCArray False (-1) 4 (TBasicType TInt32) Ptr GValue -> -- values : TCArray False (-1) 4 (TInterface "GObject" "Value") Int32 -> -- n_values : TBasicType TInt32 IO () treeStoreSet :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- iter [Int32] -> -- columns [GValue] -> -- values m () treeStoreSet _obj iter columns values = liftIO $ do let n_values = fromIntegral $ length values let columns_expected_length_ = fromIntegral $ length columns when (columns_expected_length_ /= n_values) $ error "Gtk.treeStoreSet : length of 'columns' does not agree with that of 'values'." let _obj' = unsafeManagedPtrCastPtr _obj let iter' = unsafeManagedPtrGetPtr iter columns' <- packStorableArray columns let values' = map unsafeManagedPtrGetPtr values values'' <- packBlockArray 24 values' gtk_tree_store_set_valuesv _obj' iter' columns' values'' n_values touchManagedPtr _obj touchManagedPtr iter mapM_ touchManagedPtr values freeMem columns' freeMem values'' return () -- method TreeStore::swap -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "a", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "b", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeStore", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "a", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "b", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gtk_tree_store_swap" gtk_tree_store_swap :: Ptr TreeStore -> -- _obj : TInterface "Gtk" "TreeStore" Ptr TreeIter -> -- a : TInterface "Gtk" "TreeIter" Ptr TreeIter -> -- b : TInterface "Gtk" "TreeIter" IO () treeStoreSwap :: (MonadIO m, TreeStoreK a) => a -> -- _obj TreeIter -> -- a TreeIter -> -- b m () treeStoreSwap _obj a b = liftIO $ do let _obj' = unsafeManagedPtrCastPtr _obj let a' = unsafeManagedPtrGetPtr a let b' = unsafeManagedPtrGetPtr b gtk_tree_store_swap _obj' a' b' touchManagedPtr _obj touchManagedPtr a touchManagedPtr b return ()