Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |  Implemented Interfaces  |  Properties

GtkTreeModelSort

GtkTreeModelSort GtkTreeModel который делает основную модель дерева сортируемой

Краткое описание

#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 = get_my_model(); /* Создаём первое дерево */ sort_model1 = gtk_tree_model_sort_new_with_model (child_model); tree_view1 = gtk_tree_view_new_with_model (sort_model1); /* Создаём второе дерево */ sort_model2 = gtk_tree_model_sort_new_with_model (child_model); tree_view2 = gtk_tree_view_new_with_model (sort_model2); /* Теперь мы можем сортировать обе модели независимо */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model1), COLUMN_1, GTK_SORT_ASCENDING); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model2), COLUMN_1, GTK_SORT_DESCENDING); }

Для демонстрации доступа к основной дочерней модели из модели сортировки в следующем примере применён обратный вызов для 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); }

Детали

GtkTreeModelSort

typedef struct _GtkTreeModelSort GtkTreeModelSort;

Структура не имеет непосредственного доступа. Используйте для доступа функции приведённые ниже.


gtk_tree_model_sort_new_with_model ()

GtkTreeModel* gtk_tree_model_sort_new_with_model (GtkTreeModel *child_model);

Создаёт новый GtkTreeModel, с child_model как дочерней моделью.

child_model :

GtkTreeModel

Возвращает :

Новый GtkTreeModel.


gtk_tree_model_sort_get_model ()

GtkTreeModel* gtk_tree_model_sort_get_model (GtkTreeModelSort *tree_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);

Преобразует child_path в относительный путь для tree_model_sort. Таким образом, child_path указывает путь в дочерней модели. Возвращаемый путь будет указывать на туже строку в отсортированной модели. Еслиchild_path не доступный путь в дочерней модели, возвращается NULL.

tree_model_sort :

GtkTreeModelSort

child_path :

GtkTreePath для преобразования

Возвращает :

Вновь размещенный GtkTreePath, или NULL


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);

Устанавливает sort_iter указывающий строку в tree_model_sort, который соответствует строке указанной в child_iter.

tree_model_sort :

GtkTreeModelSort

sort_iter :

Неинициализированный GtkTreeIter.

child_iter :

Допустимый GtkTreeIter указывающий строку в дочерней модели


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);

Преобразует sorted_path в путь дочерней модели tree_model_sort. Таким образом, sorted_path указывает на размещение в tree_model_sort. Возвращаемый путь будет указывать на тоже расположение в не отсортированной модели. Если sorted_path не указывает на расположение в дочерней модели, возвращается NULL.

tree_model_sort :

GtkTreeModelSort

sorted_path :

GtkTreePath для преобразования

Возвращает :

Вновь распределённый GtkTreePath, или NULL


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);

Устанавливает child_iter указывающий строку указанную в sorted_iter.

tree_model_sort :

GtkTreeModelSort

child_iter :

Неинициализированный GtkTreeIter

sorted_iter :

Допустимый GtkTreeIter указывающий строку в tree_model_sort.


gtk_tree_model_sort_reset_default_sort_func ()

void gtk_tree_model_sort_reset_default_sort_func (GtkTreeModelSort *tree_model_sort);

Сбрасывает функцию сортировки по умолчанию в состояние 'unsorted'. Таким образом, определяется тот же порядок, что и у дочерней модели. Пересортировка модели в тот же порядок что и у дочерней, будет производится, только если модель GtkTreeModelSort в 'unsorted' состоянии.

tree_model_sort :

GtkTreeModelSort


gtk_tree_model_sort_clear_cache ()

void        gtk_tree_model_sort_clear_cache (GtkTreeModelSort *tree_model_sort);

Эта функция почти никогда не вызывается. Она очищает tree_model_sort от любых кэшированных итераторов которые не были очищены с помощью gtk_tree_model_ref_node(). Это может быть полезно, если дочерняя модель отсортирована статично (и не часто изменяется) и был длительный доступ к неочищенным узлам. Как побочный эффект этой функции, все неочищенные итераторы будут недоступны.

tree_model_sort :

GtkTreeModelSort


gtk_tree_model_sort_iter_is_valid ()

gboolean gtk_tree_model_sort_iter_is_valid (GtkTreeModelSort *tree_model_sort, GtkTreeIter *iter);

Внимание

Эта функция бесполезна. Используйте её только в случаях отладки или тестирования.

Проверяет доступен ли полученный итератор в этой GtkTreeModelSort.

tree_model_sort :

GtkTreeModelSort.

iter :

GtkTreeIter.

Возвращает :

TRUE если итератор доступен, FALSE если недоступен.

Начиная с версии 2.2

Детали свойств

Свойство "model"

  "model"                GtkTreeModel          : Read / Write / Construct Only

Модель для сортировки в TreeModelSort.

Смотрите также

GtkTreeModel, GtkListStore, GtkTreeStore, GtkTreeSortable, GtkTreeModelFilter