001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /**
018: * @author Pavel Dolgov
019: * @version $Revision$
020: */package org.apache.harmony.awt.nativebridge.windows;
021:
022: import java.awt.datatransfer.DataFlavor;
023: import java.awt.datatransfer.SystemFlavorMap;
024:
025: import org.apache.harmony.awt.datatransfer.DataProvider;
026: import org.apache.harmony.awt.datatransfer.DataSnapshot;
027: import org.apache.harmony.awt.datatransfer.RawBitmap;
028: import org.apache.harmony.awt.datatransfer.windows.WinDragSource;
029: import org.apache.harmony.awt.datatransfer.windows.WinDropTarget;
030: import org.apache.harmony.awt.internal.nls.Messages;
031:
032: /**
033: * Native support for data transfer on Windows
034: */
035: public final class WinDataTransfer {
036:
037: static {
038: System.loadLibrary("Win32Wrapper"); //$NON-NLS-1$
039: }
040:
041: /**
042: * Wrapper for OLE interface IDataObject
043: */
044: public static class IDataObject implements DataProvider {
045:
046: /**
047: * pointer to IDataObject interface
048: */
049: public final long pointer;
050:
051: public IDataObject(long p) {
052: if (p == 0) {
053: // awt.1D=Cannot get data from OLE clipboard
054: throw new RuntimeException(Messages.getString("awt.1D")); //$NON-NLS-1$
055: }
056: pointer = p;
057: }
058:
059: public String getText() {
060: return getDataObjectText(pointer);
061: }
062:
063: public String[] getFileList() {
064: return getDataObjectFileList(pointer);
065: }
066:
067: public String getURL() {
068: return getDataObjectURL(pointer);
069: }
070:
071: public String getHTML() {
072: return getDataObjectHTML(pointer);
073: }
074:
075: public RawBitmap getRawBitmap() {
076: int header[] = new int[7];
077: Object buffer = getDataObjectImage(pointer, header);
078: if (buffer == null) {
079: return null;
080: }
081: return new RawBitmap(header, buffer);
082: }
083:
084: public String[] getNativeFormats() {
085: return getDataObjectFormats(pointer);
086: }
087:
088: public boolean isNativeFormatAvailable(String nativeFormat) {
089: return isDataObjectFormatAvailable(pointer, nativeFormat);
090: }
091:
092: public byte[] getSerializedObject(Class<?> clazz) {
093: String nativeFormat = SystemFlavorMap
094: .encodeDataFlavor(new DataFlavor(clazz, null));
095: return getDataObjectSerialized(pointer, nativeFormat);
096: }
097:
098: @Override
099: public boolean equals(Object obj) {
100: if (obj instanceof IDataObject) {
101: return pointer == ((IDataObject) obj).pointer;
102: }
103: return false;
104: }
105:
106: @Override
107: public int hashCode() {
108: return (int) pointer;
109: }
110:
111: public void release() {
112: }
113: }
114:
115: public static native void init();
116:
117: private static native String getDataObjectText(long pointer);
118:
119: private static native String[] getDataObjectFileList(long pointer);
120:
121: private static native String getDataObjectURL(long pointer);
122:
123: private static native String getDataObjectHTML(long pointer);
124:
125: /**
126: * Get bitmap bits and dimension from data object
127: * @param pointer - pointer to IDataObject interface
128: * @param header - array of output values, representing bitmap
129: * parameters in the format:
130: * { width, height, stride, bitCount, redMask, greenMask, blueMask }
131: *
132: * @return bitmap bits in form of int[], short[] or byte[],
133: * or null in case of failure
134: */
135: private static native Object getDataObjectImage(long pointer,
136: int[] header);
137:
138: private static native byte[] getDataObjectSerialized(long pointer,
139: String nativeFormat);
140:
141: public static native String getSystemDefaultCharset();
142:
143: private static native String[] getDataObjectFormats(long pointer);
144:
145: private static native boolean isDataObjectFormatAvailable(
146: long pointer, String nativeFormat);
147:
148: private static native long getOleClipboardDataObject();
149:
150: private static native void releaseDataObject(long pointer);
151:
152: public static IDataObject getClipboardContents() {
153: long pointer = getOleClipboardDataObject();
154: return pointer != 0 ? new IDataObject(pointer) : null;
155: }
156:
157: public static native void setClipboardContents(DataSnapshot snapshot);
158:
159: /**
160: * Perform OLE drag-and-drop, wait until the operation is complete.
161: */
162: public static native void startDrag(DataSnapshot snapshot,
163: WinDragSource dragSource, int sourceActions);
164:
165: public static native long registerDropTarget(long hwnd,
166: WinDropTarget target);
167:
168: public static native void revokeDropTarget(long hwnd, long target);
169: }
|