Выборки в TreeViewer и буфер обмена

Можно ли поместить в буфер обмена более одного объекта (которые представляют TreeViewer выборки)? Вот мой код Cut.

static public void Cut(EssentialData dataInst)
{
    IStructuredSelection selection = (IStructuredSelection)dataInst.getTreeViewer().getSelection();

    if(selection == null)
    {
        System.err.println("selection received was null");
        return;
    }

    Object[] objects = selection.toArray();

    //because setContents requires a Transfer object for every object sent
    List<Transfer> typesList = new ArrayList<>();

    for(int i = 0; i < objects.length; i++)
        typesList.add(FileEntryTransfer.getInstance());

    final Clipboard cb = new Clipboard(Display.getCurrent());
    cb.setContents(objects, typesList.toArray(new Transfer[]{}));
    cb.dispose();

    for(int i = 0; i < objects.length; i++)
        dataInst.getFileManager().removeEntry((FileEntry)objects[i]);

    dataInst.getTreeViewer().refresh(false);
}

Что я пытаюсь сделать, так это поместить несколько вариантов, которые являются экземплярами FileEntry, в буфер обмена.

FileEntryTransfer — это мой собственный класс ByteArrayTransfer, который я также использую для DND. Это работает хорошо, но я заметил, что setContents() на самом деле отправляет только один объект FileEntry, а не массив объектов (это то, что я хочу).

Любые идеи?

[править] Благодаря vanaprogeja я разобрался с этим

cb.setContents(new Object[]{ objects }, new Transfer[] { FileEntryTransfer.getInstance() });

person BloodyNobody    schedule 14.12.2011    source источник
comment
Не могли бы вы использовать отдельный объект буфера обмена? Извините, я не сталкивался с этим, просто выбросил это туда.   -  person Leo Izen    schedule 14.12.2011
comment
Вызывать setContents() для каждого объекта? Нет, это так не работает; setContents() заменяет все, что находится в буфере обмена.   -  person BloodyNobody    schedule 14.12.2011


Ответы (1)


Как насчет:

cb.setContents(new Object[]{ objects },
    new Transfer[] { FileEntryTransfer.getInstance() });
person Martti Käärik    schedule 14.12.2011
comment
Синтаксическая ошибка, но это определенно поставило меня на правильный путь. Я только что решил это с помощью cb.setContents(new Object[]{objects}, new Transfer[] {FileEntryTransfer.getInstance()}); - person BloodyNobody; 14.12.2011