Spec-Zone.ru › GTK 3.20

GtkTreeView перетаскивание

GtkTreeView перетаскивание — Интерфейсы для поддержки перетаскивания в GtkTreeView

Функции

gboolean gtk_tree_drag_source_drag_data_delete ()
gboolean 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 ()
gboolean gtk_tree_set_row_drag_data ()
gboolean gtk_tree_get_row_drag_data ()

Типы и значения

GtkTreeDragSource
struct GtkTreeDragSourceIface
GtkTreeDragDest
struct GtkTreeDragDestIface

Иерархия объектов

    GInterface
    ├── GtkTreeDragDest
    ╰── GtkTreeDragSource

Известные реализации

GtkTreeDragSource реализуется GtkListStore, GtkTreeModelFilter, GtkTreeModelSort и GtkTreeStore.

GtkTreeDragDest реализуется GtkListStore и GtkTreeStore.

Файлы заголовков

#include <gtk/gtk.h>

Описание

GTK+ поддерживает перетаскивание в древовидных представлениях с помощью API высокого и низкого уровня.

API низкого уровня состоит из API перетаскивания GTK+, дополненного некоторыми вспомогательными функциями для древовидных представлений: 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 ()

gboolean
gtk_tree_drag_source_drag_data_get (GtkTreeDragSource *drag_source,
                                    GtkTreePath *path,
                                    GtkSelectionData *selection_data);

Запрашивает у GtkTreeDragSource заполнить selection_data представлением строки по пути path. selection_data->target задаёт требуемый тип данных. Должен надёжно обрабатывать случай, когда path больше не найдено в модели!

Параметры

drag_source

a GtkTreeDragSource

path

строка, которая перетаскивалась

selection_data

a GtkSelectionData для заполнения данными из перетаскиваемой строки

Возвращает

TRUE, если данные нужного типа были предоставлены

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,
                                       GtkSelectionData *selection_data);

Запрашивает у GtkTreeDragDest вставить строку перед путем dest, используя содержимое из selection_data. Если dest находится вне дерева, так что вставка перед ним невозможна, возвращается FALSE. Также, FALSE может быть возвращено, если новая строка не создана по какой-либо причине, связанной с моделью. Должен надёжно обрабатывать случай, когда dest больше не найдено в модели!

Параметры

drag_dest

a GtkTreeDragDest

dest

строка, перед которой необходимо выполнить вставку

selection_data

данные для вставки

Возвращает

указывает, была ли создана новая строка перед позицией dest

gtk_tree_drag_dest_row_drop_possible ()

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 не существует.

Параметры

drag_dest

a GtkTreeDragDest

dest_path

целевая строка

selection_data

перетаскиваемые данные

Возвращает

TRUE, если вставка перед dest_path возможна

gtk_tree_set_row_drag_data ()

gboolean
gtk_tree_set_row_drag_data (GtkSelectionData *selection_data,
                            GtkTreeModel *tree_model,
                            GtkTreePath *path);

Устанавливает данные выбора целевого типа GTK_TREE_MODEL_ROW. Обычно используется в обработчике drag_data_get.

Параметры

selection_data

некоторая информация GtkSelectionData

tree_model

a GtkTreeModel

path

строка в tree_model

Возвращает

TRUE, если GtkSelectionData имел правильный целевой тип, чтобы разрешить установку строки дерева

gtk_tree_get_row_drag_data ()

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 исходит из того же процесса, что и вызывающий эту функцию, потому что указатель на модель дерева передаётся. Если вы не в том же процессе, то у вас возникнет ошибка обращения к памяти. В обработчике drag_data_received GtkTreeDragDest можно предположить, что данные выделения типа GTK_TREE_MODEL_ROW поступают из текущего процесса. Возвращаемый путь необходимо освободить с помощью gtk_tree_path_free().

Параметры

selection_data

a GtkSelectionData

tree_model

a GtkTreeModel.

[nullable][optional][transfer none][out]

path

строка в tree_model .

[nullable][optional][out]

Возвращает

TRUE, если selection_data имел целевой тип GTK_TREE_MODEL_ROW и в противном случае является допустимым

Типы и значения

GtkTreeDragSource

typedef struct _GtkTreeDragSource GtkTreeDragSource;

struct GtkTreeDragSourceIface

struct GtkTreeDragSourceIface {
  /* 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);
};

Члены

row_draggable ()

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

drag_data_get ()

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

drag_data_delete ()

Запрашивает у GtkTreeDragSource удалить строку по пути, потому что она была перемещена в другое место через drag-and-drop.

GtkTreeDragDest

typedef struct _GtkTreeDragDest GtkTreeDragDest;

struct GtkTreeDragDestIface

struct GtkTreeDragDestIface {
  /* 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);
};

Члены

drag_data_received ()

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

row_drop_possible ()

Определяет, возможен ли выброс перед заданным dest_path, на той же глубине, что и dest_path.

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/gtk3-GtkTreeView-drag-and-drop.html

Spec-Zone.ru

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