[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [platform-swt-dev] Capturing Drop events over browser widget
|
Currently it is not possible to make a drop target for the browser. A
drop target is for a specific widget and the Browser is actually a
collection of many widgets - some of which are already registered as drop
targets by the underlying web browser.
"Lopez, Edwin R" <edwin.r.lopez@xxxxxxxxxxx>
Sent by: platform-swt-dev-bounces@xxxxxxxxxxx
08/23/2005 06:05 PM
Please respond to
"Eclipse Platform SWT component developers list."
To
"swt" <platform-swt-dev@xxxxxxxxxxx>
cc
Subject
[platform-swt-dev] Capturing Drop events over browser widget
Hello,
I'm trying to capture the drop (FileTransfer) event in a browser widget. I
tried hooking a DropTarget( ) to the *.swt.browser widget with no success.
Then I tried to go the Ole way and create a Shell.Explorer site automation
and try to hook the DropTarget( ) to both the OleFrame and OleControlSite
with no success. (yeah, I'm kind of hacking it)
I have the feeling that I need to enable something in the Ole control and
use some sort of OleListener.. but I can't find clear documentation of how
get deep down in the API and capture drag/drop events.
Have anyone done anything in this area?
Any input would be appreciated. Below is a short program demostrating
what I'm trying to do. Step D is the one I'm having trouble with, getting
the Drop listener to work.
Thank you,
-Edwin
import org.eclipse.swt.*;
import org.eclipse.swt.ole.win32.*;
import org.eclipse.swt.internal.ole.win32.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.dnd.*;
public class test
{
public static void main(String[] args)
{
//a. Create Shell
Display display = new Display();
Shell shell = new Shell( display );
shell.setSize( 610, 400 );
//b. Create Browser (the old way)
OleFrame frame = new OleFrame( shell, SWT.NONE );
OleControlSite site = new OleControlSite( frame, SWT.NONE,
"Shell.Explorer" );
site.doVerb( OLE.OLEIVERB_INPLACEACTIVATE );
OleAutomation browser = new OleAutomation( site );
//c. Disable "link navigation" and go to google
int[] nameIds = browser.getIDsOfNames(new String[] {
"RegisterAsDropTarget"} ); //is this really necessary (I wonder)?
browser.setProperty(nameIds[0], new Variant(false) ); //true or false
--doesn't work
nameIds = browser.getIDsOfNames( new String[] { "Navigate", "URL"} );
browser.invoke( nameIds[0], new Variant[] { new Variant("
http://www.google.com") },
new int[] { nameIds[1] } );
//d. Listen to drop events ???
DropTarget target = new DropTarget(frame, DND.DROP_COPY ); // <--help
here!!!
target.setTransfer( new Transfer[] { FileTransfer.getInstance() } );
target.addDropListener( new DropTargetListener()
{
public void dragEnter(DropTargetEvent event) { System.out.println(
"drag enter"); }
public void dragLeave(DropTargetEvent event) { System.out.println(
"drag leave");}
public void dragOver(DropTargetEvent event) { System.out.println(
"drag over");}
public void dragOperationChanged(DropTargetEvent event) {
System.out.println("drag changed");}
public void dropAccept(DropTargetEvent event) {
System.out.println("drag accept");}
public void drop(DropTargetEvent event)
{
String[] files = (String[]) event.data; //expects
FileTransfer data
for (int p=0;p<files.length; p++)
System.out.println( files[p] );
}/*drop*/
});
//e. Show window
frame.setBounds( 0,0, 600, 400 );
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
} /*while*/
browser.dispose();
display.dispose();
}/*main*/
}/*test*/ _______________________________________________
platform-swt-dev mailing list
platform-swt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-swt-dev