DragTrackerドラッグトレース

2221 ワード

DragTrackerインタフェースは、gefでマウスまたはキーボードのドラッグ操作を追跡するためのインタフェースです.
 
それ自体がToolを継承し、toolはgefの典型的なSelection層の産物であり、ビジネスプロセスから言えば.ユーザ操作の第1部は,どのノードを選択し,どの要求を送信し,それに対応するものを得るかである.これに対応するのはgefのtools,request,policiesである.
 
DragTrackerは、選択した後にドラッグ関連操作を行うインタフェースを制御します.ドラッグに関連するほとんどの操作は、このインタフェースから継承されます.
 
実装クラスは次のとおりです.
ConnectionDragCreationTool
ConnectionEndpointTracker
MarqueeDragTracker
SelectEditPartTracker
DeselectAllTracker
DragEditPartsTracker
DragTreeItemsTracker
SingleSelectionTracker
SimpleDragTracker
ResizeTracker
RulerDragTracker
 
上記の実装クラスは、私もよく見ていませんが、DragEditPartsTrackerに注目しました.これはgefグラフィックインタフェースのドラッグに関連する実装クラスだからです.
 
 
AbstractGraphicalEditPartクラスには、DragTrackerオブジェクトを取得するためのgetDragTracker(Request request)メソッドがあります.デフォルトではDragEditPartsTrackerオブジェクトが直接newされています.
 
public DragTracker getDragTracker(Request request) {
		return new org.eclipse.gef.tools.DragEditPartsTracker(this);
	}
 
この方法の少しは、DragTrackerを直接newしたことであり、私たちが自分のDragTrackerを再実現したいのは簡単なことであることを示しています.
 
 
このコードが実装された場合、policiesで受信されるのはMoveリクエストです.
 
@Override
    public DragTracker getDragTracker(Request request)
    {
        return new org.eclipse.gef.tools.DragEditPartsTracker(this){

            /* (non-Javadoc)
             * @see org.eclipse.gef.tools.DragEditPartsTracker#isMove()
             */
            @Override
            protected boolean isMove()
            {
                return true;
            }

        };
    }

 
XYLayoutEditPolicyのメソッドを書き換え、コンポーネントを特殊に処理します.
 
@Override
            protected Command getChangeConstraintCommand(
                    ChangeBoundsRequest request)
            {
                request.getEditParts().clear();
                request.setEditParts(getHost());
                return getHost().getParent().getCommand(request);
            }