| 
 | |
|  | 
| GTK+ Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Known Implementations | ||||
| GtkTreeView drag-and-dropGtkTreeView drag-and-drop Интерфейс для поддержки drag-and-drop в GtkTreeView | 
#include <gtk/gtk.h>
            GtkTreeDragSource;
            GtkTreeDragSourceIface;
gboolean    gtk_tree_drag_source_drag_data_delete
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path);
gboolean    gtk_tree_drag_source_drag_data_get
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path,
                                             GtkSelectionData *selection_data);
gboolean    gtk_tree_drag_source_row_draggable
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path);
            GtkTreeDragDest;
            GtkTreeDragDestIface;
gboolean    gtk_tree_drag_dest_drag_data_received
                                            (GtkTreeDragDest *drag_dest,
                                             GtkTreePath *dest,
                                             GtkSelectionData *selection_data);
gboolean    gtk_tree_drag_dest_row_drop_possible
                                            (GtkTreeDragDest *drag_dest,
                                             GtkTreePath *dest_path,
                                             GtkSelectionData *selection_data);
gboolean    gtk_tree_set_row_drag_data      (GtkSelectionData *selection_data,
                                             GtkTreeModel *tree_model,
                                             GtkTreePath *path);
gboolean    gtk_tree_get_row_drag_data      (GtkSelectionData *selection_data,
                                             GtkTreeModel **tree_model,
                                             GtkTreePath **path);
GInterface +----GtkTreeDragSource GInterface +----GtkTreeDragDest
GtkTreeDragSource реализован GtkTreeModelSort, GtkTreeStore, GtkListStore и GtkTreeModelFilter.
GtkTreeDragDest реализован GtkTreeStore и GtkListStore.
GTK+ поддерживает Drag-and-Drop в деревьях просмотра с помощью низкоуровневых и высокоуровневых API.
API низкого уровня содержит GTK+ DND API,
расширенный некоторыми сервисными
функциями treeview: gtk_tree_view_set_drag_dest_row(),
gtk_tree_view_get_drag_dest_row(),
gtk_tree_view_get_dest_row_at_pos(),
gtk_tree_view_create_row_drag_icon(),
gtk_tree_set_row_drag_data()
и gtk_tree_get_row_drag_data().
Этот API представляет большую гибкость,
но ничего не выполняет автоматически,
а осуществление расширенных особенностей,
таких как открытие строк при наведении
(hover-to-open-rows) или автоматическое
прокручивание выше уровня работы этого
API. 
С другой стороны, если вы создаёте высокоуровневый API, то весь обсчет строк выполняется за вас, так же как открытие при наведении (hover-to-open) и автоматическое прокручивание (auto-scroll), но ваши модели должны реализовывать интерфейсы GtkTreeDragSource и GtkTreeDragDest.
typedef struct _GtkTreeDragSource GtkTreeDragSource;
typedef struct {
  GTypeInterface g_iface;
  /* VTable - not signals */
  gboolean     (* row_draggable)        (GtkTreeDragSource   *drag_source,
                                         GtkTreePath         *path);
  gboolean     (* drag_data_get)        (GtkTreeDragSource   *drag_source,
                                         GtkTreePath         *path,
                                         GtkSelectionData    *selection_data);
  gboolean     (* drag_data_delete)     (GtkTreeDragSource *drag_source,
                                         GtkTreePath       *path);
} GtkTreeDragSourceIface;
gboolean    gtk_tree_drag_source_drag_data_delete
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path);
Запрашивает GtkTreeDragSource
для удаления строки из path,
потому что она была перемещена куда либо
посредством операции drag-and-drop. Возвращает
FALSE
если удаление не удалось потому что path
больше не существует, или по некоторым
специфичным причинам модели. Должна
надёжно обрабатывать path не
находящийся больше в модели!
| 
 | |
| 
 | Строка которую перетащили | 
| Возвращает : | 
 | 
gboolean    gtk_tree_drag_source_drag_data_get
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path,
                                             GtkSelectionData *selection_data);
