リスト2010年2月11日 | |
![]() ファイル内容リストを作ります。GtkTreeView を使います。 list = gtk_tree_view_new(); リストの作成には gtk_list_store_new() を使います。 store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_UINT); gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store)); gtk_list_store_new() の第 1 引数は列の数、それ以降は列の数だけ列のデータタイプを指定しています。列の ID を次のように定義しています。
enum{
COLUMN_ITEM,
COLUMN_NUM,
N_COLUMNS,
};
N_COLUMNS を一番下に置くことで、自然に列の個数として定義されます。 列を追加します。 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(list), 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, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); g_object_set_data() で、後で使うために列 ID を設定しています。gtk_tree_view_column_new_with_attributes() の第 3 引数以降は属性のペアの列で、NULL で終わりを表わします。"Num" の列の "editable" に TRUE を指定することで、列を編集可能にしています。編集された値を設定できるように、"edited" イベントを拾っておきます。 g_signal_connect(renderer, "edited", G_CALLBACK(cell_edited), store); リストに項目を追加します。 gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, COLUMN_ITEM, "apple", COLUMN_NUM, 1, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, COLUMN_ITEM, "lemon", COLUMN_NUM, 2, -1); gtk_list_sotre_set() の第 3 引数以降は列の ID と値のペアで、-1 で終わりを表わします。 編集された値を有効にするには、"edited" イベントのコールバック関数で以下のようにします。
void cell_edited(GtkCellRendererText *cell, const char *path_str,
const char *text, GtkListStore *store)
{
GtkTreePath *path;
GtkTreeIter iter;
int column;
path = gtk_tree_path_new_from_string(path_str);
gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path);
編集されたセルの位置 iter を取得します。 column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column")); 列の ID を取得します (g_object_set_data() で設定しておいたもの)。
if(column == COLUMN_NUM){
gtk_list_store_set(store, &iter, column, atoi(text), -1);
}
}
目的の列であれば、値を更新します。 | |
| PENGUINITIS | |