<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
<!ENTITY version SYSTEM "version.xml">
]>
<!--ENTITY index-Objects-Grouped SYSTEM "objects_grouped.sgml"-->
<refentry id="GtkListStore">
<refmeta>
<refentrytitle role="top_of_page" id="GtkListStore.top_of_page">GtkListStore</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>GTK Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>GtkListStore</refname>
<refpurpose>A list-like data structure that can be used with the GtkTreeView</refpurpose>
</refnamediv>

<refsynopsisdiv id="GtkListStore.synopsis" role="synopsis">
<title role="synopsis.title">Synopsis</title>

<synopsis>

#include &lt;gtk/gtk.h&gt;

                    <link linkend="GtkListStore-struct">GtkListStore</link>;
<link linkend="GtkListStore">GtkListStore</link> *      <link linkend="gtk-list-store-new">gtk_list_store_new</link>                  (<link linkend="gint">gint</link> n_columns,
                                                         ...);
<link linkend="GtkListStore">GtkListStore</link> *      <link linkend="gtk-list-store-newv">gtk_list_store_newv</link>                 (<link linkend="gint">gint</link> n_columns,
                                                         <link linkend="GType">GType</link> *types);
<link linkend="void">void</link>                <link linkend="gtk-list-store-set-column-types">gtk_list_store_set_column_types</link>     (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="gint">gint</link> n_columns,
                                                         <link linkend="GType">GType</link> *types);
<link linkend="void">void</link>                <link linkend="gtk-list-store-set">gtk_list_store_set</link>                  (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         ...);
<link linkend="void">void</link>                <link linkend="gtk-list-store-set-valist">gtk_list_store_set_valist</link>           (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="va-list">va_list</link> var_args);
<link linkend="void">void</link>                <link linkend="gtk-list-store-set-value">gtk_list_store_set_value</link>            (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> column,
                                                         <link linkend="GValue">GValue</link> *value);
<link linkend="void">void</link>                <link linkend="gtk-list-store-set-valuesv">gtk_list_store_set_valuesv</link>          (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> *columns,
                                                         <link linkend="GValue">GValue</link> *values,
                                                         <link linkend="gint">gint</link> n_values);
<link linkend="gboolean">gboolean</link>            <link linkend="gtk-list-store-remove">gtk_list_store_remove</link>               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);
<link linkend="void">void</link>                <link linkend="gtk-list-store-insert">gtk_list_store_insert</link>               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position);
<link linkend="void">void</link>                <link linkend="gtk-list-store-insert-before">gtk_list_store_insert_before</link>        (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *sibling);
<link linkend="void">void</link>                <link linkend="gtk-list-store-insert-after">gtk_list_store_insert_after</link>         (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *sibling);
<link linkend="void">void</link>                <link linkend="gtk-list-store-insert-with-values">gtk_list_store_insert_with_values</link>   (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position,
                                                         ...);
<link linkend="void">void</link>                <link linkend="gtk-list-store-insert-with-valuesv">gtk_list_store_insert_with_valuesv</link>  (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position,
                                                         <link linkend="gint">gint</link> *columns,
                                                         <link linkend="GValue">GValue</link> *values,
                                                         <link linkend="gint">gint</link> n_values);
<link linkend="void">void</link>                <link linkend="gtk-list-store-prepend">gtk_list_store_prepend</link>              (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);
<link linkend="void">void</link>                <link linkend="gtk-list-store-append">gtk_list_store_append</link>               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);
<link linkend="void">void</link>                <link linkend="gtk-list-store-clear">gtk_list_store_clear</link>                (<link linkend="GtkListStore">GtkListStore</link> *list_store);
<link linkend="gboolean">gboolean</link>            <link linkend="gtk-list-store-iter-is-valid">gtk_list_store_iter_is_valid</link>        (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);
<link linkend="void">void</link>                <link linkend="gtk-list-store-reorder">gtk_list_store_reorder</link>              (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="gint">gint</link> *new_order);
<link linkend="void">void</link>                <link linkend="gtk-list-store-swap">gtk_list_store_swap</link>                 (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *a,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *b);
<link linkend="void">void</link>                <link linkend="gtk-list-store-move-before">gtk_list_store_move_before</link>          (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *position);
<link linkend="void">void</link>                <link linkend="gtk-list-store-move-after">gtk_list_store_move_after</link>           (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *position);
</synopsis>
</refsynopsisdiv>