Запрашивает GtkTreeDragSource
для заполнения в selection_data с
представлением строки в path.
selection_data->target выдаёт
необходимый тип данных. Должна надёжно
обрабатывать path
не находящийся больше в модели!
| 
 | |
| 
 | Строка которую перетащили | 
| 
 | GtkSelectionData для заполнения данными из перетаскиваемой строки | 
| Возвращает : | 
 | 
gboolean    gtk_tree_drag_source_row_draggable
                                            (GtkTreeDragSource *drag_source,
                                             GtkTreePath *path);Запрашивает GtkTreeDragSource может ли определенная строка быть источником DND операции. Если источник не реализует этот интерфейс, строка это предполагаемый объект перемещения.
| 
 | |
| 
 | Строка на которой пользователь начал перетаскивание | 
| Возвращает : | 
 | 
typedef struct _GtkTreeDragDest GtkTreeDragDest;
typedef struct {
  GTypeInterface g_iface;
  /* VTable - not signals */
  gboolean     (* drag_data_received) (GtkTreeDragDest   *drag_dest,
                                       GtkTreePath       *dest,
                                       GtkSelectionData  *selection_data);
  gboolean     (* row_drop_possible)  (GtkTreeDragDest   *drag_dest,
                                       GtkTreePath       *dest_path,
                                       GtkSelectionData  *selection_data);
} GtkTreeDragDestIface;
gboolean    gtk_tree_drag_dest_drag_data_received
                                            (GtkTreeDragDest *drag_dest,
                                             GtkTreePath *dest,
                                             GtkSelectionData *selection_data);
Запрашивает GtkTreeDragDest
для вставки строки перед dest,
получая содержимое строки из selection_data.
Если dest вне дерева, так что
вставка перед ним невозможна, возвращается
FALSE.
Кроме того, FALSE
может быть возвращено если новая строка
не создана по специфичным для модели
причинам. Должна надёжно обрабатывать
dest не находящийся больше в
модели!
| 
 | |
| 
 | Строка для перетаскивания вперед | 
| 
 | Данные для перетаскивания | 
| Возвращает : | Была ли новая строка создана перед
			позицией  | 
gboolean    gtk_tree_drag_dest_row_drop_possible
                                            (GtkTreeDragDest *drag_dest,
                                             GtkTreePath *dest_path,
                                             GtkSelectionData *selection_data);
Определяет возможность перетаскивания
перед данным dest_path, в той же
самой глубине как dest_path. То
есть, можем мы перетащить данные в
selection_data в то же положение.
dest_path не должен существовать;
однако, возвращаемое значение почти
наверняка будет FALSE
если родитель dest_path не будет
существовать.
| 
 | |
| 
 | Строка назначения | 
| 
 | Перетаскиваемые данные | 
| Возвращает : | 
 | 
gboolean    gtk_tree_set_row_drag_data      (GtkSelectionData *selection_data,
                                             GtkTreeModel *tree_model,
                                             GtkTreePath *path);
Устанавливает выделение данных целевого
типа GTK_TREE_MODEL_ROW. Обычно используется
в обработчике drag_data_get.
| 
 | некоторый GtkSelectionData | 
| 
 | |
| 
 | Строка в  | 
| Возвращает : | 
 | 
gboolean    gtk_tree_get_row_drag_data      (GtkSelectionData *selection_data,
                                             GtkTreeModel **tree_model,
                                             GtkTreePath **path);
Определяет tree_model и path
из выделенных данных целевого типа
GTK_TREE_MODEL_ROW. Обычно вызывается из
обработчика drag_data_received. Эта функция
должна использоваться только если
selection_data происходит из того
же процесса который вызвал эту функцию,
потому что указатель на дерево модели
помещается рядом. Если вы не находитесь
в том же самом процессе, то вы получите
искажение памяти. В GtkTreeDragDest
drag_data_received обработчике, вы можете
предположить что выделенные данные
типа GTK_TREE_MODEL_ROW находятся в
текущемм процессе. Возвращаемый путь
должен освобождаться с помощью
gtk_tree_path_free().
| 
 | |
| 
 | |
| 
 | Строка в  | 
| Возвращает : | 
 | 
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |