Hi,

I'm trying to add drag and drop feature to my webb application. I'm using 
XPCOM service nsIDragService.

dragService.invokeDragSession method sets array of transferable objects to 
be transfered.

How can I set some string as a transfer object?

Here's the code:

window.captureEvents(Event.DRAGGESTURE);
window.captureEvents(Event.DRAGDROP);
window.addEventListener("draggesture", dragStart, true);
window.addEventListener("dragdrop", dragDrop, true);

function dragStart(e){
    window.status = "drag: " + e.target.id;

    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    var dragService = 
Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);
    var transferObj = 
Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
    var region = 
Components.classes["@mozilla.org/gfx/region;1"].createInstance(Components.interfaces.nsIScriptableRegion);
    var transferableObjs = 
Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);

    transferObj.addDataFlavor("text/unicode");

    var dataObj = new Object("some string text that I want to transfer when 
drop occurs");

    transferObj.setTransferData("text/unicode", dataObj, 2);

     transferableObjs.AppendElement(transferObj);
     region.setToRect(200, 200, 200, 200);

    dragService.invokeDragSession(null, transferableObjs, region , 1);
}

function dragDrop(e){
    e.stopPropagation();
    window.status += "drop: " + e.target.id;

    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    var dragService = 
Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);
    var transferObj = 
Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);

    var dragSession = dragService.getCurrentSession();
    var numItems = dragSession.numDropItems;
    transferObj.addDataFlavor("text/unicode");

    for (var i = 0; i < numItems; i++)  {
        dragSession.getData(transferObj, i);

        var dataObj = new Object();
        var dropSizeObj = new Object();

        transferObj.getTransferData("text/unicode", dataObj, dropSizeObj);
        var str = 
dataObj.value.QueryInterface(Components.interfaces.nsISupports);

        alert(str);

     }
} 


_______________________________________________
dev-tech-xpcom mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-xpcom

Reply via email to