2012-04-13 86 views
2

我有一个Eclipse RCP应用程序,它应该通过从Windows资源管理器中拖拽&拖放来打开文件。所以,我实现了这一点:来自外部资源管理器的Eclipse RCP拖放文件不被接受

public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { 

    @Override 
    public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { 
     configurer.addEditorAreaTransfer(FileTransfer.getInstance()); 
     configurer.configureEditorAreaDropListener(editorDropListener); 
     return new ApplicationWorkbenchWindowAdvisor(configurer); 
    } 
[...] 
} 

editorDropListenerDropTargetAdapter类型,并且实现了drop()方法。

现在,如果我从我的资源管理器拖动文件到我的应用程序,我得到该“Windows不可用”的鼠标图标,并放弃将无法正常工作。 editorDropListener.drop()未被调用。

如果我拖累了与CTRLALT键按该文件,我得到的“窗口复制”鼠标图标。该放置工作并editorDropListener.drop()被成功调用。

我在哪里可以配置,允许哪种类型的放置?

回答

0

由于编辑器区域不接受MOVE DND请求,所以它稍微复杂一些。

查看详情,请看org.eclipse.ui.internal.ide.EditorAreaDropAdapter

+0

谢谢。最后,我想要不同的拖动与移位或Ctrl按或不。所以我总是最终找到将任何拖放事件作为副本进行硬编码的实现,以使其能够与eclipse一起使用。所以它是编辑器,我必须“配置”它接受多于复制:) – wuppi 2012-04-23 10:47:24

1

看来这个问题还没有从上面解决。我只是查看了DND的apis并解决了这个问题,取消了Ctrl或Alt键。 Drag and Drop 我们只需要在你EditorAreaDropAdapter添加一些代码:

 @Override 
public void dragEnter(DropTargetEvent event) { 
    // TODO Auto-generated method stub 
    event.detail = DND.DROP_COPY; 
    super.dragEnter(event); 
} 

event.detail已经为acceptence被设置为DND.DROP_COPY。

+0

谢谢你的答复。不幸的是,我不再那么做了,所以我无法证实这是正确的答案。其他人可以这样做吗? – wuppi 2014-05-27 15:45:37

+0

它的工作,确认。 – Dima 2014-06-19 07:01:20

0

在您的监听器中使用此代码。它会工作。

   @Override 
     public void dragEnter(final DropTargetEvent event) { 

      if (event.detail == DND.DROP_DEFAULT) { 
       if ((event.operations & DND.DROP_COPY) != 0) { 
        event.detail = DND.DROP_COPY; 
       } else { 
        event.detail = DND.DROP_NONE; 
       } 
      } 
     } 
相关问题