http://hi.baidu.com/20065562/item/72d204cf5188f03b449416af
http://www.pygtk.org/pygtk2tutorial/sec-CellRenderers.html
http://www.cnblogs.com/cy163/archive/2007/06/16/785358.html
gtk.TreeStore
implements gtk.Buildable
gtk.TreeModel
gtk_list_store_append
void gtk_list_store_append (GtkListStore *self, GtkTreeIter* iter);
Appends a new row to @list_store. @iter 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 gtk_list_store_set() or gtk_list_store_set_value()
gtk_list_store_set(list_store, &iter,
column_number_1, value_1,
column_number_2, value_2,
...,
NULL);
but for filesystem chooser use proxy
gtk.TreeStore to op gtk filesysytemmodel, cell is not realy a file
*
* Adds an "empty" row at the beginning of the model. This does not refer to
* any file, but is a temporary placeholder for a file name that the user will
* type when a corresponding cell is made editable. When your code is done
* using this temporary row, call _gtk_file_system_model_remove_editable(). //when real file create , treemodel notify treeview to update, so we need to rm fake file first
**/
void
_gtk_file_system_model_add_editable (GtkFileSystemModel *model, GtkTreeIter *iter)
{
FileModelNode *node;
GtkTreePath *path;
g_return_if_fail (!model->has_editable);
model->has_editable = TRUE;
node = file_model_node_new (model, NULL);
node->is_visible = TRUE;
node->next = model->roots;
model->roots = node;
path = gtk_tree_path_new ();
gtk_tree_path_append_index (path, 0);
iter->user_data = node;
gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, iter);
gtk_tree_path_free (path);
}