<refsect1 id="GtkListStore.object-hierarchy" role="object_hierarchy">
<title role="object_hierarchy.title">Object Hierarchy</title>
<synopsis>
  <link linkend="GObject">GObject</link>
   +----GtkListStore
</synopsis>
</refsect1>



<refsect1 id="GtkListStore.implemented-interfaces" role="impl_interfaces">
<title role="impl_interfaces.title">Implemented Interfaces</title>
<para>
GtkListStore implements
 <link linkend="GtkBuildable">GtkBuildable</link>,  <link linkend="GtkTreeDragDest">GtkTreeDragDest</link>,  <link linkend="GtkTreeModel">GtkTreeModel</link>,  <link linkend="GtkTreeDragSource">GtkTreeDragSource</link> and  <link linkend="GtkTreeSortable">GtkTreeSortable</link>.</para>
</refsect1>





<refsect1 id="GtkListStore.description" role="desc">
<title role="desc.title">Description</title>
<para>
The <link linkend="GtkListStore"><type>GtkListStore</type></link> object is a list model for use with a <link linkend="GtkTreeView"><type>GtkTreeView</type></link>
widget.  It implements the <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link> interface, and consequentialy,
can use all of the methods available there.  It also implements the
<link linkend="GtkTreeSortable"><type>GtkTreeSortable</type></link> interface so it can be sorted by the view.
Finally, it also implements the tree <link linkend="gtktreednd">drag and
drop</link> interfaces.
</para>
<para>
The <link linkend="GtkListStore"><type>GtkListStore</type></link> can accept most GObject types as a column type, though
it can't accept all custom types.  Internally, it will keep a copy of
data passed in (such as a string or a boxed pointer).  Columns that
accept <link linkend="GObject"><type>GObject</type></link><!-- -->s are handled a little differently.  The
<link linkend="GtkListStore"><type>GtkListStore</type></link> will keep a reference to the object instead of copying the
value.  As a result, if the object is modified, it is up to the
application writer to call <parameter>gtk_tree_model_row_changed</parameter> to emit the
"row_changed" signal.  This most commonly affects lists with
<link linkend="GdkPixbuf"><type>GdkPixbuf</type></link><!-- -->s stored.
</para>
<example>
<title>Creating a simple list store.</title>
<programlisting>
enum {
  COLUMN_STRING,
  COLUMN_INT,
  COLUMN_BOOLEAN,
  N_COLUMNS
};
{
  GtkListStore *list_store;
  GtkTreePath *path;
  GtkTreeIter iter;
  gint i;
  list_store = gtk_list_store_new (N_COLUMNS,
                                   G_TYPE_STRING,
                                   G_TYPE_INT,
                                   G_TYPE_BOOLEAN);
  for (i = 0; i &lt; 10; i++)
    {
      gchar *some_data;
      some_data = get_some_data (i);
      /* Add a new row to the model */
      gtk_list_store_append (list_store, &amp;iter);
      gtk_list_store_set (list_store, &amp;iter,
                          COLUMN_STRING, some_data,
                          COLUMN_INT, i,
                          COLUMN_BOOLEAN,  FALSE,
                          -1);
      /* As the store will keep a copy of the string internally, we
       * free some_data.
       */
      g_free (some_data);
    }
  /* Modify a particular row */
  path = gtk_tree_path_new_from_string ("4");
  gtk_tree_model_get_iter (GTK_TREE_MODEL (list_store),
                           &amp;iter,
                           path);
  gtk_tree_path_free (path);
  gtk_list_store_set (list_store, &amp;iter,
                      COLUMN_BOOLEAN, TRUE,
                      -1);
}
</programlisting>
</example>
<refsect2>
<title>Performance Considerations</title>
<para>
Internally, the <link linkend="GtkListStore"><type>GtkListStore</type></link> was implemented with a linked list with a
tail pointer prior to GTK+ 2.6.  As a result, it was fast at data
insertion and deletion, and not fast at random data access.  The
<link linkend="GtkListStore"><type>GtkListStore</type></link> sets the <link linkend="GTK-TREE-MODEL-ITERS-PERSIST--CAPS"><type>GTK_TREE_MODEL_ITERS_PERSIST</type></link> flag, which means
that <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link><!-- -->s can be cached while the row exists.  Thus, if
access to a particular row is needed often and your code is expected to
run on older versions of GTK+, it is worth keeping the iter around.
</para>
<title>Atomic Operations</title>
<para>
It is important to note that only the methods
<link linkend="gtk-list-store-insert-with-values"><function>gtk_list_store_insert_with_values()</function></link> and <link linkend="gtk-list-store-insert-with-valuesv"><function>gtk_list_store_insert_with_valuesv()</function></link>
are atomic, in the sense that the row is being appended to the store and the
values filled in in a single operation with regard to <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link> signaling.
In contrast, using e.g. <link linkend="gtk-list-store-append"><function>gtk_list_store_append()</function></link> and then <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link>
will first create a row, which triggers the <link linkend="GtkTreeModel-row-inserted"><type>"row-inserted"</type></link> signal
on <link linkend="GtkListStore"><type>GtkListStore</type></link>. The row, however, is still empty, and any signal handler
connecting to "row-inserted" on this particular store should be prepared
for the situation that the row might be empty. This is especially important
if you are wrapping the <link linkend="GtkListStore"><type>GtkListStore</type></link> inside a <link linkend="GtkTreeModelFilter"><type>GtkTreeModelFilter</type></link> and are
using a <link linkend="GtkTreeModelFilterVisibleFunc"><type>GtkTreeModelFilterVisibleFunc</type></link>. Using any of the non-atomic operations
to append rows to the <link linkend="GtkListStore"><type>GtkListStore</type></link> will cause the
<link linkend="GtkTreeModelFilterVisibleFunc"><type>GtkTreeModelFilterVisibleFunc</type></link> to be visited with an empty row first; the
function must be prepared for that.
</para>
</refsect2>
<refsect2 id="GtkListStore-BUILDER-UI">
<title>GtkListStore as GtkBuildable</title>
<para>
The GtkListStore implementation of the GtkBuildable interface allows
to specify the model columns with a &lt;columns&gt; element that may
contain multiple &lt;column&gt; elements, each specifying one model
column. The "type" attribute specifies the data type for the column.
</para>
<para>
Additionally, it is possible to specify content for the list store
in the UI definition, with the &lt;data&gt; element. It can contain
multiple &lt;row&gt; elements, each specifying to content for one
row of the list model. Inside a &lt;row&gt;, the &lt;col&gt; elements
specify the content for individual cells.
</para>
<para>
Note that it is probably more common to define your models
in the code, and one might consider it a layering violation
to specify the content of a list store in a UI definition,
<emphasis>data</emphasis>, not <emphasis>presentation</emphasis>,
and common wisdom is to separate the two, as far as possible.
<!-- FIXME a bit inconclusive -->
</para>
<example>
<title>A UI Definition fragment for a list store</title>
<programlisting><![CDATA[
<object class="GtkListStore">
  <columns>
    <column type="gchararray"/>
    <column type="gchararray"/>
    <column type="gint"/>
  </columns>
  <data>
    <row>
      <col id="0">John</col>
      <col id="1">Doe</col>
      <col id="2">25</col>
    </row>
    <row>
      <col id="0">Johan</col>
      <col id="1">Dahlin</col>
      <col id="2">50</col>
    </row>
  </data>
</object>
]]></programlisting>
</example>
</refsect2>
</refsect1>

