| 
 | |
|  | 
| GTK+ Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Implemented Interfaces | Properties | ||||
| GtkTreeModelSortGtkTreeModelSort 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); }
typedef struct _GtkTreeModelSort GtkTreeModelSort;
Структура не имеет непосредственного доступа. Используйте для доступа функции приведённые ниже.
GtkTreeModel* gtk_tree_model_sort_new_with_model
                                            (GtkTreeModel *child_model);
Создаёт новый GtkTreeModel,
с child_model как дочерней моделью.
| 
 | |
| Возвращает : | Новый GtkTreeModel. | 
GtkTreeModel* gtk_tree_model_sort_get_model (GtkTreeModelSort *tree_model);
Возвращает модель сортировки GtkTreeModelSort.
| 
 | |
| Возвращает : | отсортированную «дочернюю модель» | 
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.
| 
 | |
| 
 | GtkTreePath для преобразования | 
| Возвращает : | Вновь размещенный GtkTreePath,
			или  | 
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.
| 
 | |
| 
 | Неинициализированный GtkTreeIter. | 
| 
 | Допустимый GtkTreeIter указывающий строку в дочерней модели | 
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.
| 
 | |
| 
 | GtkTreePath для преобразования | 
| Возвращает : | Вновь распределённый GtkTreePath,
			или  | 
void        gtk_tree_model_sort_convert_iter_to_child_iter
                                            (GtkTreeModelSort *tree_model_sort,
                                             GtkTreeIter *child_iter,
                                             GtkTreeIter *sorted_iter);
Устанавливает child_iter
указывающий строку указанную в
sorted_iter.
| 
 | |
| 
 | Неинициализированный GtkTreeIter | 
| 
 | Допустимый GtkTreeIter
			указывающий строку в  | 
void        gtk_tree_model_sort_reset_default_sort_func
                                            (GtkTreeModelSort *tree_model_sort);Сбрасывает функцию сортировки по умолчанию в состояние 'unsorted'. Таким образом, определяется тот же порядок, что и у дочерней модели. Пересортировка модели в тот же порядок что и у дочерней, будет производится, только если модель GtkTreeModelSort в 'unsorted' состоянии.
| 
 | 
void gtk_tree_model_sort_clear_cache (GtkTreeModelSort *tree_model_sort);
Эта функция почти никогда не вызывается.
Она очищает tree_model_sort от
любых кэшированных итераторов которые
не были очищены с помощью
gtk_tree_model_ref_node().
Это может быть полезно, если дочерняя
модель отсортирована статично (и не
часто изменяется) и был длительный
доступ к неочищенным узлам. Как побочный
эффект этой функции, все неочищенные
итераторы будут недоступны.
| 
 | 
gboolean    gtk_tree_model_sort_iter_is_valid
                                            (GtkTreeModelSort *tree_model_sort,
                                             GtkTreeIter *iter);Эта функция бесполезна. Используйте её только в случаях отладки или тестирования.
Проверяет доступен ли полученный итератор в этой GtkTreeModelSort.
| 
 | |
| 
 | |
| Возвращает : | 
Начиная с версии 2.2
model""model" GtkTreeModel : Read / Write / Construct Only
Модель для сортировки в TreeModelSort.
GtkTreeModel, GtkListStore, GtkTreeStore, GtkTreeSortable, GtkTreeModelFilter
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |