2016-10-12 8 views
0

내 @execute 메서드 클립 보드/LocalSelectionTransfer에서 선택 항목을 가져올 수 있습니다. 그러나 나는 사용자가 클립 보드에 내용을 어떻게 넣었는지에 따라 어떻게 대처할 것인지 잘 모른다. 콘텐츠 복제 여부를 결정해야합니다. 이것은 내가 가지고있는 것입니다 :무언가가 클립 보드로 복사되거나 잘려 졌는지 확인하는 방법

@Execute 
public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell, @Named(IServiceConstants.ACTIVE_PART) MPart activePart) { 
    Clipboard clipboard = new Clipboard(shell.getDisplay()); 
    TransferData[] transferDatas = clipboard.getAvailableTypes(); 

    boolean weCanUseIt= false; 
    for(int i=0; i<transferDatas.length; i++) { 
     if(LocalSelectionTransfer.getTransfer().isSupportedType(transferDatas[i])) { 
      weCanUseIt = true; 
      break; 
     } 
    } 

    if (weCanUseIt) { 
     @SuppressWarnings("unchecked") 
     List<Object> objects = ((StructuredSelection)LocalSelectionTransfer.getTransfer().getSelection()).toList(); 
     for(Object o: objects) { 
      System.out.println(o.getClass()); 
     } 
    } 
} 

어떤 아이디어 ???

+0

@Execute 메서드는 무엇입니까? 이것은 다른 부분의 선택을 다루는 방식이 아닙니다. Paste 핸들러에만 이것을 사용합니다. –

답변

0

복사 작업에이 전송 유형을 사용하도록 RCP에 코드를 작성하는 경우에만 LocalSelectionTransfer을 사용하여 클립 보드에 내용을 가져옵니다. 선택 항목을 직접 전송할 수있는 방법을 제공합니다.

뭔가 다른 방법으로 클립 보드에 복사하는 경우이 전송 유형은 사용되지 않습니다 (이 경우 TextTransfer 또는 FileTransfer과 같음).

따라서 다른 부분의 선택을 처리하는 데는 LocalSelectionTransfer 만 사용해야합니다.이 경우 다른 부분을 다루는 데는 아마도 해당 객체를 다루는 방법을 알고있을 것입니다.

복사 및 잘라 내기를 수행하려는 경우 소스 뷰어에서 잘라내기를 수행해야합니다. 그러면 선택 항목이 제거되어 LocalSelectionTransfer을 사용할 수 없습니다. 현재 선택에 의존하지 않는 FileTransfer 또는 TextTransfer과 같은 전송을 사용하십시오.

+0

내가 게시 한 방법은 붙여 넣기입니다. 사용자가 Ctrl + c 또는 Ctrl + X를 눌렀을 때 해당 LocalSelectionTransfer에 트리 뷰어를 선택했습니다. 이 작동합니다. 하지만 : 사용자가 Ctrl + V를 붙여 붙여 넣을 때 선택 항목의 내용을 복제하거나 이동하려면 더 세밀하게 결정해야합니다. 사용자가 클립 보드/LocalSelectionTransfer에 콘텐츠를 넣는 방법에 대한 정보는 없습니다. – WildDogSmith

+0

차이점을 알려면 LocalSelectionTransfer를 사용할 수 없습니다. 다른 Transfer 클래스 중 하나를 사용하십시오. 원본보기에서 복사/잘라내기를 수행해야합니다. –