Обработка перетаскивания файлов внутри Eclipse Package Explorer - PullRequest
4 голосов
/ 04 февраля 2011

Я пытаюсь создать плагин Eclipse для поддержки проприетарного формата файла проекта. Моя цель - иметь возможность перетаскивать файл в Project Explorer (файл любого типа) на файл типа, который я поддерживаю, и к концу файла добавляется имя перетаскиваемого файла. проприетарного файла.

Сейчас у меня есть собственный редактор, который может анализировать некоторые данные из существующего файла управляемым способом. Это означает, что у меня есть редактор, связанный с типом файла, такой, что рядом с ним появляется мой специальный значок. Я не знаю, если это актуально.

Я пытаюсь использовать точку расширения "org.eclipse.ui.dropActions", но я не уверен, как зарегистрировать мой DropActionDelegate (реализует org.eclipse.ui.part.IDropActionDelegate), чтобы он вызывался когда файл сбрасывается на один из моих типов в Project Explorer.

У кого-нибудь есть идеи? Я даже на правильном пути с DropActionDelegate?

1 Ответ

2 голосов
/ 12 марта 2012

Вы находитесь на правильном пути, реализуя IDropActionDelegate :

class DropActionDelegate implements IDropActionDelegate {

    @Override
    public boolean run(Object source, Object target) {
        String transferredData (String) target; // whatever type is needed  
        return true; // if drop successful
    }
}

Цель точки расширения org.eclipse.ui.dropActions - предоставить поведение отбрасывания для представлений, которых у вас нетопределили себя (как Project Explorer).

Вы регистрируете расширение drop action следующим образом:

<extension point="org.eclipse.ui.dropActions"> 
        <action 
            id="my_drop_action" 
            class="com.xyz.DropActionDelegate"> 
        </action> 
</extension>

Не забудьте присоединить адекватного слушателя к вашемуредактор в коде вашего плагина:

class DragListener implements DragSourceListener {

@Override
public void dragStart(DragSourceEvent event) {
}

@Override
public void dragSetData(DragSourceEvent event) {
    PluginTransferData p;
    p = new PluginTransferData(
        "my_drop_action", // must be id of registered drop action
         "some_data" // may be of arbitrary type
        );
    event.data = p;
}

@Override
public void dragFinished(DragSourceEvent event) {
}

}
...