ツリー

2010年2月11日

ファイル

20-tree.tar.gz

内容

ツリーを作ります。基本はリストと同じです。gtk_list_store_new() の代りに gtk_tree_store_new() を使います。

GtkTreeView の作成。

	tree = gtk_tree_view_new();

ツリーの作成。

	store = gtk_tree_store_new(
	  N_COLUMNS,
	  G_TYPE_STRING,
	  G_TYPE_UINT,
	  G_TYPE_BOOLEAN
	);
	gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));

列の ID は次のように定義しています。

enum{
	COLUMN_ITEM,
	COLUMN_NUM,
	COLUMN_VISIBLE,
	N_COLUMNS,
};

ツリーの枝で "Num" 列を表示させないようにするために、COLUMN_VISIBLE をブーリアンとして定義しています。

列の追加。

	renderer = gtk_cell_renderer_text_new();
	g_object_set_data(G_OBJECT(renderer),
	  "column", GINT_TO_POINTER(COLUMN_ITEM));
	column = gtk_tree_view_column_new_with_attributes(
	  "Item", renderer,
	  "text", COLUMN_ITEM,
	  NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);

	renderer = gtk_cell_renderer_text_new();
	g_object_set_data(G_OBJECT(renderer),
	  "column", GINT_TO_POINTER(COLUMN_NUM));
	column = gtk_tree_view_column_new_with_attributes(
	  "Num", renderer,
	  "text", COLUMN_NUM,
	  "editable", TRUE,
	  "visible", COLUMN_VISIBLE,
	  NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);

表示の切り替えを指定できるように、"Num" 列で "visible" に COLUMN_VISIBLE を指定しています。

項目の追加。

	gtk_tree_store_append(store, &iter, NULL);
	gtk_tree_store_set(store, &iter,
	  COLUMN_ITEM, "fruits",
	  COLUMN_NUM, 0,
	  COLUMN_VISIBLE, FALSE,
	  -1);

	gtk_tree_store_append(store, &citer, &iter);
	gtk_tree_store_set(store, &citer,
	  COLUMN_ITEM, "apple",
	  COLUMN_NUM, 1,
	  COLUMN_VISIBLE, TRUE,
	  -1);

	gtk_tree_store_append(store, &citer, &iter);
	gtk_tree_store_set(store, &citer,
	  COLUMN_ITEM, "lemon",
	  COLUMN_NUM, 2,
	  COLUMN_VISIBLE, TRUE,
	  -1);

	gtk_tree_store_append(store, &iter, NULL);
	gtk_tree_store_set(store, &iter,
	  COLUMN_ITEM, "animals",
	  COLUMN_NUM, 0,
	  COLUMN_VISIBLE, FALSE,
	  -1);

	gtk_tree_store_append(store, &citer, &iter);
	gtk_tree_store_set(store, &citer,
	  COLUMN_ITEM, "cat",
	  COLUMN_NUM, 3,
	  COLUMN_VISIBLE, TRUE,
	  -1);

	gtk_tree_store_append(store, &citer, &iter);
	gtk_tree_store_set(store, &citer,
	  COLUMN_ITEM, "penguin",
	  COLUMN_NUM, 4,
	  COLUMN_VISIBLE, TRUE,
	  -1);

gtk_tree_store_append() では、第 3 引数に親の GtkTreeIter を指定します。親がない場合は NULL を指定します。たとえば、"fruits" は親を持たないので、gtk_tree_store_append() で第 3 引数に NULL を指定しています。また、"fruits" は枝なので、gtk_tree_store_set() で COLUMN_VISIBLE に FALSE を指定して、"Num" の列を表示しないようにしています。

GTK+ プログラミング 目次へ