GtkTreeModelSort
GtkTreeModelSort — Деревовидная модель Gtk, которая делает базовую модель дерева сортируемой
Функции
Свойства
| GtkTreeModel * | model | Чтение / Запись / Только для построения |
Типы и значения
| struct | GtkTreeModelSort |
Иерархия объектов
GObject ╰── GtkTreeModelSort
Реализованные интерфейсы
GtkTreeModelSort реализует GtkTreeModel, GtkTreeSortable и GtkTreeDragSource.
Файлы
#include <gtk/gtk.h>
Описание
Модель GtkTreeModelSort реализует интерфейс GtkTreeSortable. Она не хранит данные сама по себе, а создается с помощью дочерней модели и делегирует доступ к данным. У нее такие же типы столбцов, что и у дочерней модели, и изменения в дочерней модели будут переданы. Основное назначение этой модели — предоставить способ сортировки другой модели без ее модификации. Обратите внимание, что функция сортировки, используемая GtkTreeModelSort, не гарантирует устойчивости.
Использование этой модели лучше всего продемонстрировать на примере. В следующем примере кода создаются два виджета GtkTreeView с представлением одних и тех же данных. Поскольку модель здесь обернута GtkTreeModelSort, оба GtkTreeView могут сортировать своё представление данных, не затрагивая друг друга. В отличие от этого, если мы просто поместим одну и ту же модель в каждый виджет, то сортировка первого виджета отсортирует и второй.
Использование GtkTreeModelSort
Для демонстрации того, как получить доступ к основной дочерней модели из модели сортировки, следующий пример будет обратной связью для сигнала GtkTreeSelection «изменён». В этом обратном вызове мы получаем строку из 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); Создаёт новый GtkTreeModel, с child_model в качестве дочерней модели.
Параметры
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 | Объект GtkTreeModelSort. | |
iter | Объект GtkTreeIter. |
С: 2.2
Типы и значения
struct GtkTreeModelSort
struct GtkTreeModelSort;
Подробности свойств
Свойство “model”
“model” GtkTreeModel *
Модель, по которой должен сортироваться объект TreeModelSort.
Флаги: Чтение / Запись / Только для создания
См. также
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.22/GtkTreeModelSort.html