1/* gtktreednd.h
2 * Copyright (C) 2001 Red Hat, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __GTK_TREE_DND_H__
19#define __GTK_TREE_DND_H__
20
21#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
22#error "Only <gtk/gtk.h> can be included directly."
23#endif
24
25#include <gtk/gtktreemodel.h>
26
27G_BEGIN_DECLS
28
29/**
30 * GTK_TYPE_TREE_ROW_DATA:
31 * Magic `GType` to use when dragging rows in a `GtkTreeModel`.
32 *
33 * Data in this format will be provided by gtk_tree_create_row_drag_content()
34 * and can be consumed via gtk_tree_get_row_drag_data().
35 */
36#define GTK_TYPE_TREE_ROW_DATA (gtk_tree_row_data_get_type ())
37GDK_AVAILABLE_IN_ALL
38GType gtk_tree_row_data_get_type (void) G_GNUC_CONST;
39
40
41#define GTK_TYPE_TREE_DRAG_SOURCE (gtk_tree_drag_source_get_type ())
42#define GTK_TREE_DRAG_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_DRAG_SOURCE, GtkTreeDragSource))
43#define GTK_IS_TREE_DRAG_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_DRAG_SOURCE))
44#define GTK_TREE_DRAG_SOURCE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_TREE_DRAG_SOURCE, GtkTreeDragSourceIface))
45
46typedef struct _GtkTreeDragSource GtkTreeDragSource; /* Dummy typedef */
47typedef struct _GtkTreeDragSourceIface GtkTreeDragSourceIface;
48
49/**
50 * GtkTreeDragSourceIface:
51 * @row_draggable: Asks the `GtkTreeDragSource` whether a particular
52 * row can be used as the source of a DND operation.
53 * @drag_data_get: Asks the `GtkTreeDragSource` to fill in
54 * selection_data with a representation of the row at path.
55 * @drag_data_delete: Asks the `GtkTreeDragSource` to delete the row at
56 * path, because it was moved somewhere else via drag-and-drop.
57 */
58struct _GtkTreeDragSourceIface
59{
60 /*< private >*/
61 GTypeInterface g_iface;
62
63 /*< public >*/
64
65 /* VTable - not signals */
66
67 gboolean (* row_draggable) (GtkTreeDragSource *drag_source,
68 GtkTreePath *path);
69
70 GdkContentProvider * (* drag_data_get)(GtkTreeDragSource *drag_source,
71 GtkTreePath *path);
72
73 gboolean (* drag_data_delete) (GtkTreeDragSource *drag_source,
74 GtkTreePath *path);
75};
76
77GDK_AVAILABLE_IN_ALL
78GType gtk_tree_drag_source_get_type (void) G_GNUC_CONST;
79
80/* Returns whether the given row can be dragged */
81GDK_AVAILABLE_IN_ALL
82gboolean gtk_tree_drag_source_row_draggable (GtkTreeDragSource *drag_source,
83 GtkTreePath *path);
84
85/* Deletes the given row, or returns FALSE if it can't */
86GDK_AVAILABLE_IN_ALL
87gboolean gtk_tree_drag_source_drag_data_delete (GtkTreeDragSource *drag_source,
88 GtkTreePath *path);
89
90/* Fills in selection_data with type selection_data->target based on
91 * the row denoted by path, returns TRUE if it does anything
92 */
93GDK_AVAILABLE_IN_ALL
94GdkContentProvider *
95 gtk_tree_drag_source_drag_data_get (GtkTreeDragSource *drag_source,
96 GtkTreePath *path);
97
98#define GTK_TYPE_TREE_DRAG_DEST (gtk_tree_drag_dest_get_type ())
99#define GTK_TREE_DRAG_DEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_DRAG_DEST, GtkTreeDragDest))
100#define GTK_IS_TREE_DRAG_DEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_DRAG_DEST))
101#define GTK_TREE_DRAG_DEST_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_TREE_DRAG_DEST, GtkTreeDragDestIface))
102
103typedef struct _GtkTreeDragDest GtkTreeDragDest; /* Dummy typedef */
104typedef struct _GtkTreeDragDestIface GtkTreeDragDestIface;
105
106/**
107 * GtkTreeDragDestIface:
108 * @drag_data_received: Asks the `GtkTreeDragDest` to insert a row
109 * before the path dest, deriving the contents of the row from
110 * selection_data.
111 * @row_drop_possible: Determines whether a drop is possible before
112 * the given dest_path, at the same depth as dest_path.
113 */
114struct _GtkTreeDragDestIface
115{
116 /*< private >*/
117 GTypeInterface g_iface;
118
119 /*< public >*/
120
121 /* VTable - not signals */
122
123 gboolean (* drag_data_received) (GtkTreeDragDest *drag_dest,
124 GtkTreePath *dest,
125 const GValue *value);
126
127 gboolean (* row_drop_possible) (GtkTreeDragDest *drag_dest,
128 GtkTreePath *dest_path,
129 const GValue *value);
130};
131
132GDK_AVAILABLE_IN_ALL
133GType gtk_tree_drag_dest_get_type (void) G_GNUC_CONST;
134
135/* Inserts a row before dest which contains data in selection_data,
136 * or returns FALSE if it can't
137 */
138GDK_AVAILABLE_IN_ALL
139gboolean gtk_tree_drag_dest_drag_data_received (GtkTreeDragDest *drag_dest,
140 GtkTreePath *dest,
141 const GValue *value);
142
143
144/* Returns TRUE if we can drop before path; path may not exist. */
145GDK_AVAILABLE_IN_ALL
146gboolean gtk_tree_drag_dest_row_drop_possible (GtkTreeDragDest *drag_dest,
147 GtkTreePath *dest_path,
148 const GValue *value);
149
150
151/* The selection data would normally have target type GTK_TREE_MODEL_ROW in this
152 * case. If the target is wrong these functions return FALSE.
153 */
154GDK_AVAILABLE_IN_ALL
155GdkContentProvider *
156 gtk_tree_create_row_drag_content (GtkTreeModel *tree_model,
157 GtkTreePath *path);
158GDK_AVAILABLE_IN_ALL
159gboolean gtk_tree_get_row_drag_data (const GValue *value,
160 GtkTreeModel **tree_model,
161 GtkTreePath **path);
162
163G_END_DECLS
164
165#endif /* __GTK_TREE_DND_H__ */
166

source code of gtk/gtk/gtktreednd.h