The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру