001: /*
002: * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package sun.awt.motif;
027:
028: import java.awt.Component;
029: import java.awt.Cursor;
030: import java.awt.Image;
031: import java.awt.Point;
032:
033: import java.awt.datatransfer.Transferable;
034:
035: import java.awt.dnd.DragSourceContext;
036: import java.awt.dnd.DragGestureEvent;
037: import java.awt.dnd.InvalidDnDOperationException;
038:
039: import java.awt.event.InputEvent;
040:
041: import java.awt.peer.ComponentPeer;
042: import java.awt.peer.LightweightPeer;
043:
044: import java.util.Map;
045: import sun.awt.SunToolkit;
046: import sun.awt.dnd.SunDragSourceContextPeer;
047:
048: /**
049: * <p>
050: * TBC
051: * </p>
052: *
053: * @version 1.49
054: * @since JDK1.2
055: *
056: */
057:
058: final class MDragSourceContextPeer extends SunDragSourceContextPeer {
059:
060: private static final MDragSourceContextPeer theInstance = new MDragSourceContextPeer(
061: null);
062:
063: /**
064: * construct a new MDragSourceContextPeer
065: */
066:
067: private MDragSourceContextPeer(DragGestureEvent dge) {
068: super (dge);
069: }
070:
071: static MDragSourceContextPeer createDragSourceContextPeer(
072: DragGestureEvent dge) throws InvalidDnDOperationException {
073: theInstance.setTrigger(dge);
074: return theInstance;
075: }
076:
077: protected void startDrag(Transferable transferable, long[] formats,
078: Map formatMap) {
079: try {
080: long nativeCtxtLocal = startDrag(getTrigger()
081: .getComponent(), transferable, getTrigger()
082: .getTriggerEvent(), getCursor(),
083: getCursor() == null ? 0 : getCursor().getType(),
084: getDragSourceContext().getSourceActions(), formats,
085: formatMap);
086: setNativeContext(nativeCtxtLocal);
087: } catch (Exception e) {
088: throw new InvalidDnDOperationException(
089: "failed to create native peer: " + e);
090: }
091:
092: if (getNativeContext() == 0) {
093: throw new InvalidDnDOperationException(
094: "failed to create native peer");
095: }
096:
097: MDropTargetContextPeer
098: .setCurrentJVMLocalSourceTransferable(transferable);
099: }
100:
101: /**
102: * downcall into native code
103: */
104:
105: private native long startDrag(Component component,
106: Transferable transferable, InputEvent nativeTrigger,
107: Cursor c, int ctype, int actions, long[] formats,
108: Map formatMap);
109:
110: /**
111: * set cursor
112: */
113:
114: public void setCursor(Cursor c) throws InvalidDnDOperationException {
115: SunToolkit.awtLock();
116: super .setCursor(c);
117: SunToolkit.awtUnlock();
118: }
119:
120: protected native void setNativeCursor(long nativeCtxt, Cursor c,
121: int cType);
122:
123: }
|