下面列出了java.awt.dnd.DnDConstants#ACTION_MOVE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/** Utility method.
* @return true if given node supports given action,
* false otherwise.
*/
static boolean checkNodeForAction(Node node, int dragAction) {
if (
node.canCut() &&
((dragAction == DnDConstants.ACTION_MOVE) || (dragAction == DnDConstants.ACTION_COPY_OR_MOVE))
) {
return true;
}
if (
node.canCopy() &&
((dragAction == DnDConstants.ACTION_COPY) || (dragAction == DnDConstants.ACTION_COPY_OR_MOVE) ||
(dragAction == DnDConstants.ACTION_LINK) || (dragAction == DnDConstants.ACTION_REFERENCE))
) {
return true;
}
// hmmm, conditions not satisfied..
return false;
}
@Override
public boolean isDropSiteOk(GTreeNode destinationUserNode, DataFlavor[] flavors, int dropAction) {
if (dropAction != DnDConstants.ACTION_MOVE) {
return false;
}
Program program = plugin.getProgram();
if (program == null || program.isClosed()) {
return false;
}
if (!(destinationUserNode instanceof SymbolTreeNode)) {
return false;
}
SymbolTreeNode node = (SymbolTreeNode) destinationUserNode;
return node.supportsDataFlavors(flavors);
}
@Override
public boolean isStartDragOk(List<GTreeNode> dragUserData, int dragAction) {
if (dragAction != DnDConstants.ACTION_MOVE) {
return false;
}
for (GTreeNode node : dragUserData) {
SymbolTreeNode symbolNode = (SymbolTreeNode) node;
DataFlavor dataFlavor = symbolNode.getNodeDataFlavor();
if (dataFlavor == null) {
return false;
}
}
return dragUserData.size() != 0;
}
/**
* mapOperation
*/
private int mapOperation(int operation) {
int[] operations = {
DnDConstants.ACTION_MOVE,
DnDConstants.ACTION_COPY,
DnDConstants.ACTION_LINK,
};
int ret = DnDConstants.ACTION_NONE;
for (int i = 0; i < operations.length; i++) {
if ((operation & operations[i]) == operations[i]) {
ret = operations[i];
break;
}
}
return ret;
}
@Override
public final void dragOver(DragSourceDragEvent dsde) {
int action = dsde.getDropAction();
if (action == DnDConstants.ACTION_COPY) {
dsde.getDragSourceContext().setCursor(DragSource.DefaultCopyDrop);
} else {
if (action == DnDConstants.ACTION_MOVE) {
dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveDrop);
} else {
dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
}
}
}
static long getXDnDActionForJavaAction(int javaAction) {
switch (javaAction) {
case DnDConstants.ACTION_COPY : return XA_XdndActionCopy.getAtom();
case DnDConstants.ACTION_MOVE : return XA_XdndActionMove.getAtom();
case DnDConstants.ACTION_LINK : return XA_XdndActionLink.getAtom();
default : return 0;
}
}
public static int convertModifiersToDropAction(final int modifiers,
final int supportedActions) {
int dropAction = DnDConstants.ACTION_NONE;
/*
* Fix for 4285634.
* Calculate the drop action to match Motif DnD behavior.
* If the user selects an operation (by pressing a modifier key),
* return the selected operation or ACTION_NONE if the selected
* operation is not supported by the drag source.
* If the user doesn't select an operation search the set of operations
* supported by the drag source for ACTION_MOVE, then for
* ACTION_COPY, then for ACTION_LINK and return the first operation
* found.
*/
switch (modifiers & (InputEvent.SHIFT_DOWN_MASK |
InputEvent.CTRL_DOWN_MASK)) {
case InputEvent.SHIFT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK:
dropAction = DnDConstants.ACTION_LINK; break;
case InputEvent.CTRL_DOWN_MASK:
dropAction = DnDConstants.ACTION_COPY; break;
case InputEvent.SHIFT_DOWN_MASK:
dropAction = DnDConstants.ACTION_MOVE; break;
default:
if ((supportedActions & DnDConstants.ACTION_MOVE) != 0) {
dropAction = DnDConstants.ACTION_MOVE;
} else if ((supportedActions & DnDConstants.ACTION_COPY) != 0) {
dropAction = DnDConstants.ACTION_COPY;
} else if ((supportedActions & DnDConstants.ACTION_LINK) != 0) {
dropAction = DnDConstants.ACTION_LINK;
}
}
return dropAction & supportedActions;
}
public static int getJavaActionsForMotifActions(int motifActions) {
int javaActions = DnDConstants.ACTION_NONE;
if ((motifActions & MOTIF_DND_MOVE) != 0) {
javaActions |= DnDConstants.ACTION_MOVE;
}
if ((motifActions & MOTIF_DND_COPY) != 0) {
javaActions |= DnDConstants.ACTION_COPY;
}
if ((motifActions & MOTIF_DND_LINK) != 0) {
javaActions |= DnDConstants.ACTION_LINK;
}
return javaActions;
}
static long getXDnDActionForJavaAction(int javaAction) {
switch (javaAction) {
case DnDConstants.ACTION_COPY : return XA_XdndActionCopy.getAtom();
case DnDConstants.ACTION_MOVE : return XA_XdndActionMove.getAtom();
case DnDConstants.ACTION_LINK : return XA_XdndActionLink.getAtom();
default : return 0;
}
}
static int getJavaActionForXDnDAction(long xdndAction) {
if (xdndAction == XA_XdndActionCopy.getAtom()) {
return DnDConstants.ACTION_COPY;
} else if (xdndAction == XA_XdndActionMove.getAtom()) {
return DnDConstants.ACTION_MOVE;
} else if (xdndAction == XA_XdndActionLink.getAtom()) {
return DnDConstants.ACTION_LINK;
} else {
return DnDConstants.ACTION_NONE;
}
}
static long getXDnDActionForJavaAction(int javaAction) {
switch (javaAction) {
case DnDConstants.ACTION_COPY : return XA_XdndActionCopy.getAtom();
case DnDConstants.ACTION_MOVE : return XA_XdndActionMove.getAtom();
case DnDConstants.ACTION_LINK : return XA_XdndActionLink.getAtom();
default : return 0;
}
}
/** Initiating the drag */
public void dragGestureRecognized(DragGestureEvent dge) {
// check allowed actions
if ((dge.getDragAction() & DnDConstants.ACTION_MOVE) == 0) {
return;
}
// prepare transferable and start the drag
int index = comp.locationToIndex(dge.getDragOrigin());
// no index, then no dragging...
if (index < 0) {
return;
}
// System.out.println("Starting drag..."); // NOI18N
// create our flavor for transferring the index
myFlavor = new DataFlavor(
String.class, NbBundle.getBundle(IndexedCustomizer.class).getString("IndexedFlavor")
);
try {
dge.startDrag(DragSource.DefaultMoveDrop, new IndexTransferable(myFlavor, index), this);
// remember the gesture
this.dge = dge;
} catch (InvalidDnDOperationException exc) {
Logger.getLogger(IndexedCustomizer.class.getName()).log(Level.WARNING, null, exc);
// PENDING notify user - cannot start the drag
}
}
public static int getMotifActionsForJavaActions(int javaActions) {
int motifActions = MOTIF_DND_NOOP;
if ((javaActions & DnDConstants.ACTION_MOVE) != 0) {
motifActions |= MOTIF_DND_MOVE;
}
if ((javaActions & DnDConstants.ACTION_COPY) != 0) {
motifActions |= MOTIF_DND_COPY;
}
if ((javaActions & DnDConstants.ACTION_LINK) != 0) {
motifActions |= MOTIF_DND_LINK;
}
return motifActions;
}
public static int getJavaActionsForMotifActions(int motifActions) {
int javaActions = DnDConstants.ACTION_NONE;
if ((motifActions & MOTIF_DND_MOVE) != 0) {
javaActions |= DnDConstants.ACTION_MOVE;
}
if ((motifActions & MOTIF_DND_COPY) != 0) {
javaActions |= DnDConstants.ACTION_COPY;
}
if ((motifActions & MOTIF_DND_LINK) != 0) {
javaActions |= DnDConstants.ACTION_LINK;
}
return javaActions;
}
@Override
public final void dropActionChanged(DragSourceDragEvent dsde) {
int action = dsde.getDropAction();
if (action == DnDConstants.ACTION_COPY) {
dsde.getDragSourceContext().setCursor(DragSource.DefaultCopyDrop);
} else {
if (action == DnDConstants.ACTION_MOVE) {
dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveDrop);
} else {
dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
}
}
}
public static int getMotifActionsForJavaActions(int javaActions) {
int motifActions = MOTIF_DND_NOOP;
if ((javaActions & DnDConstants.ACTION_MOVE) != 0) {
motifActions |= MOTIF_DND_MOVE;
}
if ((javaActions & DnDConstants.ACTION_COPY) != 0) {
motifActions |= MOTIF_DND_COPY;
}
if ((javaActions & DnDConstants.ACTION_LINK) != 0) {
motifActions |= MOTIF_DND_LINK;
}
return motifActions;
}
public static int getMotifActionsForJavaActions(int javaActions) {
int motifActions = MOTIF_DND_NOOP;
if ((javaActions & DnDConstants.ACTION_MOVE) != 0) {
motifActions |= MOTIF_DND_MOVE;
}
if ((javaActions & DnDConstants.ACTION_COPY) != 0) {
motifActions |= MOTIF_DND_COPY;
}
if ((javaActions & DnDConstants.ACTION_LINK) != 0) {
motifActions |= MOTIF_DND_LINK;
}
return motifActions;
}
static int getJavaActionForXDnDAction(long xdndAction) {
if (xdndAction == XA_XdndActionCopy.getAtom()) {
return DnDConstants.ACTION_COPY;
} else if (xdndAction == XA_XdndActionMove.getAtom()) {
return DnDConstants.ACTION_MOVE;
} else if (xdndAction == XA_XdndActionLink.getAtom()) {
return DnDConstants.ACTION_LINK;
} else {
return DnDConstants.ACTION_NONE;
}
}
public static int getJavaActionsForMotifActions(int motifActions) {
int javaActions = DnDConstants.ACTION_NONE;
if ((motifActions & MOTIF_DND_MOVE) != 0) {
javaActions |= DnDConstants.ACTION_MOVE;
}
if ((motifActions & MOTIF_DND_COPY) != 0) {
javaActions |= DnDConstants.ACTION_COPY;
}
if ((motifActions & MOTIF_DND_LINK) != 0) {
javaActions |= DnDConstants.ACTION_LINK;
}
return javaActions;
}
public static int getMotifActionsForJavaActions(int javaActions) {
int motifActions = MOTIF_DND_NOOP;
if ((javaActions & DnDConstants.ACTION_MOVE) != 0) {
motifActions |= MOTIF_DND_MOVE;
}
if ((javaActions & DnDConstants.ACTION_COPY) != 0) {
motifActions |= MOTIF_DND_COPY;
}
if ((javaActions & DnDConstants.ACTION_LINK) != 0) {
motifActions |= MOTIF_DND_LINK;
}
return motifActions;
}