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;
GtkTreeDragSourceIface
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;
gtk_tree_drag_source_drag_data_delete ()
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;
GtkTreeDragDestIface
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;
gtk_tree_drag_dest_drag_data_received ()
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()
.
|
|
|
|
|
Строка в |
Возвращает : |
|