Механизм модулей приводит к многослойности 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.
Copyright (c) 2002, 2004 IBM Corporation and others.
Все права защищены.
Эта программа и сопутствующие материалы распространяются на условиях Eclipse Public License v1.0, поставляемой вместе с продуктом и доступной на Web-сайте
http://www.eclipse.org/legal/epl-v10.html