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