00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _vdkdnd_h
00032 #define _vdkdnd_h
00033 #include <vdk/vdkobj.h>
00034 #include <vdk/dlist.h>
00035 #include <vdk/vdkprops.h>
00036 #include <vdk/vdkutils.h>
00037 #include <vdk/vdkcustom.h>
00038 #include <vdk/rawpixmap.h>
00039 #define dnd_base_signal user_signal/2
00040
00041 #define dnd_dropped_signal dnd_base_signal
00042 #define dnd_get_data_signal dnd_base_signal + 1
00043 #define dnd_drag_leave_signal dnd_base_signal + 2
00044 #define dnd_drag_motion_signal dnd_base_signal + 3
00045
00046
00047
00048 class VDKDnD;
00049
00050
00051
00052 class VDKDnDEntry
00053 {
00054 protected:
00055 VDKObject* object;
00056 VDKDnD* dnd;
00057 GtkWidget* widget;
00058 public:
00059 VDKDnDEntry(VDKObject* object, VDKDnD* dnd, GtkWidget* widget);
00060 VDKObject* Object() { return object; }
00061 ~VDKDnDEntry() {}
00062 friend class VDKDnD;
00063 };
00064
00065
00066 typedef VDKList<VDKDnDEntry> VDKDnDTable;
00067 typedef VDKListIterator<VDKDnDEntry> VDKDnDIterator;
00068
00069
00115 class VDKDnD : public VDKRawObject
00116 {
00117
00118 protected:
00119
00120 VDKDnDTable sources, targets;
00121 GtkTargetEntry *target_table;
00122 int n_entries;
00123
00124 static gboolean drag_drop(GtkWidget *widget,
00125 GdkDragContext *context,
00126 gint x,
00127 gint y,
00128 guint time,
00129 gpointer gp);
00130 static void drag_leave (GtkWidget *widget,
00131 GdkDragContext *context,
00132 guint time,
00133 gpointer data);
00134 static gboolean drag_motion (GtkWidget *widget,
00135 GdkDragContext *context,
00136 gint x,
00137 gint y,
00138 guint time,
00139 gpointer data);
00140
00141
00142 static void source_drag_data_get(GtkWidget *widget,
00143 GdkDragContext *context,
00144 GtkSelectionData *selection_data,
00145 guint info,
00146 guint time,
00147 gpointer data);
00148 public:
00152 VDKReadOnlyValueProp<VDKDnD,VDKObject*> DragSource;
00157 VDKReadOnlyValueProp<VDKDnD,VDKPoint> DragPoint;
00158
00159
00160
00161
00162
00163
00164 VDKDnD(VDKForm* owner,
00165 GtkTargetEntry* target_table,
00166 guint n_entries);
00170 virtual ~VDKDnD();
00174 void AddTarget(VDKObject* target);
00178 void AddSource(VDKObject* source);
00182 void RemoveTarget(VDKObject* target);
00186 void RemoveSource(VDKObject* source);
00190 void SetIcon(VDKObject* object, VDKRawPixmap* pixmap);
00199 VDKDnDTable* DnDSources() { return &sources; }
00203 VDKDnDTable* DnDTargets() { return &targets; }
00204 };
00205
00206
00207
00208 #endif