不接受来自外部资源管理器的Eclipse RCP删除文件

时间:2012-04-13 10:02:22

标签: java drag-and-drop eclipse-rcp

我有一个Eclipse RCP应用程序,它应该通过拖放操作打开文件。从Windows资源管理器中删除。所以我实现了这个:

public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {

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

editorDropListener的类型为DropTargetAdapter,并实现了drop()方法。

现在,如果我将一个文件从我的资源管理器拖到我的应用程序中,我会得到“Windows Unavailable”鼠标图标,并且该放置将无效。 editorDropListener.drop()未被调用。

如果我按下 CTRL ALT 键拖动文件,我会得到“windows copy”鼠标图标。删除工作正常,editorDropListener.drop()成功调用。

我可以在哪里配置,允许哪种丢弃?

3 个答案:

答案 0 :(得分:1)

看来这个问题还没有从上面解决。我只是查看了DND的api并解决了这个问题,取消了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设置为DND.DROP_COPY才能接受。

答案 1 :(得分:0)

它比这更复杂,因为编辑区域不接受MOVE DND请求。

详细了解org.eclipse.ui.internal.ide.EditorAreaDropAdapter

答案 2 :(得分: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;
                }
            }
        }