GtkTreeModelSort
GtkTreeModelSort — GtkTreeModel, который делает сортируемым лежащий в основе дерево-модель
Функции
Свойства
| GtkTreeModel * | model | Только чтение/запись/создание |
Типы и значения
| struct | GtkTreeModelSort |
Иерархия объектов
GObject
╰── GtkTreeModelSort
Реализованные интерфейсы
GtkTreeModelSort реализует GtkTreeModel, GtkTreeSortable и GtkTreeDragSource.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Модель GtkTreeModelSort реализует интерфейс GtkTreeSortable. Она не хранит данные сама по себе, а создается с помощью дочерней модели и проксирует ее данные. Она имеет идентичные типы столбцов, что и эта дочерняя модель, и изменения в дочерней модели распространяются. Основная цель этой модели — предоставить способ сортировки другой модели без ее изменения. Обратите внимание, что функция сортировки, используемая GtkTreeModelSort, не гарантирует стабильности.
Использование этой модели лучше всего демонстрируется на примере. В следующем примере кода создаются два виджета GtkTreeView, каждый из которых отображает те же данные. Поскольку модель здесь обернута GtkTreeModelSort, два GtkTreeViews могут сортировать свои представления данных без влияния друг на друга. В отличие от этого, если мы просто поместим одну и ту же модель в каждый виджет, то сортировка первого также отсортирует второй.
Использование GtkTreeModelSort
Чтобы продемонстрировать, как получить доступ к лежащей в основе дочерней модели из модели сортировки, в следующем примере будет обработчик сигнала GtkTreeSelection «changed». В этом обработчике мы получаем строку из COLUMN_1 модели. Затем мы изменяем строку, находим ту же выбранную строку в дочерней модели и изменяем ее там.
Получение доступа к дочерней модели в обработчике изменений выделения
{
GtkTreeView *tree_view1;
GtkTreeView *tree_view2;
GtkTreeModel *sort_model1;
GtkTreeModel *sort_model2;
GtkTreeModel *child_model;
// get the child model
child_model = get_my_model ();
// Create the first tree
sort_model1 = gtk_tree_model_sort_new_with_model (child_model);
tree_view1 = gtk_tree_view_new_with_model (sort_model1);
// Create the second tree
sort_model2 = gtk_tree_model_sort_new_with_model (child_model);
tree_view2 = gtk_tree_view_new_with_model (sort_model2);
// Now we can sort the two models independently
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);
}Функции
gtk_tree_model_sort_new_with_model ()
GtkTreeModel *
gtk_tree_model_sort_new_with_model (GtkTreeModel *child_model); Создаёт новый GtkTreeModelSort, с child_model в качестве дочерней модели.
[constructor]
Параметры
child_model |
gtk_tree_model_sort_get_model ()
GtkTreeModel *
gtk_tree_model_sort_get_model (GtkTreeModelSort *tree_model); Возвращает модель, которую сортирует GtkTreeModelSort.
Параметры
tree_model |
Возвращает
“Дочерняя модель”, которая сортируется.
[transfer none]
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 | ||
child_path | A GtkTreePath to convert |
gtk_tree_model_sort_convert_child_iter_to_iter ()
gboolean 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 . Если sort_iter не был установлен, возвращается FALSE. Примечание: булево значение возвращается только начиная с версии 2.14.
Параметры
tree_model_sort | ||
sort_iter | Неинициализированный GtkTreeIter. | [out] |
child_iter | Допустимый GtkTreeIter, указывающий на строку в дочерней модели |
Возвращает
TRUE, если sort_iter был установлен, т.е. если sort_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);
Преобразует sorted_path в путь в дочерней модели tree_model_sort . То есть, sorted_path указывает на местоположение в tree_model_sort . Возвращаемый путь будет указывать на то же местоположение в модели, которая не сортируется. Если sorted_path не указывает на местоположение в дочерней модели, возвращается NULL.
Параметры
tree_model_sort | ||
sorted_path | A GtkTreePath to convert |
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 | ||
child_iter | Неинициализированный GtkTreeIter. | [out] |
sorted_iter | Допустимый GtkTreeIter, указывающий на строку в |
gtk_tree_model_sort_reset_default_sort_func ()
void
gtk_tree_model_sort_reset_default_sort_func
(GtkTreeModelSort *tree_model_sort); Это сбрасывает функцию сортировки по умолчанию в состояние “несортированное”. То есть, порядок такой же, как и в дочерней модели. Модель будет отсортирована в том же порядке, что и дочерняя модель, только если GtkTreeModelSort находится в состоянии “несортированное”.
Параметры
tree_model_sort |
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 |
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 | ||
iter | A GtkTreeIter. |
Возвращает
TRUE если итератор допустим, FALSE если итератор недопустим.
Типы и значения
struct GtkTreeModelSort
struct GtkTreeModelSort;
Подробное описание свойств
Свойство “model”
“model” GtkTreeModel *
Модель для сортировки TreeModelSort.
Владелец: GtkTreeModelSort
Флаги: Чтение / Запись / Только для создания
См. также
GtkTreeModel, GtkListStore, GtkTreeStore, GtkTreeSortable, GtkTreeModelFilter
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkTreeModelSort.html