<refsect1 id="GtkListStore.details" role="details">
<title role="details.title">Details</title>
<refsect2 id="GtkListStore-struct" role="struct">
<title>GtkListStore</title>
<indexterm zone="GtkListStore-struct"><primary sortas="ListStore">GtkListStore</primary></indexterm><programlisting>typedef struct _GtkListStore GtkListStore;</programlisting>
<para>
</para></refsect2>
<refsect2 id="gtk-list-store-new" role="function">
<title>gtk_list_store_new ()</title>
<indexterm zone="gtk-list-store-new"><primary sortas="list_store_new">gtk_list_store_new</primary></indexterm><programlisting><link linkend="GtkListStore">GtkListStore</link> *      gtk_list_store_new                  (<link linkend="gint">gint</link> n_columns,
                                                         ...);</programlisting>
<para>
Creates a new list store as with <parameter>n_columns</parameter> columns each of the types passed
in.  Note that only types derived from standard GObject fundamental types 
are supported. 
</para>
<para>
As an example, <literal>gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING,
GDK_TYPE_PIXBUF);</literal> will create a new <link linkend="GtkListStore"><type>GtkListStore</type></link> with three columns, of type
int, string and <link linkend="GdkPixbuf"><type>GdkPixbuf</type></link> respectively.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>n_columns</parameter>&#160;:</term>
<listitem><simpara> number of columns in the list store
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>...</parameter>&#160;:</term>
<listitem><simpara> all <link linkend="GType"><type>GType</type></link> types for the columns, from first to last
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-newv" role="function">
<title>gtk_list_store_newv ()</title>
<indexterm zone="gtk-list-store-newv"><primary sortas="list_store_newv">gtk_list_store_newv</primary></indexterm><programlisting><link linkend="GtkListStore">GtkListStore</link> *      gtk_list_store_newv                 (<link linkend="gint">gint</link> n_columns,
                                                         <link linkend="GType">GType</link> *types);</programlisting>
