annotate dwt/dnd/TextTransfer.d @ 237:e2affbeb686d

Making tango.sys.win32.Types and dwt.internal.win32.WINTYPES to match common declaration. Make ansi charactars of type ubyte.
author Frank Benoit <benoit@tionex.de>
date Thu, 19 Jun 2008 03:25:36 +0200
parents ab60f3309436
children fd9c62a2998e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2005 IBM Corporation and others.
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.dnd.TextTransfer;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwt.internal.ole.win32.COM;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
16 import dwt.internal.ole.win32.OBJIDL;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.internal.win32.OS;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
19 import dwt.dnd.ByteArrayTransfer;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
20 import dwt.dnd.TransferData;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
21 import dwt.dnd.DND;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
22
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
23 import dwt.dwthelper.utils;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
24 static import tango.text.Text;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
25 alias tango.text.Text.Text!(char) StringBuffer;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
26
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 /**
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 * The class <code>TextTransfer</code> provides a platform specific mechanism
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 * for converting plain text represented as a java <code>String</code>
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 * to a platform specific representation of the data and vice versa.
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 * <p>An example of a java <code>String</code> containing plain text is shown
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 * below:</p>
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * <code><pre>
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * String textData = "Hello World";
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * </code></pre>
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * @see Transfer
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 */
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 public class TextTransfer : ByteArrayTransfer {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
43 private static TextTransfer _instance;
212
ab60f3309436 reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents: 197
diff changeset
44 private static const String CF_UNICODETEXT = "CF_UNICODETEXT"; //$NON-NLS-1$
ab60f3309436 reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents: 197
diff changeset
45 private static const String CF_TEXT = "CF_TEXT"; //$NON-NLS-1$
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
46 private static const int CF_UNICODETEXTID = COM.CF_UNICODETEXT;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
47 private static const int CF_TEXTID = COM.CF_TEXT;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 private this() {}
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 /**
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * Returns the singleton instance of the TextTransfer class.
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * @return the singleton instance of the TextTransfer class
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 */
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 public static TextTransfer getInstance () {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
57 if( _instance is null ){
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
58 synchronized {
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
59 if( _instance is null ){
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
60 _instance = new TextTransfer();
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
61 }
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
62 }
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
63 }
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 return _instance;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 /**
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * This implementation of <code>javaToNative</code> converts plain text
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * represented by a java <code>String</code> to a platform specific representation.
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * @param object a java <code>String</code> containing text
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * @param transferData an empty <code>TransferData</code> object; this object
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * will be filled in on return with the platform specific format of the data
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * @see Transfer#javaToNative
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 */
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 public void javaToNative (Object object, TransferData transferData){
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 if (!checkText(object) || !isSupportedType(transferData)) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 DND.error(DND.ERROR_INVALID_DATA);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 transferData.result = COM.E_FAIL;
212
ab60f3309436 reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents: 197
diff changeset
82 String string = (cast(ArrayWrapperString)object).array;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 switch (transferData.type) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 case COM.CF_UNICODETEXT: {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
85 wchar[] chars = StrToWCHARs(0,string, true);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
86 int charCount = chars.length;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 int byteCount = chars.length * 2;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
88 auto newPtr = OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, byteCount);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
89 OS.MoveMemory(newPtr, chars.ptr, byteCount);
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 transferData.stgmedium = new STGMEDIUM();
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 transferData.stgmedium.unionField = newPtr;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
93 transferData.stgmedium.pUnkForRelease = null;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 transferData.result = COM.S_OK;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 break;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 case COM.CF_TEXT: {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
98 wchar[] chars = StrToWCHARs(0,string, true);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
99 int count = chars.length;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 int codePage = OS.GetACP();
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
101 int cchMultiByte = OS.WideCharToMultiByte(codePage, 0, chars.ptr, -1, null, 0, null, null);
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 if (cchMultiByte is 0) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 transferData.stgmedium = new STGMEDIUM();
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 transferData.result = COM.DV_E_STGMEDIUM;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 return;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 }
237
e2affbeb686d Making tango.sys.win32.Types and dwt.internal.win32.WINTYPES to match common declaration. Make ansi charactars of type ubyte.
Frank Benoit <benoit@tionex.de>
parents: 212
diff changeset
107 auto lpMultiByteStr = cast(CHAR*)OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, cchMultiByte);
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
108 OS.WideCharToMultiByte(codePage, 0, chars.ptr, -1, lpMultiByteStr, cchMultiByte, null, null);
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 transferData.stgmedium = new STGMEDIUM();
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 transferData.stgmedium.unionField = lpMultiByteStr;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
112 transferData.stgmedium.pUnkForRelease = null;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 transferData.result = COM.S_OK;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 break;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 }
158
b975f20fd4ca switch default
Frank Benoit <benoit@tionex.de>
parents: 142
diff changeset
116 default:
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 return;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 /**
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * This implementation of <code>nativeToJava</code> converts a platform specific
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * representation of plain text to a java <code>String</code>.
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @param transferData the platform specific representation of the data to be converted
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * @return a java <code>String</code> containing text if the conversion was successful; otherwise null
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 *
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 * @see Transfer#nativeToJava
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 */
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 public Object nativeToJava(TransferData transferData){
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
131 if (!isSupportedType(transferData) || transferData.pIDataObject is null) return null;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
133 IDataObject data = transferData.pIDataObject;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 data.AddRef();
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
135 FORMATETC* formatetc = transferData.formatetc;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
136 STGMEDIUM* stgmedium = new STGMEDIUM();
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 stgmedium.tymed = COM.TYMED_HGLOBAL;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 transferData.result = data.GetData(formatetc, stgmedium);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 data.Release();
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 if (transferData.result !is COM.S_OK) return null;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
141 auto hMem = stgmedium.unionField;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 try {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 switch (transferData.type) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 case CF_UNICODETEXTID: {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 /* Ensure byteCount is a multiple of 2 bytes */
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 int size = OS.GlobalSize(hMem) / 2 * 2;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 if (size is 0) return null;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
148 wchar[] chars = new wchar[size/2];
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
149 auto ptr = OS.GlobalLock(hMem);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
150 if (ptr is null) return null;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 try {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
152 OS.MoveMemory(chars.ptr, ptr, size);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
153 int length_ = chars.length;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 for (int i=0; i<chars.length; i++) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 if (chars [i] is '\0') {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
156 length_ = i;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 break;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
160 return new ArrayWrapperString (WCHARsToStr(chars[ 0 .. length_]));
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 } finally {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 OS.GlobalUnlock(hMem);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 case CF_TEXTID: {
237
e2affbeb686d Making tango.sys.win32.Types and dwt.internal.win32.WINTYPES to match common declaration. Make ansi charactars of type ubyte.
Frank Benoit <benoit@tionex.de>
parents: 212
diff changeset
166 auto lpMultiByteStr = cast(CHAR*)OS.GlobalLock(hMem);
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
167 if (lpMultiByteStr is null) return null;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 try {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 int codePage = OS.GetACP();
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 int cchWideChar = OS.MultiByteToWideChar (codePage, OS.MB_PRECOMPOSED, lpMultiByteStr, -1, null, 0);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 if (cchWideChar is 0) return null;
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
172 wchar[] lpWideCharStr = new wchar [cchWideChar - 1];
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
173 OS.MultiByteToWideChar (codePage, OS.MB_PRECOMPOSED, lpMultiByteStr, -1, lpWideCharStr.ptr, lpWideCharStr.length);
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
174 return new ArrayWrapperString( WCHARzToStr(lpWideCharStr.ptr));
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 } finally {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 OS.GlobalUnlock(hMem);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 }
158
b975f20fd4ca switch default
Frank Benoit <benoit@tionex.de>
parents: 142
diff changeset
179 default:
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 } finally {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 OS.GlobalFree(hMem);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 return null;
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 protected int[] getTypeIds(){
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
188 return [CF_UNICODETEXTID, CF_TEXTID];
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
212
ab60f3309436 reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents: 197
diff changeset
191 protected String[] getTypeNames(){
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
192 return [CF_UNICODETEXT, CF_TEXT];
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 bool checkText(Object object) {
142
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
196 if( auto s = cast(ArrayWrapperString)object ){
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
197 return s.array.length > 0;
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
198 }
c48567faeab1 TextTransfer
Frank Benoit <benoit@tionex.de>
parents: 135
diff changeset
199 return false;
135
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 protected bool validate(Object object) {
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 return checkText(object);
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 }
242e33c0e383 Added dnd source, ByteArrayTransfer,Clipboard completed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 }