GTK+ Reference Manual |
||||
---|---|---|---|---|
Drag and DropDrag and Drop Функции контролирующие drag and drop обработку |
#include <gtk/gtk.h>
enum GtkDestDefaults;
enum GtkTargetFlags;
void gtk_drag_dest_set (GtkWidget *widget,
GtkDestDefaults flags,
const GtkTargetEntry *targets,
gint n_targets,
GdkDragAction actions);
void gtk_drag_dest_set_proxy (GtkWidget *widget,
GdkWindow *proxy_window,
GdkDragProtocol protocol,
gboolean use_coordinates);
void gtk_drag_dest_unset (GtkWidget *widget);
GdkAtom gtk_drag_dest_find_target (GtkWidget *widget,
GdkDragContext *context,
GtkTargetList *target_list);
GtkTargetList* gtk_drag_dest_get_target_list
(GtkWidget *widget);
void gtk_drag_dest_set_target_list (GtkWidget *widget,
GtkTargetList *target_list);
void gtk_drag_dest_add_text_targets (GtkWidget *widget);
void gtk_drag_dest_add_image_targets (GtkWidget *widget);
void gtk_drag_dest_add_uri_targets (GtkWidget *widget);
void gtk_drag_finish (GdkDragContext *context,
gboolean success,
gboolean del,
guint32 time_);
void gtk_drag_get_data (GtkWidget *widget,
GdkDragContext *context,
GdkAtom target,
guint32 time_);
GtkWidget* gtk_drag_get_source_widget (GdkDragContext *context);
void gtk_drag_highlight (GtkWidget *widget);
void gtk_drag_unhighlight (GtkWidget *widget);
GdkDragContext* gtk_drag_begin (GtkWidget *widget,
GtkTargetList *targets,
GdkDragAction actions,
gint button,
GdkEvent *event);
void gtk_drag_set_icon_widget (GdkDragContext *context,
GtkWidget *widget,
gint hot_x,
gint hot_y);
void gtk_drag_set_icon_pixmap (GdkDragContext *context,
GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask,
gint hot_x,
gint hot_y);
void gtk_drag_set_icon_pixbuf (GdkDragContext *context,
GdkPixbuf *pixbuf,
gint hot_x,
gint hot_y);
void gtk_drag_set_icon_stock (GdkDragContext *context,
const gchar *stock_id,
gint hot_x,
gint hot_y);
void gtk_drag_set_icon_name (GdkDragContext *context,
const gchar *icon_name,
gint hot_x,
gint hot_y);
void gtk_drag_set_icon_default (GdkDragContext *context);
void gtk_drag_set_default_icon (GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask,
gint hot_x,
gint hot_y);
gboolean gtk_drag_check_threshold (GtkWidget *widget,
gint start_x,
gint start_y,
gint current_x,
gint current_y);
void gtk_drag_source_set (GtkWidget *widget,
GdkModifierType start_button_mask,
const GtkTargetEntry *targets,
gint n_targets,
GdkDragAction actions);
void gtk_drag_source_set_icon (GtkWidget *widget,
GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask);
void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
GdkPixbuf *pixbuf);
void gtk_drag_source_set_icon_stock (GtkWidget *widget,
const gchar *stock_id);
void gtk_drag_source_set_icon_name (GtkWidget *widget,
const gchar *icon_name);
void gtk_drag_source_unset (GtkWidget *widget);
void gtk_drag_source_set_target_list (GtkWidget *widget,
GtkTargetList *target_list);
GtkTargetList* gtk_drag_source_get_target_list
(GtkWidget *widget);
void gtk_drag_source_add_text_targets
(GtkWidget *widget);
void gtk_drag_source_add_image_targets
(GtkWidget *widget);
void gtk_drag_source_add_uri_targets (GtkWidget *widget);
GTK+ имеет богатый набор функций для обеспечения взаимодействия процессов методом drag-and-drop (технология перемещения объектов интерфейса, дословно означает - перетащить и бросить). GTK+ может выполнять drag-and-drop (DND) через множество протоколов. В настоящее время поддерживаются протоколы Xdnd и Motif. Также как функциями перечисленными здесь, приложения могут нуждаться в использовании некоторых средств предусмотренных Selections. Кроме того, Drag and Drop API использует сигналы класса GtkWidget.
typedef enum {
GTK_DEST_DEFAULT_MOTION = 1 << 0, /* отвечает на "drag_motion" */
GTK_DEST_DEFAULT_HIGHLIGHT = 1 << 1, /* авто-подсвечивание (auto-highlight) */
GTK_DEST_DEFAULT_DROP = 1 << 2, /* отвечает на "drag_drop" */
GTK_DEST_DEFAULT_ALL = 0x07
} GtkDestDefaults;
Перечисление GtkDestDefaults определяет различные типы действий, которые будут предприняты пользователем для перетаскивания на место назначения.
GTK_DEST_DEFAULT_MOTION |
Если установлено для виджета, GTK+, в течении перетаскивания по этому виджету, будет контролировать возможный список целей и действий перетаскивания этого виджета и вызовет gdk_drag_status() для соответствующего. |
GTK_DEST_DEFAULT_HIGHLIGHT |
Если установлено для виджета, GTK+ будет подсвечивать этот виджет в течении перетаскивания по этому виджету, пока действия и формат перетаскивания действительны. |
GTK_DEST_DEFAULT_DROP |
Если установлено для виджета, когда произойдет доставка, GTK+ будет контролировать возможный список действий и целей для перетаскивания и вызовет gtk_drag_get_data(). В независимости, выполнена доставка или нет, GTK+ вызовет gtk_drag_finish(). Если действие было перемещением, при успешной доставке будет передано TRUE в параметр delete для gtk_drag_finish(). |
GTK_DEST_DEFAULT_ALL |
Если установлено, определяет что все действия по умолчанию должны быть выполнены. |
typedef enum {
GTK_TARGET_SAME_APP = 1 << 0, /*< nick=same-app >*/
GTK_TARGET_SAME_WIDGET = 1 << 1 /*< nick=same-widget >*/
} GtkTargetFlags;
Перечисление GtkTargetFlags используется, чтобы определить ограничения на вход в GtkTargetTable.
GTK_TARGET_SAME_APP |
Если установлено, цель будет выделена для перетаскивания в пределах одного приложения. |
GTK_TARGET_SAME_WIDGET |
Если установлено, цель будет выделена только для перетаскивания в пределах одного виджета. |
void gtk_drag_dest_set (GtkWidget *widget,
GtkDestDefaults flags,
const GtkTargetEntry *targets,
gint n_targets,
GdkDragAction actions);
Устанавливает виджет как потенциальное место для доставки1 при перетаскивании2.
widget : |
|
flags : |
Флаги определяют какие действия GTK+ должен предпринять от имени виджета для доставки на тот виджет. Поля targets и actions используются только если GTK_DEST_DEFAULT_MOTION или GTK_DEST_DEFAULT_DROP получены. |
targets : |
Указатель массива GtkTargetEntrys указывающий тип доставки допустимый для этого виджета. |
n_targets : |
Число записей в targets. |
actions : |
Битовая маска возможных действий для доставки в этот виджет. |
void gtk_drag_dest_set_proxy (GtkWidget *widget,
GdkWindow *proxy_window,
GdkDragProtocol protocol,
gboolean use_coordinates);
Устанавливает этот виджет как вспомогательный для доставки в другие окна.
widget : |
|
proxy_window : |
Окно отправления событий перетаскивания |
protocol : |
Протокол перетаскивания принятый proxy_window (для определения протокола используйте gdk_drag_get_protocol()) |
use_coordinates : |
Если TRUE, отправляются координаты места назначения, потому что это встроенное суб-окно. |
void gtk_drag_dest_unset (GtkWidget *widget);Очищает информацию о месте перетаскивания установленную с помощью gtk_drag_dest_set(). Виджет не будет больше получать события перемещения.
widget : |
GdkAtom gtk_drag_dest_find_target (GtkWidget *widget,
GdkDragContext *context,
GtkTargetList *target_list);
Ищет соответствие между context->targets и dest_target_list, возвращает первый соответствующий цели, иначе возвращает GDK_NONE. dest_target_list - обычно возвращаемое значение gtk_drag_dest_get_target_list(), но некоторые виджеты могут иметь различия допустимых целей для различных виджетов; на этот случай, они имеют обработчик drag_motion помещающий правильный список целей в эту функцию.
widget : |
Целевой виджет перетаскивания |
context : |
Содержимое перетаскивания |
target_list : |
Список допустимых для перетаскивания целей, или NULL для использования gtk_drag_dest_get_target_list (widget). |
Возвращает : |
Первую цель, которую исходное предложение и место доставки смогут принять, или GDK_NONE |
GtkTargetList* gtk_drag_dest_get_target_list
(GtkWidget *widget);
Возвращает список целей допустимых для операции drag-and-drop определённым виджетом.
widget : |
|
Возвращает : |
GtkTargetList, или NULL если не существует |
void gtk_drag_dest_set_target_list (GtkWidget *widget,
GtkTargetList *target_list);
Устанавливает типы целей допустимые данным виджетом для операции drag-and-drop. Сначала виджет должен быть сделан местоположением для перетаскивания с помощью gtk_drag_dest_set().
widget : |
GtkWidget местоположение перетаскивания |
target_list : |
Список доступных для перетаскивания целей, или NULL для несуществующих |
void gtk_drag_dest_add_text_targets (GtkWidget *widget);Добавляет поддержку текстовых целей GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_text_targets() и gtk_drag_dest_set_target_list().
widget : |
GtkWidget местоположение перетаскивания |
Начиная с версии 2.6
void gtk_drag_dest_add_image_targets (GtkWidget *widget);Добавляет поддержку целевых изображений GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_image_targets() и gtk_drag_dest_set_target_list().
widget : |
GtkWidget местоположение перетаскивания |
Начиная с версии 2.6
void gtk_drag_dest_add_uri_targets (GtkWidget *widget);Добавляет целевую поддержку URI GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_uri_targets() и gtk_drag_dest_set_target_list().
widget : |
GtkWidget местоположение перетаскивания |
Начиная с версии 2.6
void gtk_drag_finish (GdkDragContext *context,
gboolean success,
gboolean del,
guint32 time_);
Сообщает источнику перетаскивания об окончании операции доставки, поэтому данные больше не требуются.
context : |
Содержимое перетаскивания. |
success : |
Флаг информирующий об успешном или нет завершении доставки. |
del : |
Флаг информирующий, должен ли источник удалять оригинальные данные. (т.е. Выполнить перемещение а не копирование) |
time_ : |
Метка временем для сигнала "drag_data_drop". |
void gtk_drag_get_data (GtkWidget *widget,
GdkDragContext *context,
GdkAtom target,
guint32 time_);
Получает данные связанные с перетаскиванием. Когда данные получены, или поиск заканчивается неудачей, GTK+ будет производить сигнал "drag_data_received". Неудачный поиск информируется отрицательной длиной поля selection_data параметра сигнала. Однако, когда вызвана gtk_drag_get_data(), потому что было установлено GTK_DEST_DEFAULT_DROP, то когда виджет не будет получать уведомления о не удавшемся броске.
widget : |
Виджет который получит сигнал "drag_data_received". |
context : |
Содержимое перетаскивания |
target : |
Цель (форма данных) поиска. |
time_ : |
Временная метка для поиска данных. Это будет в основном время поиска в "drag_data_motion" или "drag_data_drop" signal. |
GtkWidget* gtk_drag_get_source_widget (GdkDragContext *context);Определяет исходный виджет для перетаскивания.
context : |
(сторона получателя) содержимое перетаскивания. |
Возвращает : |
Если перетаскивание происходит в пределах одного приложения, возвращается указатель на исходный виджет. Иначе, NULL. |
void gtk_drag_highlight (GtkWidget *widget);Подсвечивает виджет. Прикрепляет обработчики к "expose_event" и "draw", таким образом подсветка будет продолжит отображаться, до тех пор пока не вызвана gtk_drag_unhighlight().
widget : |
Подсвечиваемый виджет |
void gtk_drag_unhighlight (GtkWidget *widget);Удаляет подсветку установленную gtk_drag_highlight() для виджета.
widget : |
Виджет с которого удаляется подсветка. |
GdkDragContext* gtk_drag_begin (GtkWidget *widget,
GtkTargetList *targets,
GdkDragAction actions,
gint button,
GdkEvent *event);
Инициализирует перетаскивание на исходной стороне. Функцию нужно использовать только когда приложение запустило перетаскивание самостоятельно, и не нужно использовать когда используется gtk_drag_source_set().
widget : |
Исходный виджет. |
targets : |
Цели (форматы данных) в которые могут передаваться исходные данные. |
actions : |
Битовая-маска (bitmask) допустимого действия перетаскивания. |
button : |
Кнопка нажимаемая пользователем для начала перетаскивания. |
event : |
Событие вызвавшее начало перетаскивания. |
Возвращает : |
Содержимое перетаскивания. |
void gtk_drag_set_icon_widget (GdkDragContext *context,
GtkWidget *widget,
gint hot_x,
gint hot_y);
Изменяет значок для виджета к данному виджету. GTK+ не будет удалять значок, поэтому, если вы не хотите его сохранять, вы должны подключить сигнал "drag_end" и удалить его самостоятельно.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
widget : |
Окно верхнего уровня используемое как значок. |
hot_x : |
Смещение X, в пределах widget , «горячей» точки. |
hot_y : |
Смещение Y, в пределах widget , «горячей» точки. |
void gtk_drag_set_icon_pixmap (GdkDragContext *context,
GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask,
gint hot_x,
gint hot_y);
Устанавливает pixmap как значок для данного перетаскивания. GTK+ сохраняет справочную информацию для параметров и освобождает их когда они больше не нужны. Вообще, gtk_drag_set_icon_pixbuf() будет более удобной для использования.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
colormap : |
Карта цвета для значка |
pixmap : |
Данные изображения для значка |
mask : |
Маска прозрачности для значка |
hot_x : |
Смещение X, относительно пределов pixmap , «горячей» точки. |
hot_y : |
Смещение Y, относительно пределов pixmap , «горячей» точки. |
void gtk_drag_set_icon_pixbuf (GdkDragContext *context,
GdkPixbuf *pixbuf,
gint hot_x,
gint hot_y);
Устанавливает pixbuf как значок для данного перетаскивания.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
pixbuf : |
the GdkPixbuf to use as the drag icon. |
hot_x : |
Смещение X, относительно пределов widget , «горячей» точки. |
hot_y : |
Смещение Y, относительно пределов widget , «горячей» точки. |
void gtk_drag_set_icon_stock (GdkDragContext *context,
const gchar *stock_id,
gint hot_x,
gint hot_y);
Устанавливает значок для данного перетаскивания с исходным ID.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
stock_id : |
ID исходного значка используемого для перетаскивания. |
hot_x : |
Смещение X, относительно пределов значка , «горячей» точки. |
hot_y : |
Смещение Y, относительно пределов значка , «горячей» точки. |
void gtk_drag_set_icon_name (GdkDragContext *context,
const gchar *icon_name,
gint hot_x,
gint hot_y);
Устанавливает значок для данного перетаскивания из именной темы значков. Смотрите документацию GtkIconTheme, для подробного изучения деталей. Отметьте, размер значка зависит от темы значков (значок загружается в символическом размере GTK_ICON_SIZE_DND), таким образом hot_x и hot_y должны использоваться осторожно.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
icon_name : |
Имя используемого значка |
hot_x : |
смещение X горячей точки в пределах значка |
hot_y : |
смещение Y горячей точки в пределах значка |
Начиная с версии 2.8
void gtk_drag_set_icon_default (GdkDragContext *context);Устанавливает значок для специального перетаскивания, значком по умолчанию.
context : |
Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания) |
void gtk_drag_set_default_icon (GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask,
gint hot_x,
gint hot_y);
gtk_drag_set_default_icon устарела и не должна использоваться во-вновь создаваемом коде.
Изменяет значок по умолчанию для перетаскивания. GTK+ сохраняет справочную информацию для параметров и освобождает их когда они больше не нужны. Функция является устаревшей. Значок по умолчанию должен теперь изменяться через систему заготовок, изменяя заготовку pixbuf для GTK_STOCK_DND.
colormap : |
Цветовая карта для значка. |
pixmap : |
Данные изображения для значка. |
mask : |
Маска прозрачности для изображения. |
hot_x : |
Смещение X, относительно пределов widget , «горячей» точки. |
hot_y : |
Смещение Y, относительно пределов widget , «горячей» точки. |
gboolean gtk_drag_check_threshold (GtkWidget *widget,
gint start_x,
gint start_y,
gint current_x,
gint current_y);
Выясняет, если перемещение мышки началось в (start_x, start_y) и закончилось в (current_x, current_y) имея помещаемый GTK+ порог перетаскивания, начинается операция drag-and-drop.
widget : |
|
start_x : |
X координаты начала перемещения |
start_y : |
Y координаты начала перемещения |
current_x : |
Текущие X координаты |
current_y : |
Текущие Y координаты |
Возвращает : |
TRUE если порог перемещения помещен. |
void gtk_drag_source_set (GtkWidget *widget,
GdkModifierType start_button_mask,
const GtkTargetEntry *targets,
gint n_targets,
GdkDragAction actions);
Устанавливает виджет так, что GTK+ будет начинать операцию перетаскивания, когда пользователь нажимает и перемещает виджет. Виджет должен иметь окно.
widget : |
|
start_button_mask : |
Битовая маска кнопки которая может начать перетаскивание |
targets : |
Таблица целей которые будут поддерживаться перетаскиванием |
n_targets : |
Число пунктов в targets |
actions : |
Битовая маска возможных действий для перетаскивания из этого виджета. |
void gtk_drag_source_set_icon (GtkWidget *widget,
GdkColormap *colormap,
GdkPixmap *pixmap,
GdkBitmap *mask);
Устанавливает значок, который будет использоваться для перетаскивания из специального виджета pixmap/mask. GTK+ сохраняет справочную информацию для аргументов и освобождает когда она больше не нужна. Используйте вместо этого gtk_drag_source_set_icon_pixbuf().
widget : |
|
colormap : |
Цветовая карта значка |
pixmap : |
Данные изображения для значка |
mask : |
Прозрачная маска для изображения. |
void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
GdkPixbuf *pixbuf);
Устанавливает значок, который будет использоваться для перетаскивания из специального виджета GdkPixbuf. GTK+ сохраняет справочную информацию для pixbuf и освобождает когда она больше не нужна
widget : |
|
pixbuf : |
GdkPixbuf для значка перетаскивания |
void gtk_drag_source_set_icon_stock (GtkWidget *widget,
const gchar *stock_id);
Устанавливает значок, который будет использоваться для перетаскивания, специальной исходной заготовки.
widget : |
|
stock_id : |
ID заготовленного для использования значка |
void gtk_drag_source_set_icon_name (GtkWidget *widget,
const gchar *icon_name);
Устанавливает значок, который будет использоваться для перетаскивания, специальной исходной темой значков. Смотрите документацию для GtkIconTheme.
widget : |
|
icon_name : |
Имя используемого значка |
Начиная с версии 2.8
void gtk_drag_source_unset (GtkWidget *widget);Отменяет действия gtk_drag_source_set().
widget : |
void gtk_drag_source_set_target_list (GtkWidget *widget,
GtkTargetList *target_list);
Изменяет типовую цель которую этот виджет предлагает для drag-and-drop. Сначала виджет должен быть сделан источником перетаскивания при помощи gtk_drag_source_set().
widget : |
GtkWidget это источник перетаскивания |
target_list : |
Список доступных для перетаскивания целей, или NULL если недоступны |
Начиная с версии 2.4
GtkTargetList* gtk_drag_source_get_target_list
(GtkWidget *widget);
Получает список целей, которые виджет может предоставить для drag-and-drop.
widget : |
|
Возвращает : |
GtkTargetList, или NULL если не существует |
Начиная с версии 2.4
void gtk_drag_source_add_text_targets
(GtkWidget *widget);
Добавляет текстовую цель, поддерживаемый GtkSelection список целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_text_targets() и gtk_drag_source_set_target_list().
widget : |
GtkWidget это источник перемещения |
Начиная с версии 2.6
void gtk_drag_source_add_image_targets
(GtkWidget *widget);
Добавляет перезаписываемые цели изображения, поддерживаемые GtkSelection в списке целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_image_targets() и gtk_drag_source_set_target_list().
widget : |
GtkWidget это источник перемещения |
Начиная с версии 2.6
void gtk_drag_source_add_uri_targets (GtkWidget *widget);Добавляет URI целей , поддерживаемые GtkSelection в списке целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_uri_targets() и gtk_drag_source_set_target_list().
widget : |
GtkWidget это источник перемещения |
Начиная с версии 2.6
1Доставка действие завершающее операцию drag-and-drop.
2Перетаскивание составное действие операции перемещения drag-and-drop.