<para>
Non-vararg creation function.  Used primarily by language bindings.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>n_columns</parameter>&#160;:</term>
<listitem><simpara> number of columns in the list store
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>types</parameter>&#160;:</term>
<listitem><simpara> an array of <link linkend="GType"><type>GType</type></link> types for the columns, from first to last
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-set-column-types" role="function">
<title>gtk_list_store_set_column_types ()</title>
<indexterm zone="gtk-list-store-set-column-types"><primary sortas="list_store_set_column_types">gtk_list_store_set_column_types</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_set_column_types     (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="gint">gint</link> n_columns,
                                                         <link linkend="GType">GType</link> *types);</programlisting>
<para>
This function is meant primarily for <link linkend="GObjects"><type>GObjects</type></link> that inherit from <link linkend="GtkListStore"><type>GtkListStore</type></link>,
and should only be used when constructing a new <link linkend="GtkListStore"><type>GtkListStore</type></link>.  It will not
function after a row has been added, or a method on the <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link>
interface is called.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>n_columns</parameter>&#160;:</term>
<listitem><simpara> Number of columns for the list store
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>types</parameter>&#160;:</term>
<listitem><simpara> An array length n of <link linkend="GTypes"><type>GTypes</type></link>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-set" role="function">
<title>gtk_list_store_set ()</title>
<indexterm zone="gtk-list-store-set"><primary sortas="list_store_set">gtk_list_store_set</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_set                  (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         ...);</programlisting>
<para>
Sets the value of one or more cells in the row referenced by <parameter>iter</parameter>.
The variable argument list should contain integer column numbers,
each column number followed by the value to be set.
The list is terminated by a -1. For example, to set column 0 with type
<link linkend="G-TYPE-STRING--CAPS"><literal>G_TYPE_STRING</literal></link> to "Foo", you would write <literal>gtk_list_store_set (store, iter,
0, "Foo", -1)</literal>.
The value will be copied or referenced by the store if appropriate.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> row iterator
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>...</parameter>&#160;:</term>
<listitem><simpara> pairs of column number and value, terminated with -1
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-set-valist" role="function">
<title>gtk_list_store_set_valist ()</title>
<indexterm zone="gtk-list-store-set-valist"><primary sortas="list_store_set_valist">gtk_list_store_set_valist</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_set_valist           (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="va-list">va_list</link> var_args);</programlisting>
<para>
See <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link>; this version takes a va_list for use by language
bindings.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> for the row being modified
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>var_args</parameter>&#160;:</term>
<listitem><simpara> va_list of column/value pairs
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-set-value" role="function">
<title>gtk_list_store_set_value ()</title>
<indexterm zone="gtk-list-store-set-value"><primary sortas="list_store_set_value">gtk_list_store_set_value</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_set_value            (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> column,
                                                         <link linkend="GValue">GValue</link> *value);</programlisting>
