GtkTreeModelSort
GtkTreeModelSort — A GtkTreeModel which makes an underlying tree model sortable
Функции
Свойства
| GtkTreeModel * | model | Чтение / Запись / Только для создания |
Типы и значения
| struct | GtkTreeModelSort |
Иерархия объектов
GObject
╰── GtkTreeModelSort
Реализованные интерфейсы
GtkTreeModelSort реализует GtkTreeModel, GtkTreeSortable и GtkTreeDragSource.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Модель GtkTreeModelSort реализует интерфейс GtkTreeSortable. Она не хранит данные сама, а создается с дочерней моделью и делегирует её данные. Она имеет идентичные типы столбцов, как у этой дочерней модели, и изменения в дочерней модели распространяются. Основное назначение этой модели — предоставление способа сортировать другую модель без её изменения. Обратите внимание, что функция сортировки, используемая GtkTreeModelSort, не гарантирует стабильность.
Использование этой модели лучше всего продемонстрировать на примере. В следующем фрагменте кода мы создаём два виджета GtkTreeView, каждый из которых отображает одни и те же данные. Поскольку модель здесь обернута в GtkTreeModelSort, два GtkTreeView могут сортировать свои представления данных, не влияя друг на друга. В противоположность этому, если мы просто поместим одну и ту же модель в каждый виджет, то сортировка первого приведет к сортировке второго.
Использование 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 в качестве дочернего модели.
[конструктор]
Параметры
child_model |
gtk_tree_model_sort_get_model ()
GtkTreeModel *
gtk_tree_model_sort_get_model (GtkTreeModelSort *tree_model); Возвращает модель, по которой сортирует GtkTreeModelSort.
Параметры
tree_model |
Возвращает
сортируемую "дочернюю модель".
[передача нет]
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 для преобразования |
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 для преобразования |
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 | Объект GtkTreeModelSort. | |
iter | Объект GtkTreeIter. |
Возвращаемое значение
TRUE , если итератор допустим, FALSE , если итератор недопустим.
С: 2.2
Типы и значения
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.gnome.org/gtk3/3.24/GtkTreeModelSort.html