如何确定是否复制了某些内容或将其剪切到剪贴板中

时间:2016-10-12 18:55:13

标签: 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 个答案:

答案 0 :(得分:0)

如果您在RCP中编写部件以使用此传输类型进行复制操作,则只能使用LocalSelectionTransfer在剪贴板中获取某些内容。它提供了一种直接传输选择的方法。

如果以任何其他方式将某些内容复制到剪贴板,则不会使用此转移类型(在这种情况下,它可能类似于TextTransferFileTransfer)。

因此,您只会使用LocalSelectionTransfer来处理来自其他部分的选择,在这种情况下,您可能知道如何处理这些对象。

如果您尝试复制和剪切,则应在源查看器中执行剪切 - 但这将删除选择,因此您无法使用LocalSelectionTransfer。使用不依赖于当前选择的FileTransferTextTransfer等转移。