<para>
Sets the data in the cell specified by <parameter>iter</parameter> and <parameter>column</parameter>.
The type of <parameter>value</parameter> must be convertible to the type of the
column.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> for the row being modified
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>column</parameter>&#160;:</term>
<listitem><simpara> column number to modify
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>value</parameter>&#160;:</term>
<listitem><simpara> new value for the cell
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-set-valuesv" role="function" condition="since:2.12">
<title>gtk_list_store_set_valuesv ()</title>
<indexterm zone="gtk-list-store-set-valuesv" role="2.12"><primary sortas="list_store_set_valuesv">gtk_list_store_set_valuesv</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_set_valuesv          (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> *columns,
                                                         <link linkend="GValue">GValue</link> *values,
                                                         <link linkend="gint">gint</link> n_values);</programlisting>
<para>
A variant of <link linkend="gtk-list-store-set-valist"><function>gtk_list_store_set_valist()</function></link> which
takes the columns and values as two arrays, instead of
varargs. This function is mainly intended for 
language-bindings and in case the number of columns to
change is not known until run-time.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> for the row being modified
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>columns</parameter>&#160;:</term>
<listitem><simpara> an array of column numbers
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>values</parameter>&#160;:</term>
<listitem><simpara> an array of GValues 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>n_values</parameter>&#160;:</term>
<listitem><simpara> the length of the <parameter>columns</parameter> and <parameter>values</parameter> arrays
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.12</para></refsect2>
<refsect2 id="gtk-list-store-remove" role="function">
<title>gtk_list_store_remove ()</title>
<indexterm zone="gtk-list-store-remove"><primary sortas="list_store_remove">gtk_list_store_remove</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            gtk_list_store_remove               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);</programlisting>
<para>
Removes the given row from the list store.  After being removed, 
<parameter>iter</parameter> is set to be the next valid row, or invalidated if it pointed 
to the last row in <parameter>list_store</parameter>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>iter</parameter> is valid, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if not.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-insert" role="function">
<title>gtk_list_store_insert ()</title>
<indexterm zone="gtk-list-store-insert"><primary sortas="list_store_insert">gtk_list_store_insert</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_insert               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position);</programlisting>
<para>
Creates a new row at <parameter>position</parameter>.  <parameter>iter</parameter> will be changed to point to this new
row.  If <parameter>position</parameter> is larger than the number of rows on the list, then the
new row will be appended to the list. The row will be empty after this
function is called.  To fill in values, you need to call 
<link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link> or <link linkend="gtk-list-store-set-value"><function>gtk_list_store_set_value()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the new row
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>position</parameter>&#160;:</term>
<listitem><simpara> position to insert the new row
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-insert-before" role="function">
<title>gtk_list_store_insert_before ()</title>
<indexterm zone="gtk-list-store-insert-before"><primary sortas="list_store_insert_before">gtk_list_store_insert_before</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_insert_before        (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *sibling);</programlisting>
<para>
Inserts a new row before <parameter>sibling</parameter>. If <parameter>sibling</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, then the row will 
be appended to the end of the list. <parameter>iter</parameter> will be changed to point to this 
new row. The row will be empty after this function is called. To fill in 
values, you need to call <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link> or <link linkend="gtk-list-store-set-value"><function>gtk_list_store_set_value()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the new row
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>sibling</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-insert-after" role="function">
<title>gtk_list_store_insert_after ()</title>
<indexterm zone="gtk-list-store-insert-after"><primary sortas="list_store_insert_after">gtk_list_store_insert_after</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_insert_after         (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *sibling);</programlisting>
<para>
Inserts a new row after <parameter>sibling</parameter>. If <parameter>sibling</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, then the row will be
prepended to the beginning of the list. <parameter>iter</parameter> will be changed to point to
this new row. The row will be empty after this function is called. To fill
in values, you need to call <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link> or <link linkend="gtk-list-store-set-value"><function>gtk_list_store_set_value()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the new row
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>sibling</parameter>&#160;:</term>
<listitem><simpara> A valid <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-insert-with-values" role="function" condition="since:2.6">
<title>gtk_list_store_insert_with_values ()</title>
<indexterm zone="gtk-list-store-insert-with-values" role="2.6"><primary sortas="list_store_insert_with_values">gtk_list_store_insert_with_values</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_insert_with_values   (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position,
                                                         ...);</programlisting>
