diff options
Diffstat (limited to 'dtrans/source/aqua/OSXTransferable.cxx')
-rw-r--r-- | dtrans/source/aqua/OSXTransferable.cxx | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/dtrans/source/aqua/OSXTransferable.cxx b/dtrans/source/aqua/OSXTransferable.cxx deleted file mode 100644 index a4f5b7807935..000000000000 --- a/dtrans/source/aqua/OSXTransferable.cxx +++ /dev/null @@ -1,217 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: OSXTransferable.cxx,v $ - * $Revision: 1.4 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_dtrans.hxx" -#include <sal/types.h> - -#ifndef _TRANSFERABLE_HXX_ -#include "OSXTransferable.hxx" -#endif - -#include "DataFlavorMapping.hxx" - -using namespace rtl; -using namespace std; -using namespace osl; -using namespace cppu; -using namespace com::sun::star::uno; -using namespace com::sun::star::datatransfer; -using namespace com::sun::star::io; -using namespace com::sun::star::lang; -using namespace com::sun::star::container; - -const Type CPPUTYPE_SEQINT8 = getCppuType((Sequence<sal_Int8>*)0); -const Type CPPUTYPE_OUSTRING = getCppuType((OUString*)0); - -namespace // private -{ - bool isValidFlavor( const DataFlavor& aFlavor ) - { - size_t len = aFlavor.MimeType.getLength(); - Type dtype = aFlavor.DataType; - return ((len > 0) && ((dtype == CPPUTYPE_SEQINT8) || (dtype == CPPUTYPE_OUSTRING))); - } - -} // namespace private - - -OSXTransferable::OSXTransferable(const Reference< XComponentContext >& context, - const Reference<XMimeContentTypeFactory> rXMimeCntFactory, - DataFlavorMapperPtr_t pDataFlavorMapper, - NSPasteboard* pasteboard) : - mXComponentContext(context), - mrXMimeCntFactory(rXMimeCntFactory), - mDataFlavorMapper(pDataFlavorMapper), - mPasteboard(pasteboard) -{ - [mPasteboard retain]; - - initClipboardItemList(); -} - - -OSXTransferable::~OSXTransferable() -{ - [mPasteboard release]; -} - - -Any SAL_CALL OSXTransferable::getTransferData( const DataFlavor& aFlavor ) - throw( UnsupportedFlavorException, IOException, RuntimeException ) -{ - if (!isValidFlavor(aFlavor) || !isDataFlavorSupported(aFlavor)) - { - throw UnsupportedFlavorException(OUString(RTL_CONSTASCII_USTRINGPARAM("AquaClipboard: Unsupported data flavor")), - static_cast<XTransferable*>(this)); - } - - NSString* sysFormat = (NSString*)mDataFlavorMapper->openOfficeToSystemFlavor(aFlavor); - DataProviderPtr_t dp; - - if ([sysFormat caseInsensitiveCompare: NSFilenamesPboardType] == NSOrderedSame) - { - NSArray* sysData = [mPasteboard propertyListForType: sysFormat]; - dp = mDataFlavorMapper->getDataProvider(sysFormat, sysData); - } - else - { - NSData* sysData = [mPasteboard dataForType: sysFormat]; - dp = mDataFlavorMapper->getDataProvider(sysFormat, sysData); - } - - if (dp.get() == NULL) - { - throw UnsupportedFlavorException(OUString(RTL_CONSTASCII_USTRINGPARAM("AquaClipboard: Unsupported data flavor")), - static_cast<XTransferable*>(this)); - } - - return dp->getOOoData(); -} - - -bool OSXTransferable::isUnicodeText(const DataFlavor& flavor) -{ - return (flavor.DataType == CPPUTYPE_OUSTRING); -} - - -Sequence< DataFlavor > SAL_CALL OSXTransferable::getTransferDataFlavors( ) - throw( RuntimeException ) -{ - return mFlavorList; -} - - -sal_Bool SAL_CALL OSXTransferable::isDataFlavorSupported(const DataFlavor& aFlavor) - throw( RuntimeException ) -{ - for (sal_Int32 i = 0; i < mFlavorList.getLength(); i++) - if (compareDataFlavors(aFlavor, mFlavorList[i])) - return sal_True; - - return sal_False; -} - - -void OSXTransferable::initClipboardItemList() -{ - NSArray* pboardFormats = [mPasteboard types]; - - if (pboardFormats == NULL) - { - throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("AquaClipboard: Cannot get clipboard data")), - static_cast<XTransferable*>(this)); - } - - mFlavorList = mDataFlavorMapper->typesArrayToFlavorSequence(pboardFormats); -} - - -/* Compares two DataFlavors. Returns true if both DataFlavor have the same media type - and the number of parameter and all parameter values do match otherwise false - is returned. - */ -bool OSXTransferable::compareDataFlavors(const DataFlavor& lhs, const DataFlavor& rhs ) -{ - try - { - Reference<XMimeContentType> xLhs(mrXMimeCntFactory->createMimeContentType(lhs.MimeType)); - Reference<XMimeContentType> xRhs(mrXMimeCntFactory->createMimeContentType(rhs.MimeType)); - - if (!xLhs->getFullMediaType().equalsIgnoreAsciiCase(xRhs->getFullMediaType()) || - !cmpAllContentTypeParameter(xLhs, xRhs)) - { - return false; - } - } - catch( IllegalArgumentException& ) - { - OSL_ENSURE( sal_False, "Invalid content type detected" ); - return false; - } - - return true; -} - - -bool OSXTransferable::cmpAllContentTypeParameter(const Reference<XMimeContentType> xLhs, - const Reference<XMimeContentType> xRhs) const -{ - Sequence<OUString> xLhsFlavors = xLhs->getParameters(); - Sequence<OUString> xRhsFlavors = xRhs->getParameters(); - - // Stop here if the number of parameters is different already - if (xLhsFlavors.getLength() != xRhsFlavors.getLength()) - return false; - - try - { - OUString pLhs; - OUString pRhs; - - for (sal_Int32 i = 0; i < xLhsFlavors.getLength(); i++) - { - pLhs = xLhs->getParameterValue(xLhsFlavors[i]); - pRhs = xRhs->getParameterValue(xLhsFlavors[i]); - - if (!pLhs.equalsIgnoreAsciiCase(pRhs)) - { - return false; - } - } - } - catch(IllegalArgumentException&) - { - return false; - } - - return true; -} |