gtk に関するメモ: Tree and List Widget

最近のgtk-2系はいろいろ中身の設計から変更があり,ツリービューや,コンボボックスなどのコンポーネントは,

  • モデル:M
  • ビュー:V
  • コントローラ:C

MVCとして再設計されたみたい.

実際には以下の4つのコンポーネントから構成される.

  • The tree view widget
    • GtkTreeView
  • The view column
    • GtkTreeViewColumn
  • The cell renderers
    • GtkCellRender
      • GtkCellRendererPixbuf
      • GtkCellRendererText
  • The model interface
    • GtkTreeModel
      • GtkTreeStore
      • GtkListStore

GtkListStore を使って ComboBox をつくる場合.

まずモデルは,文字列のリストとして作成する.
gtk的には,カラム数1の GtkListStore と定義するのが簡単みたい.

GtkListStore *list = gtk_list_store_new(1, G_TYPE_STRING);

GtkTreeIter iter;
// リストへのノードを追加
gtk_list_store_append(list, &iter);
// ノードの各カラムの設定
// 可変引数で以下の情報を指定.終端は -1  
//  {index,  index番目のカラムの値}
gtk_list_store_set(list, &iter, 0, "AAAA", -1);

コントローラをつくる

GtkWidget *combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(list));

最後にビューをつくる.

GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
				  "text", 0,
				  NULL);

これで combo boxが完成.