Spec-Zone.ru › GTK 4.0

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

a GtkTreeDragSource

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

a GtkTreeDragSource

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

a GtkTreeDragSource

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

a GtkTreeDragDest

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

a GtkTreeDragDest

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

a GtkTreeModel

path

строка в tree_model

Возвращает

новый GdkContentProvider.

[transfer full]

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

строка в tree_model .

[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);
};

Члены

row_draggable ()

Запрашивает у GtkTreeDragSource, может ли определённая строка быть источником операции перетаскивания.

drag_data_get ()

Запрашивает у GtkTreeDragSource заполнить selection_data представлением строки по пути path.

drag_data_delete ()

Запрашивает у 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);
};

Члены

drag_data_received ()

Запрашивает у GtkTreeDragDest вставить строку перед путем dest, получив содержимое строки из selection_data.

row_drop_possible ()

Определяет, возможно ли опустить элемент перед заданным 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API