краткое описание#include <gtk/gtk.h> gtktreemodelsort; gtktreemodel* gtk_tree_model_sort_new_with_model (gtktreemodel *child_model); gtktreemodel* gtk_tree_model_sort_get_model (gtktreemodelsort *tree_model); gtktreepath* gtk_tree_model_sort_convert_child_path_to_path (gtktreemodelsort *tree_model_sort, gtktreepath *child_path); void gtk_tree_model_sort_convert_child_iter_to_iter (gtktreemodelsort *tree_model_sort, gtktreeiter *sort_iter, gtktreeiter *child_iter); gtktreepath* gtk_tree_model_sort_convert_path_to_child_path (gtktreemodelsort *tree_model_sort, gtktreepath *sorted_path); void gtk_tree_model_sort_convert_iter_to_child_iter (gtktreemodelsort *tree_model_sort, gtktreeiter *child_iter, gtktreeiter *sorted_iter); void gtk_tree_model_sort_reset_default_sort_func (gtktreemodelsort *tree_model_sort); void gtk_tree_model_sort_clear_cache (gtktreemodelsort *tree_model_sort); gboolean gtk_tree_model_sort_iter_is_valid (gtktreemodelsort *tree_model_sort, gtktreeiter *iter); иерархия объектовgobject +----gtktreemodelsort осуществляемые интерфейсыgtktreemodelsort осуществляет gtktreemodel, gtktreedragsource и gtktreesortable. свойства"model" gtktreemodel : read / write / construct only описаниеgtktreemodelsort это модель которая осуществляет интерфейс gtktreesortable. она не содержит никаких данных непосредственно, а скорее создаёт дочернюю модель и уполномочивает её данные. она имеет идентичные типы столбцов для этой дочерней модели и изменения в ней. первичная цель этой модели обеспечить способ сортировки других моделей не изменяя их. помните что функции сортировки используемые gtktreemodelsort не гарантируют стабильность. использование лучше демонстрируется через пример. в следующем приведённом коде примера мы создаём два виджета gtktreeview каждый с одними и теме же данными. так как оболочкой модели здесь является gtktreemodelsort, оба gtktreeviews могут сортировать свой вид данных не влияя на другой. в отличии от этого, если бы мы просто поместили некоторую модель в каждый виджет, то при сортировки одного сортировался бы и другой. пример 3. использование gtktreemodelsort {
gtktreeview *tree_view1;
gtktreeview *tree_view2;
gtktreemodel *sort_model1;
gtktreemodel *sort_model2;
gtktreemodel *child_model;
/* получаем дочернюю модель */
child_model = для демонстрации доступа к основной дочерней модели из модели сортировки в следующем примере применён обратный вызов для gtktreeselection "changed" сигнала. в этом вызове, мы получаем строку из column_1 модели. когда мы изменяем строку, находим туже самую выбранную сроку в дочерней модели и изменяем строку в ней. пример 4. доступ к дочерней модели выбором изменения обратного вызова void selection_changed (gtktreeselection *selection, gpointer data) { gtktreemodel *sort_model = null; gtktreemodel *child_model; gtktreeiter sort_iter; gtktreeiter child_iter; char *some_data = null; char *modified_data; /* получаем текущий выбор и модель. */ if (! gtk_tree_selection_get_selected (selection, &sort_model, &sort_iter)) return; /* находим текущеме значение выбранной строки и получаем новое значение * для изменения. */ gtk_tree_model_get (gtk_tree_model (sort_model), &sort_iter, column_1, &some_data, -1); modified_data = change_the_data (some_data); g_free (some_data); /* получаем итератор дочерней модели, вместо сортируемой модели. */ gtk_tree_model_sort_convert_iter_to_child_iter (gtk_tree_model_sort (sort_model), &child_iter, &sort_iter); /* получаем дочернюю модель и изменяем значение строки. в этом * примере, дочерняя модель это gtkliststore. однако она может быть * любого другого типа. */ child_model = gtk_tree_model_sort_get_model (gtk_tree_model_sort (sort_model)); gtk_list_store_set (gtk_list_store (child_model), &child_iter, column_1, &modified_data, -1); g_free (modified_data); } деталиgtktreemodelsorttypedef struct _gtktreemodelsort gtktreemodelsort; структура не имеет непосредственного доступа. используйте для доступа функции приведённые ниже. gtk_tree_model_sort_new_with_model ()gtktreemodel* gtk_tree_model_sort_new_with_model (gtktreemodel *child_model);
создаёт новый gtktreemodel,
с
gtk_tree_model_sort_get_model ()gtktreemodel* gtk_tree_model_sort_get_model (gtktreemodelsort *tree_model); возвращает модель сортировки gtktreemodelsort.
gtk_tree_model_sort_convert_child_path_to_path ()gtktreepath* gtk_tree_model_sort_convert_child_path_to_path (gtktreemodelsort *tree_model_sort, gtktreepath *child_path);
преобразует
gtk_tree_model_sort_convert_child_iter_to_iter ()void gtk_tree_model_sort_convert_child_iter_to_iter (gtktreemodelsort *tree_model_sort, gtktreeiter *sort_iter, gtktreeiter *child_iter);
устанавливает
gtk_tree_model_sort_convert_path_to_child_path ()gtktreepath* gtk_tree_model_sort_convert_path_to_child_path (gtktreemodelsort *tree_model_sort, gtktreepath *sorted_path);
преобразует
gtk_tree_model_sort_convert_iter_to_child_iter ()void gtk_tree_model_sort_convert_iter_to_child_iter (gtktreemodelsort *tree_model_sort, gtktreeiter *child_iter, gtktreeiter *sorted_iter);
устанавливает
gtk_tree_model_sort_reset_default_sort_func ()void gtk_tree_model_sort_reset_default_sort_func (gtktreemodelsort *tree_model_sort); сбрасывает функцию сортировки по умолчанию в состояние 'unsorted'. таким образом, определяется тот же порядок, что и у дочерней модели. пересортировка модели в тот же порядок что и у дочерней, будет производится, только если модель gtktreemodelsort в 'unsorted' состоянии.
gtk_tree_model_sort_clear_cache ()void gtk_tree_model_sort_clear_cache (gtktreemodelsort *tree_model_sort);
эта функция почти никогда не вызывается.
она очищает
gtk_tree_model_sort_iter_is_valid ()gboolean gtk_tree_model_sort_iter_is_valid (gtktreemodelsort *tree_model_sort, gtktreeiter *iter); вниманиеэта функция бесполезна. используйте её только в случаях отладки или тестирования. проверяет доступен ли полученный итератор в этой gtktreemodelsort.
начиная с версии 2.2 детали свойствсвойство "
|