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