1*0d63794cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*0d63794cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*0d63794cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*0d63794cSAndrew Rist  * distributed with this work for additional information
6*0d63794cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*0d63794cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*0d63794cSAndrew Rist  * "License"); you may not use this file except in compliance
9*0d63794cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*0d63794cSAndrew Rist  *
11*0d63794cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*0d63794cSAndrew Rist  *
13*0d63794cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*0d63794cSAndrew Rist  * software distributed under the License is distributed on an
15*0d63794cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*0d63794cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*0d63794cSAndrew Rist  * specific language governing permissions and limitations
18*0d63794cSAndrew Rist  * under the License.
19*0d63794cSAndrew Rist  *
20*0d63794cSAndrew Rist  *************************************************************/
21*0d63794cSAndrew Rist 
22*0d63794cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef INCLUDED_DATAFLAVORMAPPING_HXX_
25cdf0e10cSrcweir #define INCLUDED_DATAFLAVORMAPPING_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <com/sun/star/datatransfer/DataFlavor.hpp>
28cdf0e10cSrcweir #include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp>
29cdf0e10cSrcweir #include <com/sun/star/datatransfer/XTransferable.hpp>
30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #include <premac.h>
33cdf0e10cSrcweir #import <Cocoa/Cocoa.h>
34cdf0e10cSrcweir #include <postmac.h>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <memory>
37cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir 
40cdf0e10cSrcweir /* An interface to get the clipboard data in either
41cdf0e10cSrcweir    system or OOo format.
42cdf0e10cSrcweir  */
43cdf0e10cSrcweir class DataProvider
44cdf0e10cSrcweir {
45cdf0e10cSrcweir public:
46cdf0e10cSrcweir   virtual ~DataProvider() {};
47cdf0e10cSrcweir 
48cdf0e10cSrcweir   /* Get the clipboard data in the system format.
49cdf0e10cSrcweir 	 The caller has to retain/release the returned
50cdf0e10cSrcweir 	 CFDataRef on demand.
51cdf0e10cSrcweir    */
52cdf0e10cSrcweir   virtual NSData* getSystemData() = 0;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir   /* Get the clipboard data in OOo format.
55cdf0e10cSrcweir    */
56cdf0e10cSrcweir   virtual com::sun::star::uno::Any getOOoData() = 0;
57cdf0e10cSrcweir };
58cdf0e10cSrcweir 
59cdf0e10cSrcweir typedef std::auto_ptr<DataProvider> DataProviderPtr_t;
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 
62cdf0e10cSrcweir //################################
63cdf0e10cSrcweir 
64cdf0e10cSrcweir 
65cdf0e10cSrcweir class DataFlavorMapper
66cdf0e10cSrcweir {
67cdf0e10cSrcweir public:
68cdf0e10cSrcweir   /* Initialialize a DataFavorMapper instance. Throws a RuntimeException in case the XMimeContentTypeFactory service
69cdf0e10cSrcweir 	 cannot be created.
70cdf0e10cSrcweir    */
71cdf0e10cSrcweir   DataFlavorMapper();
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 
74cdf0e10cSrcweir   /* Map a system data flavor to an OpenOffice data flavor.
75cdf0e10cSrcweir 	 Return an empty string if there is not suiteable
76cdf0e10cSrcweir 	 mapping from a system data flavor to a OpenOffice data
77cdf0e10cSrcweir 	 flavor.
78cdf0e10cSrcweir   */
79cdf0e10cSrcweir   com::sun::star::datatransfer::DataFlavor systemToOpenOfficeFlavor(NSString* systemDataFlavor) const;
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 
82cdf0e10cSrcweir   /* Map an OpenOffice data flavor to a system data flavor.
83cdf0e10cSrcweir 	 If there is no suiteable mapping available NULL will
84cdf0e10cSrcweir 	 be returned.
85cdf0e10cSrcweir   */
86cdf0e10cSrcweir   NSString* openOfficeToSystemFlavor(const com::sun::star::datatransfer::DataFlavor& oooDataFlavor) const;
87cdf0e10cSrcweir 
88cdf0e10cSrcweir   /* Select the best available image data type
89cdf0e10cSrcweir 	 If there is no suiteable mapping available NULL will
90cdf0e10cSrcweir 	 be returned.
91cdf0e10cSrcweir   */
92cdf0e10cSrcweir   NSString* openOfficeImageToSystemFlavor(NSPasteboard* pPasteboard) const;
93cdf0e10cSrcweir 
94cdf0e10cSrcweir   /* Get a data provider which is able to provide the data 'rTransferable' offers in a format that can
95cdf0e10cSrcweir 	 be put on to the system clipboard.
96cdf0e10cSrcweir    */
97cdf0e10cSrcweir   DataProviderPtr_t getDataProvider(NSString* systemFlavor,
98cdf0e10cSrcweir 									const com::sun::star::uno::Reference< com::sun::star::datatransfer::XTransferable > rTransferable) const;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 
102cdf0e10cSrcweir   /* Get a data provider which is able to provide 'systemData' in the OOo expected format.
103cdf0e10cSrcweir    */
104cdf0e10cSrcweir   DataProviderPtr_t getDataProvider(const NSString* systemFlavor, NSArray* systemData) const;
105cdf0e10cSrcweir 
106cdf0e10cSrcweir 
107cdf0e10cSrcweir   /* Get a data provider which is able to provide 'systemData' in the OOo expected format.
108cdf0e10cSrcweir    */
109cdf0e10cSrcweir   DataProviderPtr_t getDataProvider(const NSString* systemFlavor, NSData* systemData) const;
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 
112cdf0e10cSrcweir   /* Translate a sequence of DataFlavors into a NSArray of system types.
113cdf0e10cSrcweir 	 Only those DataFlavors for which a suitable mapping to a system
114cdf0e10cSrcweir 	 type exist will be contained in the returned types array.
115cdf0e10cSrcweir    */
116cdf0e10cSrcweir   NSArray* flavorSequenceToTypesArray(const com::sun::star::uno::Sequence<com::sun::star::datatransfer::DataFlavor>& flavors) const;
117cdf0e10cSrcweir 
118cdf0e10cSrcweir   /* Translate a NSArray of system types into a sequence of DataFlavors.
119cdf0e10cSrcweir 	 Only those types for which a suitable mapping to a DataFlavor
120cdf0e10cSrcweir 	 exist will be contained in the new DataFlavor Sequence.
121cdf0e10cSrcweir   */
122cdf0e10cSrcweir   com::sun::star::uno::Sequence<com::sun::star::datatransfer::DataFlavor> typesArrayToFlavorSequence(NSArray* types) const;
123cdf0e10cSrcweir 
124cdf0e10cSrcweir   /* Returns an NSArray containing all pasteboard types supported by OOo
125cdf0e10cSrcweir    */
126cdf0e10cSrcweir   NSArray* DataFlavorMapper::getAllSupportedPboardTypes() const;
127cdf0e10cSrcweir 
128cdf0e10cSrcweir private:
129cdf0e10cSrcweir   /* Determines if the provided Mime content type is valid.
130cdf0e10cSrcweir    */
131cdf0e10cSrcweir   bool isValidMimeContentType(const rtl::OUString& contentType) const;
132cdf0e10cSrcweir 
133cdf0e10cSrcweir private:
134cdf0e10cSrcweir   ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory> mrXMimeCntFactory;
135cdf0e10cSrcweir };
136cdf0e10cSrcweir 
137cdf0e10cSrcweir typedef boost::shared_ptr<DataFlavorMapper> DataFlavorMapperPtr_t;
138cdf0e10cSrcweir 
139cdf0e10cSrcweir #endif
140