gi-gtk-hs- A wrapper for gi-gtk, adding a few more idiomatic API parts on top

Portabilityportable (depends on GHC)
Safe HaskellNone




Allows a custom data structure to be used with the TreeView and other widgets that follow the model-view-controller paradigm. The two models ListStore and TreeStore are based on the CustomStore. Even if no application-specific tree model should be implemented, this module is relevant in that it provides the functions customStoreSetColumn and customStoreGetRow functions.


The definition of a row-based store.

newtype CustomStore private row Source #

A CustomStore is an instance of a Gtk+ TreeModel and can thus be used for any widget that stores data in a TreeModel. The user may either create an instance of a CustomStore or use one of the pre-defined models ListStore or TreeStore.


CustomStore (ManagedPtr (CustomStore private row)) 


GObject (CustomStore private row) Source # 


gobjectType :: CustomStore private row -> IO GType

IsTreeModel (CustomStore private row) Source # 

data TreeModelIface row Source #

The TreeModelIface structure contains all functions that are required to implement an application-specific TreeModel.




data DragSourceIface model row Source #

A structure containing functions that enable this widget to be used as a source in drag-and-drop.




data DragDestIface model row Source #

A structure containing functions that enable this widget to be used as a target in drag-and-drop.




customStoreNew Source #


:: (MonadIO m, IsTreeModel (model row), IsTypedTreeModel model) 
=> private

Any private data the store needs to store. Usually an IORef.

-> (CustomStore private row -> model row) 
-> TreeModelIface row

Functions necessary to implement the TreeModel interface.

-> Maybe (DragSourceIface model row)

Functions to enable this store to generate drag events.

-> Maybe (DragDestIface model row)

Functions to enable this store to receive drag events.

-> m (model row) 

Create a new store that implements the TreeModelIface interface and optionally the DragSourceIface and the DragDestIface. If the latter two are set to Nothing a dummy interface is substituted that rejects every drag and drop.

customStoreGetRow :: (MonadIO m, IsTypedTreeModel model) => model row -> TreeIter -> m row Source #

Extract a row of the given model at the given TreeIter.

customStoreSetColumn Source #


:: (MonadIO m, IsTypedTreeModel model) 
=> model row

the store in which to allocate a new column

-> ColumnId row ty

the column that should be set

-> (row -> ty)

the function that sets the property

-> m () 

Set or update a column mapping. This function should be used before the model is installed into a widget since the number of defined columns are only checked once by widgets.

customStoreGetPrivate :: CustomStore private row -> private Source #

Return the private data stored in this CustomStore. The private data is meant as a container for the data stored in this model.

customStoreGetStamp :: MonadIO m => CustomStore private row -> m Int32 Source #

Query the current value of the stamp that is used to create TreeIter iterators. The stamp is compared each time a view accesses this store. If the stamp doesn't match, a warning is emitted. The stamp should be updated each time a the data in the model changes. The rationale is that a view should never use a stale TreeIter, i.e., one that refers to an old model.

customStoreInvalidateIters :: MonadIO m => CustomStore private row -> m () Source #

Create a new stamp. See customStoreGetStamp.