2016-10-12 1 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? Это не так, как обычно вы имеете дело с выборами в других частях. Вы использовали бы это только для обработчика Вставки. –

ответ

0

Вы можете получить что-то в буфере обмена только с помощью LocalSelectionTransfer, если вы скопируете часть своего RCP для использования этого типа передачи для операции копирования. Он обеспечивает способ передачи выбора напрямую.

Этот тип передачи не будет использоваться, если что-то скопировано в буфер обмена любым другим способом (в данном случае это может быть что-то вроде TextTransfer или FileTransfer).

Таким образом, вы будете использовать только LocalSelectionTransfer, чтобы иметь дело с выбором из другой части, в этом случае вы, по-видимому, знаете, как бороться с объектами.

Если вы пытаетесь выполнить Копирование и Вырезать, вы должны сделать Cut в средстве просмотра источника, но это приведет к удалению выделения, поэтому вы не можете использовать для этого LocalSelectionTransfer. Используйте передачу, такую ​​как FileTransfer или TextTransfer, которая не полагается на текущий выбор.

+0

Метод, который я опубликовал, предназначен для вставки. В то время, когда пользователь нажимал ctrl + c или ctrl + x, я выбираю treeviewer для этого LocalSelectionTransfer. Это работает. Но: в то время, когда пользователь вставляет через ctrl + v, я должен решить, чтобы дублировать или перемещать содержимое выделения. Нет информации о том, как пользователь помещает содержимое в буфер обмена/LocalSelectionTransfer. – WildDogSmith

+0

Если вы хотите сказать разницу, вы не можете использовать LocalSelectionTransfer. Используйте один из других классов переноса. Вам нужно будет сделать копию/вырезать в исходном виде. –

Смежные вопросы