Размещение панелей

org.eclipse.ui.dropActions

Эта точка расширения служит для реализации функций размещения в панелях, зарегистрированных другими модулями.

Механизм модулей приводит к многослойности UI, и поэтому панели часто не знают о содержимом и виде других панелей. Это может затруднить перетаскивание мышью панелей, относящихся к разным модулям. Например, требуется обеспечить поддержку рефакторинга Java, с помощью которого пользователь сможет перенести метод из генератора оглавления (функция редактора Java) в другой файл Java в навигаторе ресурсов. Так как навигатор ресурсов ничего на знает о содержимом Java, то он не знает, как обрабатывать событие, когда в него помещают методы Java. Аналогично, ISV может потребоваться поместить какую-либо часть своей информации в одну из программ запуска аплетов Java.

Для таких ситуаций платформа предоставляет точку расширения org.eclipse.ui.dropActions. Этот механизм делегирует функцию размещения обратно к инициатору операции перенесения. Такая функция заложена в действии, реализующем интерфейс org.eclipse.ui.part.IDropActionDelegate. Источник операции перенесения - панель - должна поддерживать тип передачи the org.eclipse.ui.part.PluginTransfer и помещать объект PluginTransferData в событие перенесения. Сведения о том, каким образом добавить поддержку перенесения в панель см. в org.eclipse.jface.viewers.StructuredViewer#addDragSupport.

<!ELEMENT extension (action*)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT action EMPTY>

<!ATTLIST action

id    CDATA #REQUIRED

class CDATA #REQUIRED>


Пример расширения действия по размещению:

    

<extension point=

"org.eclipse.ui.dropActions"

>

<action id=

"my_drop_action"

class=

"com.xyz.eclipse.TestDropAction"

>

</action>

</extension>

Ниже приведен пример получателя запросов перенесения, который работает с определенным выше действием по размещению.

 
class MyDragListener extends DragSourceAdapter { 
    public void dragSetData(DragSourceEvent event) { 
        if (PluginTransfer.getInstance().isSupportedType(event.dataType)) { 
            byte[] dataToSend = ...//ввод отправляемых данных.
            event.data = new PluginTransferData( 
                "my_drop_action", dataToSend); 
        } 
    } 
} 

Более полный пример приведен в файле readme платформы. В этом примере действие по размещению определяется в ReadmeDropActionDelegate и используется получателем запросов ReadmeContentOutlineDragListener.

Значение атрибута class должно быть полным именем класса Java, реализующего org.eclipse.ui.part.IDropActionDelegate. Этот класс следует загружать как можно позднее, чтобы предотвратить преждевременную загрузку всего модуля.

Реализаций этой точки расширения в рабочей среде не поставляется. Она служит для добавления функций размещения в панели, зарегистрированные другими модулями.