Published 2010-02-17 11:10:00
// some globally accessable constant.
Builder.atoms = {
"STRING" : Gdk.atom_intern("STRING")
}SOURCE:
Gtk.drag_source_set (
this.el, /* widget will be drag-able */
Gdk.ModifierType.BUTTON1_MASK, /* modifier that will start a drag */
null, /* lists of target to support */
0, /* size of list */
Gdk.DragAction.COPY /* what to do with data after dropped */
);
targets = new Gtk.TargetList();
targets.add( Builder.atoms["STRING"], 0, 0);
Gtk.drag_source_set_target_list(this.el, targets);
Gtk.drag_source_add_text_targets(this.el);
TARGET:
Gtk.drag_dest_set
(
this.el, /* widget that will accept a drop */
Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT,
null, /* lists of target to support */
0, /* size of list */
Gdk.DragAction.COPY /* what to do with data after dropped */
);
targets = new Gtk.TargetList();
targets.add( Builder.atoms["STRING"], 0, 0);
Gtk.drag_dest_set_target_list(this.el, targets);
Gtk.drag_dest_add_text_targets(this.el);
SOURCE:
'drag-begin' : function (w, ctx, ud)
{
// we could fill this in now...
Seed.print('SOURCE: drag-begin');
// find what is selected in our tree...
var iter = new Gtk.TreeIter();
var s = this.selection;
s.get_selected(_model, iter);
// set some properties of the tree for use by the dropped element.
var value = new GObject.Value('');
_model.el.get_value(iter, 0, value);
this.el.dragData = value.value;
this.el.dropList = _model.provider.getDropList(value.value);
// make the drag icon a picture of the node that was selected
var path = _model.el.get_path(iter);
var pix = this.el.create_row_drag_icon ( path);
Gtk.drag_set_icon_pixmap (ctx,
pix.get_colormap(),
pix,
null,
-10,
-10);
return true;
},
'drag-end' : function ()
{
Seed.print('SOURCE: drag-end');
this.el.dragData = false;
this.el.dropList = false;
return true;
},SOURCE
'drag-data-get' : function (w, ctx, selection_data, target_type, time, ud)
{
Seed.print('Palete: drag-data-get: ' + target_type);
selection_data.set_text(this.dragData ,this.dragData.length);
return true;
},TARGET:
'drag-motion' : function (w, ctx, x, y, time, ud)
{
var src = Gtk.drag_get_source_widget(ctx);
// a drag from elsewhere...- prevent drop..
if (!src.dragData) {
Gdk.drag_status(ctx, 0, time);
return true;
}
Gdk.drag_status(ctx, Gdk.DragAction.COPY,time);
return true;
},
'drag-drop' : function (w, ctx, x, y,time, ud)
{
Seed.print("TARGET: drag-drop");
Gtk.drag_get_data
(
w, /* will receive 'drag-data-received' signal */
ctx, /* represents the current state of the DnD */
Builder.atoms["STRING"], /* the target type we want */
time /* time stamp */
);
var source = Gtk.drag_get_source_widget(ctx);
Seed.print("Browser: source.DRAGDATA? " + source.dragData);
/* No target offered by source => error */
return true;
}
'drag-data-received' : function (w, ctx, x, y, sel_data, target_type, time, ud)
{
Seed.print("Browser: drag-data-received");
delete_selection_data = false;
dnd_success = false;
/* Deal with what we are given from source */
if( sel_data && sel_data.length ) {
if (ctx.action == Gdk.DragAction.ASK) {
/* Ask the user to move or copy, then set the ctx action. */
}
if (ctx.action == Gdk.DragAction.MOVE) {
delete_selection_data = true;
}
var source = Gtk.drag_get_source_widget(ctx);
// we can send stuff to souce here...
dnd_success = true;
}
if (dnd_success == false)
{
Seed.print ("DnD data transfer failed!\n");
}
Gtk.drag_finish (ctx, dnd_success, delete_selection_data, time);
return true;
},