xref: /trunk/main/sot/inc/sot/exchange.hxx (revision bbfc4cc7)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SOT_EXCHANGE_HXX
25 #define _SOT_EXCHANGE_HXX
26 
27 #ifndef __SGI_STL_LIST
28 #include <list>
29 #endif
30 #ifndef __SGI_STL_VECTOR
31 #include <vector>
32 #endif
33 #include <tools/string.hxx>
34 #include <com/sun/star/uno/Reference.hxx>
35 #include <com/sun/star/datatransfer/DataFlavor.hpp>
36 #ifndef _COM_SUN_STAR_DATATRANSFER_DND_DNDCONSTANTS_HDL_
37 #include <com/sun/star/datatransfer/dnd/DNDConstants.hdl>
38 #endif
39 #include "sot/sotdllapi.h"
40 
41 class SotDataObject;
42 
43 namespace com { namespace sun { namespace star { namespace datatransfer {
44 	class XTransferable;
45 } } } }
46 
47 // ---------------------
48 // - SotFormatStringId -
49 // ---------------------
50 
51 typedef sal_uLong SotFormatStringId;
52 
53 // ----------------
54 // - DataFlavorEx -
55 // ----------------
56 
57 struct DataFlavorEx : public ::com::sun::star::datatransfer::DataFlavor
58 {
59 	SotFormatStringId mnSotId;
60 };
61 
62 typedef ::std::vector< ::com::sun::star::datatransfer::DataFlavor > DataFlavorVector;
63 typedef ::std::vector< DataFlavorEx >								_DataFlavorExVector;
64 
65 // JP 23.03.2001 - this struct is only for "hide" the STD of the vetor,
66 // because our makefile filter all this symbols and so nowbody can use
67 // these struct in any interfacses.
68 struct DataFlavorExVector : public _DataFlavorExVector
69 {
70 };
71 
72 typedef ::std::list< ::com::sun::star::datatransfer::DataFlavor >	DataFlavorList;
73 typedef ::std::list< DataFlavorEx >									DataFlavorExList;
74 
75 SOT_DLLPUBLIC sal_Bool IsFormatSupported( const DataFlavorExVector& rDataFlavorExVector,
76 							sal_uLong nId );
77 
78 // -------------------------
79 // - Vordefinierte Formate -
80 // -------------------------
81 
82 // Die Reihenfolge und die Werte d�rfen nicht ge�ndert werden,
83 // da die Implementation sich darauf verl��t.
84 // Standard-Formate fuer die es auch Copy/Paste-Methoden gibt
85 #define FORMAT_STRING           1
86 #define FORMAT_BITMAP           2
87 #define FORMAT_GDIMETAFILE      3
88 #define FORMAT_PRIVATE          4
89 #define FORMAT_FILE             5
90 #define FORMAT_FILE_LIST        6
91 
92 // Weitere Standardformate (diese gehen nur ueber CopyData/PasteData)
93 #define FORMAT_RTF              10
94 
95 // Source-Options
96 #define EXCHG_SOURCE_MOVEABLE		((sal_uInt16)0x0001)
97 #define EXCHG_SOURCE_COPYABLE		((sal_uInt16)0x0002)
98 #define EXCHG_SOURCE_LINKABLE		((sal_uInt16)0x0004)
99 #define EXCHG_SOURCE_PRINTABLE		((sal_uInt16)0x0008)
100 #define EXCHG_SOURCE_DISCARDABLE	((sal_uInt16)0x0010)
101 #define EXCHG_SOURCE_ALL			((sal_uInt16)0x001F)
102 #define EXCHG_SOURCE_DEF_COPYABLE	((sal_uInt16)0x0020)
103 
104 // Aktionen
105 #define EXCHG_ACTION_MASK						((sal_uInt16)0x00FF)
106 #define EXCHG_INOUT_ACTION_NONE                 ((sal_uInt16)com::sun::star::datatransfer::dnd::DNDConstants::ACTION_NONE)
107 #define EXCHG_IN_ACTION_DEFAULT					EXCHG_INOUT_ACTION_NONE
108 #define EXCHG_IN_ACTION_MOVE                    ((sal_uInt16)com::sun::star::datatransfer::dnd::DNDConstants::ACTION_MOVE)
109 #define EXCHG_IN_ACTION_COPY                    ((sal_uInt16)com::sun::star::datatransfer::dnd::DNDConstants::ACTION_COPY)
110 #define EXCHG_IN_ACTION_LINK                    ((sal_uInt16)com::sun::star::datatransfer::dnd::DNDConstants::ACTION_LINK)
111 #define EXCHG_INOUT_ACTION_PRINT				((sal_uInt16)8)
112 #define EXCHG_INOUT_ACTION_DISCARD				((sal_uInt16)16)
113 #define EXCHG_OUT_ACTION_INSERT_OBJ     		((sal_uInt16)17)
114 #define EXCHG_OUT_ACTION_INSERT_BOOKMARK    	((sal_uInt16)18)
115 #define EXCHG_OUT_ACTION_INSERT_FILELINK    	((sal_uInt16)19)
116 #define EXCHG_OUT_ACTION_INSERT_FILE			((sal_uInt16)20)
117 #define EXCHG_OUT_ACTION_INSERT_FILELIST        ((sal_uInt16)21)
118 #define EXCHG_OUT_ACTION_INSERT_IMAGEMAP        ((sal_uInt16)22)
119 #define EXCHG_OUT_ACTION_INSERT_OLE	            ((sal_uInt16)23)
120 #define EXCHG_OUT_ACTION_INSERT_INTERACTIVE     ((sal_uInt16)24)
121 #define EXCHG_OUT_ACTION_INSERT_URLBUTTON     	((sal_uInt16)25)
122 #define EXCHG_OUT_ACTION_INSERT_CHAOSOBJ		((sal_uInt16)26) // OBSOLET ab 500.b  ?
123 #define EXCHG_OUT_ACTION_REPLACE_OBJ 			((sal_uInt16)27)
124 #define EXCHG_OUT_ACTION_REPLACE_LINK           ((sal_uInt16)28)
125 #define EXCHG_OUT_ACTION_REPLACE_IMAGEMAP       ((sal_uInt16)29)
126 #define EXCHG_OUT_ACTION_GET_ATTRIBUTES         ((sal_uInt16)30)
127 #define EXCHG_OUT_ACTION_UPLOAD   				((sal_uInt16)31)  // OBSOLET ab 500.b ?
128 #define EXCHG_OUT_ACTION_MOVE_FILE				((sal_uInt16)32)
129 #define EXCHG_OUT_ACTION_MOVE_FILELIST        	((sal_uInt16)33)
130 #define EXCHG_OUT_ACTION_UPDATE_RANGE        	((sal_uInt16)34)
131 #define EXCHG_OUT_ACTION_INSERT_PRIVATE			((sal_uInt16)35)
132 #define EXCHG_OUT_ACTION_INSERT_HTML			((sal_uInt16)36)
133 #define EXCHG_OUT_ACTION_MOVE_PRIVATE			((sal_uInt16)37)
134 #define EXCHG_OUT_ACTION_INSERT_STRING			((sal_uInt16)38)
135 #define EXCHG_OUT_ACTION_INSERT_DRAWOBJ			((sal_uInt16)39)
136 #define EXCHG_OUT_ACTION_INSERT_SVXB			((sal_uInt16)40)
137 #define EXCHG_OUT_ACTION_INSERT_GDIMETAFILE		((sal_uInt16)41)
138 #define EXCHG_OUT_ACTION_INSERT_BITMAP			((sal_uInt16)42)
139 #define EXCHG_OUT_ACTION_INSERT_DDE				((sal_uInt16)43)
140 #define EXCHG_OUT_ACTION_INSERT_HYPERLINK		((sal_uInt16)44)
141 #define EXCHG_OUT_ACTION_REPLACE_DRAWOBJ      	((sal_uInt16)45)
142 #define EXCHG_OUT_ACTION_REPLACE_SVXB      		((sal_uInt16)46)
143 #define EXCHG_OUT_ACTION_REPLACE_GDIMETAFILE    ((sal_uInt16)47)
144 #define EXCHG_OUT_ACTION_REPLACE_BITMAP    		((sal_uInt16)48)
145 #define EXCHG_OUT_ACTION_REPLACE_GRAPH			((sal_uInt16)49)
146 #define EXCHG_OUT_ACTION_INSERT_GRAPH			((sal_uInt16)50)
147 #define EXCHG_OUT_ACTION_INSERT_MSGATTACH		((sal_uInt16)51)  // obsolet ab 500.b ?
148 #define EXCHG_OUT_ACTION_COPY_CHAOSOBJ			((sal_uInt16)52)
149 #define EXCHG_OUT_ACTION_MOVE_CHAOSOBJ			((sal_uInt16)53)
150 #define EXCHG_OUT_ACTION_COPY_MSGATTACH			((sal_uInt16)54)
151 #define EXCHG_OUT_ACTION_COPY_BOOKMARK    		((sal_uInt16)55)
152 #define EXCHG_OUT_ACTION_COPY_FILE				((sal_uInt16)56)
153 
154 #define EXCHG_OUT_ACTION_FLAG_CREATE_THEME		((sal_uInt16)0x0100)
155 #define EXCHG_OUT_ACTION_FLAG_KEEP_POSSIZE		((sal_uInt16)0x0200)
156 #define EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP	((sal_uInt16)0x0400)
157 #define EXCHG_OUT_ACTION_FLAG_REPLACE_IMAGEMAP	((sal_uInt16)0x0800)
158 #define EXCHG_OUT_ACTION_FLAG_FILL				((sal_uInt16)0x1000)
159 #define EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL	((sal_uInt16)0x2000)
160 
161 // Ziele
162 #define EXCHG_DEST_DOC_OLEOBJ				1
163 #define EXCHG_DEST_CHARTDOC_OLEOBJ          2
164 #define EXCHG_DEST_DOC_TEXTFRAME            3
165 #define EXCHG_DEST_DOC_GRAPHOBJ             4
166 #define EXCHG_DEST_DOC_LNKD_GRAPHOBJ        5
167 #define EXCHG_DEST_DOC_GRAPH_W_IMAP         6
168 #define EXCHG_DEST_DOC_LNKD_GRAPH_W_IMAP    7
169 #define EXCHG_DEST_DOC_IMAPREGION           8
170 #define EXCHG_DEST_DOC_DRAWOBJ              9
171 #define EXCHG_DEST_DOC_URLBUTTON           10
172 #define EXCHG_DEST_DOC_URLFIELD            11
173 #define EXCHG_DEST_DOC_GROUPOBJ            12
174 #define EXCHG_DEST_SWDOC_FREE_AREA         13
175 #define EXCHG_DEST_SCDOC_FREE_AREA         14
176 #define EXCHG_DEST_SDDOC_FREE_AREA         15
177 #define EXCHG_DEST_DOC_TEXTFRAME_WEB       16
178 #define EXCHG_DEST_SWDOC_FREE_AREA_WEB     17
179 
180 // ------------
181 // - Exchange -
182 // ------------
183 class SvGlobalName;
184 class SOT_DLLPUBLIC SotExchange
185 {
186 public:
187 	static sal_uLong	RegisterFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
188     static sal_uLong	RegisterFormatName( const String& rName );
189 	static sal_uLong 	RegisterFormatMimeType( const String& rMimeType );
190 
191 	static sal_uLong	GetFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
192     static String	GetFormatName( sal_uLong nFormat );
193     static sal_Bool	GetFormatDataFlavor( sal_uLong nFormat, ::com::sun::star::datatransfer::DataFlavor& rFlavor );
194 	static String 	GetFormatMimeType( sal_uLong nFormat );
195     static sal_Bool     IsInternal( const SvGlobalName& );
196     static sal_uLong 	GetFormatIdFromMimeType( const String& rMimeType );
197 
198 	// bestimme die SotFormatStringId von dem registrierten Format
199 	//JP 12.11.98: diese 3 Methoden sind ab sofort ueberfluessig, da
200 	//				die ClipboardIds statisch sind und aequivalent zur
201 	//				SotFormatStringId ist!
GetFormatStringId(sal_uLong nFormat)202     static SotFormatStringId GetFormatStringId( sal_uLong nFormat )
203 		{ return nFormat; }
GetFormatStringId(const String & rName)204     static SotFormatStringId GetFormatStringId( const String& rName )
205 		{ return SotExchange::RegisterFormatMimeType( rName ); }
RegisterSotFormatName(SotFormatStringId nId)206     static sal_uLong RegisterSotFormatName( SotFormatStringId nId )
207 		{ return nId; }
208 
209 	// same for XTransferable interface
210 	static sal_uInt16 	GetExchangeAction(
211 		// XTransferable
212 		const DataFlavorExVector& rDataFlavorExVector,
213 		// Ziel der Aktion (EXCHG_DEST_*)
214 		sal_uInt16 nDestination,
215 		// Aktionen, die Quelle unterstuetzt (EXCHG_SOURCE_...)
216 		sal_uInt16 nSourceOptions,
217 		// vom Anwender gewaehlte Aktion (EXCHG_IN_*, EXCHG_INOUT_*)
218 		sal_uInt16 nUserAction,
219 		// In:- Out: Zu benutzendes Format
220 		sal_uLong& rFormat,
221 		// In:- Out: Default-Action (EXCHG_IN_*, EXCHG_INOUT_*)
222 		sal_uInt16& rDefaultAction,
223 		// In:- optional - check only for this specific format
224 		sal_uLong nOnlyTestFormat = 0,
225 		// In:- optional - check the contents of Xtransferable
226 		const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >* pxTransferable = NULL );
227 
228 	// same for XTransferable interface
229 	static sal_uInt16 	GetExchangeAction(
230 		// XTransferable
231 		const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxTransferable,
232 		// Ziel der Aktion (EXCHG_DEST_*)
233 		sal_uInt16 nDestination,
234 		// Aktionen, die Quelle unterstuetzt (EXCHG_SOURCE_...)
235 		sal_uInt16 nSourceOptions,
236 		// vom Anwender gewaehlte Aktion (EXCHG_IN_*, EXCHG_INOUT_*)
237 		sal_uInt16 nUserAction,
238 		// In:- Out: Zu benutzendes Format
239 		sal_uLong& rFormat,
240 		// In:- Out: Default-Action (EXCHG_IN_*, EXCHG_INOUT_*)
241 		sal_uInt16& rDefaultAction,
242 		// In:- optional - check only for this specific format
243 		sal_uLong nOnlyTestFormat = 0 );
244 
245 	static sal_uInt16 IsChart( const SvGlobalName& rName );
246 	static sal_uInt16 IsMath( const SvGlobalName& rName );
247 };
248 
249 #endif // _EXCHANGE_HXX
250