LINUX.ORG.RU

GtkTreeView, определить номер столбца

 


0

1

Добрый день! Подскажите пожалуйста: Есть таблица с редактируемыми полями, нужно определить строку и столбец ячейки в которой были произведены изменения(и собствено установить их) Пишу обработчик:

void        cell_edited_callback (GtkCellRendererText *cell,
                                  gchar               *path_string,
                                  gchar               *new_text,
                                  gpointer             user_data){

    GtkTreeIter iter;
    GtkTreeModel *model;
    int n;
    model = gtk_tree_view_get_model (cell);
    GtkTreePath *path = NULL;
    GtkTreeViewColumn **col;

	//gtk_tree_view_get_cursor (view,&path,&col);

//	printf("%d\n",*col);

    if (gtk_tree_model_get_iter_from_string(model, &iter, path_string) )
        gtk_list_store_set(GTK_LIST_STORE (model), &iter, COL_NAME,new_text, -1 );

}



Номер строки определяется замечательно, значение устанавливается,но столбец нужно задавать самому. Подскажите пожалуйста, как это обойти. Спасибо.



Последнее исправление: cetjs2 (всего исправлений: 3)

проще всего при создании GtkCellRenderer-а задавать ему номер столбца через g_object_set_data, а в обработчике дергать g_object_get_data

ananas ★★★★★
()
Ответ на: комментарий от ananas

ММ, а можно маленький примерчик? Я создаю вот так:


  GtkCellRenderer     *renderer;
  GtkTreeModel        *model;


  view = gtk_tree_view_new ();

  /* --- Column #1 --- */
  renderer = gtk_cell_renderer_text_new ();
  
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
                                               -1,
                                               "№",
                                               renderer,
                                               "text", COL_NN,
                                               NULL);
  g_object_set(renderer, "editable", TRUE, NULL);
  g_signal_connect(renderer, "edited", (GCallback) cell_edited_callback, NULL);
  /* --- Column #2 --- */
  renderer = gtk_cell_renderer_text_new ();
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
                                               -1,
                                               "№ инструмента",
                                               renderer,
                                               "text", COL_N_TOOL,
                                               NULL);
  g_object_set(renderer, "editable", TRUE, NULL);
  g_signal_connect(renderer, "edited", (GCallback) cell_edited_callback, NULL);
  /* --- Column #3 --- */
.........
[\code]

Как я понимаю, теперь столбцы нужно создавать при помощи g_object_set_data? Не совсем понятно как это реализовать. 

red_byte
() автор топика
Ответ на: комментарий от red_byte
...
renderer = gtk_cell_renderer_text_new ();
g_object_set_data (renderer, "col_num", GINT_TO_POINTER (COL_NN));
...
renderer = gtk_cell_renderer_text_new ();
g_object_set_data (renderer, "col_num", GINT_TO_POINTER (COL_N_TOOL));
...

а потом в твоем обработчике

gint col_num = GPOINTER_TO_INT (g_object_get_data (cell, "col_num"));
ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.