#eclipse #swt #jface #rcp #e4
#eclipse #swt #jface #rcp #e4
Вопрос:
в моем методе @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());
}
}
}
есть идеи???
Комментарии:
1. Что это за метод @Execute? Это не то, как вы обычно справляетесь с выделениями в других частях. Вы бы использовали это только для обработчика вставки.
Ответ №1:
Вы получаете что-то в буфер LocalSelectionTransfer
обмена, только если вы кодируете часть в своем RCP, чтобы использовать этот тип передачи для операции копирования. Это обеспечивает способ прямой передачи выделения.
Этот тип передачи не будет использоваться, если что-то копируется в буфер обмена любым другим способом (в данном случае это может быть что-то вроде TextTransfer
или FileTransfer
).
Таким образом, вы будете использовать только LocalSelectionTransfer
для обработки выделения из другой части, и в этом случае вы, вероятно, знаете, как обращаться с объектами.
Если вы пытаетесь выполнить копирование и вырезание, вам следует выполнить вырезание в окне просмотра исходного кода, но это удалит выделение, поэтому вы не сможете использовать LocalSelectionTransfer
его для этого. Используйте передачу, такую как FileTransfer
или TextTransfer
, которая не зависит от текущего выбора.
Комментарии:
1. Метод, который я опубликовал, предназначен для вставки. В то время, когда пользователь нажимает ctrl c или ctrl x, я выделяю treeviewer в этот LocalSelectionTransfer. Это работает. Но: в то время, когда пользователь вставляет с помощью ctrl v, я должен решить, дублировать или перемещать содержимое выделения. Нет информации о том, как пользователь помещал содержимое в буфер обмена / LocalSelectionTransfer.
2. Если вы хотите определить разницу, вы не можете использовать LocalSelectionTransfer. Используйте один из других классов передачи. Вам нужно будет выполнить копирование / вырезание в исходном представлении.