<para>
Creates a new row at <parameter>position</parameter>.  <parameter>iter</parameter> will be changed to point to this new
row.  If <parameter>position</parameter> is larger than the number of rows on the list, then the
new row will be appended to the list. The row will be filled with the 
values given to this function. 
</para>
<para>
Calling
<literal>gtk_list_store_insert_with_values(list_store, iter, position...)</literal> 
has the same effect as calling 
<informalexample><programlisting>
gtk_list_store_insert (list_store, iter, position);
gtk_list_store_set (list_store, iter, ...);
</programlisting></informalexample>
with the difference that the former will only emit a row_inserted signal,
while the latter will emit row_inserted, row_changed and, if the list store
is sorted, rows_reordered. Since emitting the rows_reordered signal
repeatedly can affect the performance of the program, 
<link linkend="gtk-list-store-insert-with-values"><function>gtk_list_store_insert_with_values()</function></link> should generally be preferred when
inserting rows in a sorted list store.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the new row, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>position</parameter>&#160;:</term>
<listitem><simpara> position to insert the new row
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>...</parameter>&#160;:</term>
<listitem><simpara> pairs of column number and value, terminated with -1
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.6</para></refsect2>
<refsect2 id="gtk-list-store-insert-with-valuesv" role="function" condition="since:2.6">
<title>gtk_list_store_insert_with_valuesv ()</title>
<indexterm zone="gtk-list-store-insert-with-valuesv" role="2.6"><primary sortas="list_store_insert_with_valuesv">gtk_list_store_insert_with_valuesv</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_insert_with_valuesv  (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="gint">gint</link> position,
                                                         <link linkend="gint">gint</link> *columns,
                                                         <link linkend="GValue">GValue</link> *values,
                                                         <link linkend="gint">gint</link> n_values);</programlisting>
