Hi all, I am trying to create a TreeView, of which a column should display a combo box. So I have listmodel ListModelA with a GTK_TYPE_TREE_MODEL in it and then this model is filled with data. I add listmodels (ListModelB) with 2 columns to the listmodel ListModelA, previously created or possibly a NULL pointer.
Then for the TreeView of ListModelA I create a GtkCellRendererCombo and I use gtk_tree_view_column_set_cell_data_func so I can set the model property of the cell renderer if the model retrieved from ListModelA is not NULL. (LancetSectionSymbolCellRendererSetModel) Then I set g_object_set(renderer,"has-entry",FALSE, "text-column", SYMBOL_NAME_COLUMN, "editable", FALSE, NULL); When I look at the result, I get no warnings at run-time or compile-time, but I don't see any Combo in the resulting TreeViewColumn. What am I doing wrong? I've included the (relevant part of the) source below. Thanks for any help. Ludo ------------------------- 845 static void LancetSectionSymbolCellRendererSetModel(GtkTreeViewColumn *col, 846 GtkCellRenderer *renderer, 847 GtkTreeModel *model, 848 GtkTreeIter *iter, 849 gpointer user_data) 850 { 851 gpointer data; 852 GtkTreeModel * combo_model; 853 gtk_tree_model_get(model, iter, SYMBOL_COLUMN, &data, -1); 854 combo_model = GTK_TREE_MODEL(data); 855 if (data) 856 g_object_set(renderer, "model", combo_model, NULL); 857 } 858 859 GtkWidget * LancetSectionGetTableView(t_section * section) 860 { 861 GtkListStore * list_store; 862 GtkTreeIter tree_iter; 863 GtkWidget * section_view; 864 GtkCellRenderer * renderer; 865 GtkTreeViewColumn *column; 866 GtkWidget * listscroll; 867 char* section_data; 868 t_symbol_ref * symref; 869 t_reloc_ref * relref; 870 t_uint32 i; 871 872 /* First we create a model to store the data and subsequently fill it with the data */ 873 list_store = gtk_list_store_new(N_SECTION_VIEW_COLUMNS, G_TYPE_INT, GTK_TYPE_TREE_MODEL, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER); 874 875 section_data = SECTION_DATA(section); 876 listscroll=gtk_scrolled_window_new(NULL,NULL); 877 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(listscroll),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); 878 879 symref = SECTION_REFED_BY_SYM(section); 880 881 882 for (i=0; i < SECTION_CSIZE(section); i+=4) 883 { 884 GtkListStore * combo_list_store = NULL; 885 GtkTreeIter combo_tree_iter; 886 887 /* Check if there is a symbol pointing to this offset */ 888 while(symref && AddressIsLt(SYMBOL_OFFSET_FROM_START(symref->sym),AddressNewForSection(section,i))) 889 symref = symref->next; 890 891 /* If we have symbols, lets create a model to store them */ 892 if(symref && AddressIsEq(SYMBOL_OFFSET_FROM_START(symref->sym),AddressNewForSection(section,i))) 893 { 894 combo_list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); 895 } 896 while(symref && AddressIsEq(SYMBOL_OFFSET_FROM_START(symref->sym),AddressNewForSection(section,i))) 897 { 898 t_bool local_sym = ((SYMBOL_ORDER(symref->sym)<0)&&(SYMBOL_SEARCH(symref->sym)==FALSE)); 899 t_string symbol_name = StringIo("(%s) %s", 900 local_sym?"l":"g", 901 SYMBOL_NAME(symref->sym)); 902 if(local_sym) 903 gtk_list_store_append(combo_list_store, &combo_tree_iter); 904 else 905 gtk_list_store_prepend(combo_list_store, &combo_tree_iter); 906 gtk_list_store_set(combo_list_store, &combo_tree_iter, SYMBOL_NAME_COLUMN, symbol_name, SYMBOL_POINTER_COLUMN, symref->sym, -1); 907 /* VERBOSE(0,("Symbol @S is pointing at this offset (%d)",symref->sym,i));*/ 908 Free(symbol_name); 909 symref = symref->next; 910 } 911 912 913 gtk_list_store_append(list_store, &tree_iter); 914 915 if(section_data) 916 { 917 printf("TM?: %d\n",GTK_IS_TREE_MODEL(combo_list_store)); 918 919 gtk_list_store_set(list_store, &tree_iter, OFFSET_COLUMN, i, SYMBOL_COLUMN, GTK_TREE_MODEL(combo_list_store), DATA_COLUMN, section_data+i, REFERS_TO_COLUMN, NULL, REFED_BY_COLUMN, NULL, -1); 920 } 921 else 922 gtk_list_store_set(list_store, &tree_iter, OFFSET_COLUMN, i, SYMBOL_COLUMN, GTK_TREE_MODEL(combo_list_store), DATA_COLUMN, NULL, REFERS_TO_COLUMN, NULL, REFED_BY_COLUMN, NULL, -1); 923 ... 942 943 section_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(list_store)); 944 945 /* The first column displays the offset */ 946 renderer = gtk_cell_renderer_text_new(); 947 column = gtk_tree_view_column_new(); 948 gtk_tree_view_column_set_title(column, "Offset"); 949 gtk_tree_view_column_pack_start(column, renderer, TRUE); 950 gtk_tree_view_column_set_cell_data_func(column, renderer, LancetSectionOffsetCellRendererFunction, NULL, NULL); 951 gtk_tree_view_append_column(GTK_TREE_VIEW(section_view), column); 952 /* The second column display the data in hex values */ 953 column = gtk_tree_view_column_new(); 954 gtk_tree_view_column_set_title(column, "Data"); 955 renderer = gtk_cell_renderer_text_new(); 956 gtk_tree_view_column_pack_start(column, renderer, TRUE); 957 gtk_tree_view_column_set_cell_data_func(column, renderer, LancetSectionDataCellRendererAsHex, NULL, NULL); 958 renderer = gtk_cell_renderer_text_new(); 959 gtk_tree_view_column_pack_end(column, renderer, TRUE); 960 gtk_tree_view_column_set_cell_data_func(column, renderer, LancetSectionDataCellRendererAsChar, NULL, NULL); 961 gtk_tree_view_append_column(GTK_TREE_VIEW(section_view), column); 962 /* The third column will show the symbols pointing to the offset */ 963 renderer = gtk_cell_renderer_combo_new(); 964 /* column = gtk_tree_view_column_new_with_attributes("Symbols", renderer, "model", SYMBOL_COLUMN, NULL); This is not working as the model might be NULL...*/ 965 g_object_set(renderer,"has-entry",FALSE, "text-column", SYMBOL_NAME_COLUMN, "editable", FALSE, NULL); 966 column = gtk_tree_view_column_new(); 967 gtk_tree_view_column_set_title(column, "Symbols"); 968 gtk_tree_view_column_pack_start(column, renderer, TRUE); 969 gtk_tree_view_column_set_cell_data_func(column, renderer, LancetSectionSymbolCellRendererSetModel, NULL, NULL); 970 gtk_tree_view_append_column(GTK_TREE_VIEW(section_view), column); 971 972 gtk_container_add(GTK_CONTAINER(listscroll), section_view); 973 974 return listscroll; 975 } _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list