私は dropListener を追加しようとしているので、GEf Editor で draw2d Label にドロップしてテキストを入れることができます。例は素晴らしいでしょう。
1 に答える
GEF 編集パーツ ビューアーでドロップ イベントに応答するには、ビューアー自体に の実装をインストールする必要があります。この実装はorg.eclipse.jface.util.TransferDropTargetListener
、型の転送を理解し、ターゲットにインストールされているによって処理できるorg.eclipse.swt.dnd.TextTransfer
何らかの種類のものを作成します。org.eclipse.gef.Request
org.eclipse.gef.EditPolicy
org.eclipse.gef.EditPart
Request
と の両方EditPolicy
で、基本的にドロップ動作をカスタマイズできることを理解する必要がありEditPart
ます。結果として、実際に完全に機能する例を紹介できますが、実際のニーズに合わせて自由にカスタマイズしてください。
最初に次を作成しますTransferDropTargetListener
。
public class TextTransferDropTargetListener extends AbstractTransferDropTargetListener {
public TextTransferDropTargetListener(EditPartViewer viewer) {
super(viewer, TextTransfer.getInstance());
}
@Override
protected void handleDragOver() {
getCurrentEvent().feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND;
super.handleDragOver();
}
@Override
protected Request createTargetRequest() {
return new ChangeBoundsRequest(REQ_ADD);
}
@Override
protected void updateTargetRequest() {
ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
request.setEditParts(Collections.EMPTY_LIST);
request.setLocation(getDropLocation());
}
@Override
protected void handleDrop() {
super.handleDrop();
if (getCurrentEvent().detail != DND.DROP_NONE) {
getViewer().setSelection(StructuredSelection.EMPTY);
getViewer().getControl().setFocus();
}
}
@Override
protected Command getCommand() {
String text = (String) getCurrentEvent().data;
List<IEntityPart> editParts = new ArrayList<IEntityPart>();
//
// using the 'text' variable you have to create
// a new EditPart that would eventually replace the old one.
//
editParts.add(createNewLabelPart());
ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
request.setEditParts(editParts);
return super.getCommand();
}
}
次に、次のステートメントを使用してグラフィカル ビューアー コンストラクターにリスナーをインストールします。
addDropTargetListener(new TextTransferDropTargetListener(this));
最後にEditPolicy
、タイプのリクエストを理解する がターゲットにインストールされていることを確認します (またはREQ_ADD
を拡張するものをすでに追加している可能性があります)。これは通常、 で行われます。LayoutEditPolicy
ContainerEditPolicy
EditPart
AbstractEditPart.createEditPolicies()
一連の責任をよりよく理解するために、TransferDropTargetListener.getCommand()
メソッドのスーパー実装を確認することをお勧めします。