2012-04-13 61 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; 
       } 
      } 
     } 
相關問題