<para>
A variant of <link linkend="gtk-list-store-insert-with-values"><function>gtk_list_store_insert_with_values()</function></link> which
takes the columns and values as two arrays, instead of
varargs. This function is mainly intended for 
language-bindings.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the new row, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>position</parameter>&#160;:</term>
<listitem><simpara> position to insert the new row
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>columns</parameter>&#160;:</term>
<listitem><simpara> an array of column numbers
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>values</parameter>&#160;:</term>
<listitem><simpara> an array of GValues 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>n_values</parameter>&#160;:</term>
<listitem><simpara> the length of the <parameter>columns</parameter> and <parameter>values</parameter> arrays
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.6</para></refsect2>
<refsect2 id="gtk-list-store-prepend" role="function">
<title>gtk_list_store_prepend ()</title>
<indexterm zone="gtk-list-store-prepend"><primary sortas="list_store_prepend">gtk_list_store_prepend</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_prepend              (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);</programlisting>
<para>
Prepends a new row to <parameter>list_store</parameter>. <parameter>iter</parameter> will be changed to point to this new
row. The row will be empty after this function is called. To fill in
values, you need to call <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link> or <link linkend="gtk-list-store-set-value"><function>gtk_list_store_set_value()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the prepend row
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-append" role="function">
<title>gtk_list_store_append ()</title>
<indexterm zone="gtk-list-store-append"><primary sortas="list_store_append">gtk_list_store_append</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_append               (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);</programlisting>
<para>
Appends a new row to <parameter>list_store</parameter>.  <parameter>iter</parameter> will be changed to point to this new
row.  The row will be empty after this function is called.  To fill in
values, you need to call <link linkend="gtk-list-store-set"><function>gtk_list_store_set()</function></link> or <link linkend="gtk-list-store-set-value"><function>gtk_list_store_set_value()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> An unset <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> to set to the appended row
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-clear" role="function">
<title>gtk_list_store_clear ()</title>
<indexterm zone="gtk-list-store-clear"><primary sortas="list_store_clear">gtk_list_store_clear</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_clear                (<link linkend="GtkListStore">GtkListStore</link> *list_store);</programlisting>
<para>
Removes all rows from the list store.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="gtk-list-store-iter-is-valid" role="function" condition="since:2.2">
<title>gtk_list_store_iter_is_valid ()</title>
<indexterm zone="gtk-list-store-iter-is-valid" role="2.2"><primary sortas="list_store_iter_is_valid">gtk_list_store_iter_is_valid</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            gtk_list_store_iter_is_valid        (<link linkend="GtkListStore">GtkListStore</link> *list_store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter);</programlisting>
<para>
<warning>This function is slow. Only use it for debugging and/or testing
purposes.</warning>
</para>
<para>
Checks if the given iter is a valid iter for this <link linkend="GtkListStore"><type>GtkListStore</type></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>list_store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the iter is valid, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if the iter is invalid.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.2</para></refsect2>
<refsect2 id="gtk-list-store-reorder" role="function" condition="since:2.2">
<title>gtk_list_store_reorder ()</title>
<indexterm zone="gtk-list-store-reorder" role="2.2"><primary sortas="list_store_reorder">gtk_list_store_reorder</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_reorder              (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="gint">gint</link> *new_order);</programlisting>
<para>
Reorders <parameter>store</parameter> to follow the order indicated by <parameter>new_order</parameter>. Note that
this function only works with unsorted stores.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>new_order</parameter>&#160;:</term>
<listitem><simpara> an array of integers mapping the new position of each child
     to its old position before the re-ordering,
     i.e. <parameter>new_order</parameter><literal>[newpos] = oldpos</literal>.
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.2</para></refsect2>
<refsect2 id="gtk-list-store-swap" role="function" condition="since:2.2">
<title>gtk_list_store_swap ()</title>
<indexterm zone="gtk-list-store-swap" role="2.2"><primary sortas="list_store_swap">gtk_list_store_swap</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_swap                 (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *a,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *b);</programlisting>
<para>
Swaps <parameter>a</parameter> and <parameter>b</parameter> in <parameter>store</parameter>. Note that this function only works with
unsorted stores.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>a</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>b</parameter>&#160;:</term>
<listitem><simpara> Another <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>.
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.2</para></refsect2>
<refsect2 id="gtk-list-store-move-before" role="function" condition="since:2.2">
<title>gtk_list_store_move_before ()</title>
<indexterm zone="gtk-list-store-move-before" role="2.2"><primary sortas="list_store_move_before">gtk_list_store_move_before</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_move_before          (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *position);</programlisting>
<para>
Moves <parameter>iter</parameter> in <parameter>store</parameter> to the position before <parameter>position</parameter>. Note that this
function only works with unsorted stores. If <parameter>position</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, <parameter>iter</parameter>
will be moved to the end of the list.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>position</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.2</para></refsect2>
<refsect2 id="gtk-list-store-move-after" role="function" condition="since:2.2">
<title>gtk_list_store_move_after ()</title>
<indexterm zone="gtk-list-store-move-after" role="2.2"><primary sortas="list_store_move_after">gtk_list_store_move_after</primary></indexterm><programlisting><link linkend="void">void</link>                gtk_list_store_move_after           (<link linkend="GtkListStore">GtkListStore</link> *store,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
                                                         <link linkend="GtkTreeIter">GtkTreeIter</link> *position);</programlisting>
<para>
Moves <parameter>iter</parameter> in <parameter>store</parameter> to the position after <parameter>position</parameter>. Note that this
function only works with unsorted stores. If <parameter>position</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, <parameter>iter</parameter>
will be moved to the start of the list.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>store</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkListStore"><type>GtkListStore</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>iter</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>position</parameter>&#160;:</term>
<listitem><simpara> A <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 2.2</para></refsect2>

</refsect1>



<refsect1 id="GtkListStore.see-also">
<title>See Also</title>
<para>
<link linkend="GtkTreeModel"><type>GtkTreeModel</type></link>, <link linkend="GtkTreeStore"><type>GtkTreeStore</type></link>
</para>
</refsect1>

</refentry>
