GtkTreeView перетаскивание
GtkTreeView перетаскивание — Интерфейсы для поддержки перетаскивания в GtkTreeView
Функции
| gboolean | gtk_tree_drag_source_drag_data_delete () |
| GdkContentProvider * | gtk_tree_drag_source_drag_data_get () |
| gboolean | gtk_tree_drag_source_row_draggable () |
| gboolean | gtk_tree_drag_dest_drag_data_received () |
| gboolean | gtk_tree_drag_dest_row_drop_possible () |
| GdkContentProvider * | gtk_tree_create_row_drag_content () |
| gboolean | gtk_tree_get_row_drag_data () |
Типы и значения
| GtkTreeDragSource | |
| struct | GtkTreeDragSourceIface |
| GtkTreeDragDest | |
| struct | GtkTreeDragDestIface |
| #define | GTK_TYPE_TREE_ROW_DATA |
Иерархия объектов
GInterface ├── GtkTreeDragDest ╰── GtkTreeDragSource
Известные реализации
GtkTreeDragSource реализован в GtkListStore, GtkTreeModelFilter, GtkTreeModelSort и GtkTreeStore.
GtkTreeDragDest реализован в GtkListStore и GtkTreeStore.
Файлы заголовков
#include <gtk/gtk.h>
Описание
GTK поддерживает перетаскивание в представлении дерева с помощью API высокого и низкого уровня.
API низкого уровня состоит из API GTK DND, дополненного некоторыми вспомогательными функциями для представлений дерева: 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 предоставляет большую гибкость, но ничего не происходит автоматически, и реализация таких расширенных функций, как открытие строк при наведении указателя или автоматическое прокручивание поверх этого API, потребует значительных усилий.
С другой стороны, при работе с API высокого уровня вся работа с данными строк, а также такие функции, как наведение указателя на открытие строк и автоматическая прокрутка, выполняются за вас, но ваши модели должны реализовывать интерфейсы GtkTreeDragSource и GtkTreeDragDest.
Функции
gtk_tree_drag_source_drag_data_delete ()
gboolean gtk_tree_drag_source_drag_data_delete (GtkTreeDragSource *drag_source,GtkTreePath *path);
Запрашивает у GtkTreeDragSource удалить строку по адресу path, так как она была перемещена куда-то ещё с помощью перетаскивания. Возвращает FALSE, если удаление не удалось, потому что path больше не существует или по какой-то другой причине, связанной с моделью. Должно надёжно обрабатывать случай, когда path больше не найдено в модели!
Параметры
drag_source | ||
path | строка, которая перетаскивалась |
Возвращает
TRUE если строка была успешно удалена
gtk_tree_drag_source_drag_data_get ()
GdkContentProvider * gtk_tree_drag_source_drag_data_get (GtkTreeDragSource *drag_source,GtkTreePath *path);
Запрашивает у GtkTreeDragSource вернуть GdkContentProvider, представляющий строку по адресу path. Должно надёжно обрабатывать случай, когда path больше не найдено в модели!
Параметры
drag_source | ||
path | перетаскиваемая строка |
Возвращает
a GdkContentProvider для заданной path или NULL если такового нет.
[nullable][transfer full]
gtk_tree_drag_source_row_draggable ()
gboolean gtk_tree_drag_source_row_draggable (GtkTreeDragSource *drag_source,GtkTreePath *path);
Запрашивает у GtkTreeDragSource, можно ли использовать определённую строку в качестве источника операции перетаскивания. Если источник не реализует этот интерфейс, строка считается перетаскиваемой.
Параметры
drag_source | ||
path | строка, с которой пользователь начинает перетаскивание |
Возвращает
TRUE если строку можно перетащить
gtk_tree_drag_dest_drag_data_received ()
gboolean gtk_tree_drag_dest_drag_data_received (GtkTreeDragDest *drag_dest,GtkTreePath *dest,const GValue *value);
Запрашивает у GtkTreeDragDest вставить строку перед путём dest, используя содержимое из value. Если dest находится вне дерева, так что вставка перед ним невозможна, будет возвращено FALSE. Также, FALSE может быть возвращено, если новая строка не создана по какой-то причине, специфичной для модели. Должно надёжно обрабатывать случай, когда dest больше не найдено в модели!
Параметры
drag_dest | ||
dest | строка, перед которой нужно опустить | |
value | данные для опускания |
Возвращает
была ли создана новая строка перед позицией dest
gtk_tree_drag_dest_row_drop_possible ()
gboolean gtk_tree_drag_dest_row_drop_possible (GtkTreeDragDest *drag_dest,GtkTreePath *dest_path,const GValue *value);
Определяет, возможно ли опустить перед заданной dest_path на той же глубине, что и dest_path. Т.е., можем ли мы опустить данные в value в этом месте. dest_path не обязательно должна существовать; результат, скорее всего, будет FALSE, если родитель dest_path не существует.
Параметры
drag_dest | ||
dest_path | строка назначения | |
value | перетаскиваемые данные |
Возвращает
TRUE если опустить перед dest_path возможно
gtk_tree_create_row_drag_content ()
GdkContentProvider * gtk_tree_create_row_drag_content (GtkTreeModel *tree_model,GtkTreePath *path);
Создаёт поставщик содержимого для перетаскивания path из tree_model.
Параметры
tree_model | ||
path | строка в |
gtk_tree_get_row_drag_data ()
gboolean gtk_tree_get_row_drag_data (const GValue *value,GtkTreeModel **tree_model,GtkTreePath **path);
Получает tree_model и path из значения типа целевого типа GTK_TYPE_TREE_ROW_DATA.
Возвращаемый путь необходимо освободить с помощью gtk_tree_path_free().
Параметры
value | a GValue | |
tree_model | a GtkTreeModel. | [nullable][optional][transfer none][out] |
path | строка в | [nullable][optional][out] |
Возвращает
TRUE если у selection_data был целевой тип GTK_TYPE_TREE_ROW_DATA, в противном случае - допустимо
Типы и значения
GtkTreeDragSource
typedef struct _GtkTreeDragSource GtkTreeDragSource;
struct GtkTreeDragSourceIface
struct GtkTreeDragSourceIface {
/* VTable - not signals */
gboolean (* row_draggable) (GtkTreeDragSource *drag_source,
GtkTreePath *path);
GdkContentProvider * (* drag_data_get)(GtkTreeDragSource *drag_source,
GtkTreePath *path);
gboolean (* drag_data_delete) (GtkTreeDragSource *drag_source,
GtkTreePath *path);
};
Члены
| Запрашивает у GtkTreeDragSource, может ли определённая строка быть источником операции перетаскивания. | |
| Запрашивает у GtkTreeDragSource заполнить selection_data представлением строки по пути path. | |
| Запрашивает у GtkTreeDragSource удалить строку по пути path, так как она была перемещена в другое место через перетаскивание. |
GtkTreeDragDest
typedef struct _GtkTreeDragDest GtkTreeDragDest;
struct GtkTreeDragDestIface
struct GtkTreeDragDestIface {
/* VTable - not signals */
gboolean (* drag_data_received) (GtkTreeDragDest *drag_dest,
GtkTreePath *dest,
const GValue *value);
gboolean (* row_drop_possible) (GtkTreeDragDest *drag_dest,
GtkTreePath *dest_path,
const GValue *value);
};
Члены
| Запрашивает у GtkTreeDragDest вставить строку перед путем dest, получив содержимое строки из selection_data. | |
| Определяет, возможно ли опустить элемент перед заданным dest_path на той же глубине, что и dest_path. |
GTK_TYPE_TREE_ROW_DATA
#define GTK_TYPE_TREE_ROW_DATA (gtk_tree_row_data_get_type ())
Данные в этом формате будут предоставлены gtk_tree_create_row_drag_content() и могут быть использованы с помощью gtk_tree_get_row_drag_data().
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/gtk4-GtkTreeView-drag-and-drop.html