summaryrefslogtreecommitdiff
path: root/dtrans/source/os2
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2007-09-20 15:39:40 +0000
committerVladimir Glazounov <vg@openoffice.org>2007-09-20 15:39:40 +0000
commit8585bb11c264563efb83b1291952308af55d853d (patch)
tree3188d19d3570ac1adbceb6f898c00b94baf6bc79 /dtrans/source/os2
parent48509165584c8468fe4e2481cb7705754f86da82 (diff)
INTEGRATION: CWS os2port01 (1.1.2); FILE ADDED
2007/01/24 16:52:24 ydario 1.1.2.1: OS/2 clipboard bitmap support.
Diffstat (limited to 'dtrans/source/os2')
-rw-r--r--dtrans/source/os2/clipb/Os2Transferable.cxx190
-rw-r--r--dtrans/source/os2/clipb/Os2Transferable.hxx114
-rw-r--r--dtrans/source/os2/clipb/exports.dxp4
3 files changed, 308 insertions, 0 deletions
diff --git a/dtrans/source/os2/clipb/Os2Transferable.cxx b/dtrans/source/os2/clipb/Os2Transferable.cxx
new file mode 100644
index 000000000000..c710a4e34682
--- /dev/null
+++ b/dtrans/source/os2/clipb/Os2Transferable.cxx
@@ -0,0 +1,190 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: Os2Transferable.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: vg $ $Date: 2007-09-20 16:39:22 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+#define INCL_WIN
+#include <svpm.h>
+
+#include <string.h>
+
+#ifndef _COM_SUN_STAR_IO_IOEXCEPTION_HPP_
+#include <com/sun/star/io/IOException.hpp>
+#endif
+
+#ifndef _DTRANS_OS2_TRANSFERABLE_HXX_
+#include "Os2Transferable.hxx"
+#endif
+
+using namespace com::sun::star::datatransfer;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::io;
+using namespace com::sun::star::uno;
+using namespace cppu;
+using namespace osl;
+using namespace rtl;
+using namespace os2;
+
+// =======================================================================
+
+Os2Transferable::Os2Transferable(
+ const Reference< XInterface >& xCreator ) :
+ m_xCreator( xCreator )
+{
+ debug_printf("Os2Transferable::Os2Transferable %08x\n", this);
+ hAB = WinQueryAnchorBlock( HWND_DESKTOP );
+
+ // query clipboard data to get mimetype
+ if( UWinOpenClipbrd( hAB ) )
+ {
+ ULONG handle = UWinQueryClipbrdData( hAB, UCLIP_CF_UNICODETEXT);
+ if (handle) {
+ aFlavor.MimeType = OUString::createFromAscii( "text/plain;charset=utf-16" );
+ aFlavor.DataType = getCppuType( (OUString*)0 );
+ //debug_printf("Os2Transferable::Os2Transferable pszText %s\n", pszText);
+ }
+ handle = UWinQueryClipbrdData( hAB, UCLIP_CF_BITMAP);
+ if (handle) {
+ aFlavor.MimeType = OUString::createFromAscii( "application/x-openoffice-bitmap;windows_formatname=\"Bitmap\"" );
+ aFlavor.DataType = getCppuType( (OUString*)0 );
+ //debug_printf("Os2Transferable::Os2Transferable pszText %s\n", pszText);
+ }
+ UWinCloseClipbrd( hAB);
+ }
+ else
+ {
+ debug_printf("Os2Transferable::Os2Transferable failed to open clipboard\n");
+ }
+
+}
+
+//==================================================================================================
+
+Os2Transferable::~Os2Transferable()
+{
+ debug_printf("Os2Transferable::~Os2Transferable %08x\n", this);
+}
+
+//==================================================================================================
+
+Any SAL_CALL Os2Transferable::getTransferData( const DataFlavor& rFlavor )
+ throw(UnsupportedFlavorException, IOException, RuntimeException)
+{
+ debug_printf("Os2Transferable::getTransferData %08x\n", this);
+ debug_printf("Os2Transferable::getTransferData mimetype: %s\n", CHAR_POINTER(rFlavor.MimeType));
+ Any aRet;
+ Sequence< sal_Int8 > aData;
+
+ // retrieve unicode text
+ if( rFlavor.MimeType.equalsIgnoreAsciiCase( OUString::createFromAscii( "text/plain;charset=utf-16" ) ) )
+ {
+ if( UWinOpenClipbrd( hAB ) )
+ {
+ // check if clipboard has text format
+ sal_Unicode* pszText = (sal_Unicode*) UWinQueryClipbrdData( hAB, UCLIP_CF_UNICODETEXT);
+ if (pszText) {
+ // convert to oustring and return it
+ OUString aString( pszText);
+ aRet <<= aString;
+ }
+ UWinCloseClipbrd( hAB );
+ if (pszText)
+ return aRet;
+ }
+ }
+
+ // retrieve bitmap
+ if( rFlavor.MimeType.equalsIgnoreAsciiCase( OUString::createFromAscii( "application/x-openoffice-bitmap;windows_formatname=\"Bitmap\"" ) ) )
+ {
+ if( UWinOpenClipbrd( hAB ) )
+ {
+ // check if clipboard has text format
+ ULONG handle = UWinQueryClipbrdData( hAB, UCLIP_CF_BITMAP);
+ if (handle) {
+ Sequence< sal_Int8 > winDIBStream;
+ // convert to oustring and return it
+ if (OS2HandleToOOoBmp( handle, &winDIBStream))
+ aRet <<= winDIBStream;
+ else
+ handle = 0;
+ }
+ UWinCloseClipbrd( hAB );
+ if (handle)
+ return aRet;
+ }
+ }
+
+ // clipboard format unsupported, throw exception
+ throw UnsupportedFlavorException( rFlavor.MimeType, static_cast < XTransferable * > ( this ) );
+}
+
+//==================================================================================================
+
+Sequence< DataFlavor > SAL_CALL Os2Transferable::getTransferDataFlavors()
+ throw(RuntimeException)
+{
+ debug_printf("Os2Transferable::getTransferDataFlavors %08x\n", this);
+ Sequence< DataFlavor > aFlavorList(1);
+ aFlavorList[0] = aFlavor;
+ debug_printf("Os2Transferable::getTransferDataFlavors mimetype: %s\n", CHAR_POINTER(aFlavor.MimeType));
+ return aFlavorList;
+}
+
+//==================================================================================================
+
+sal_Bool SAL_CALL Os2Transferable::isDataFlavorSupported( const DataFlavor& aFlavor )
+ throw(RuntimeException)
+{
+ debug_printf("Os2Transferable::isDataFlavorSupported %08x\n", this);
+ debug_printf("Os2Transferable::isDataFlavorSupported %s\n", CHAR_POINTER(aFlavor.MimeType));
+
+ if( aFlavor.DataType != getCppuType( (Sequence< sal_Int8 >*)0 ) )
+ {
+ if( ! aFlavor.MimeType.equalsIgnoreAsciiCase( OUString::createFromAscii( "text/plain;charset=utf-16" ) ) &&
+ aFlavor.DataType == getCppuType( (OUString*)0 ) )
+ return false;
+ }
+
+ Sequence< DataFlavor > aFlavors( getTransferDataFlavors() );
+ for( int i = 0; i < aFlavors.getLength(); i++ )
+ if( aFlavor.MimeType.equalsIgnoreAsciiCase( aFlavors.getConstArray()[i].MimeType ) &&
+ aFlavor.DataType == aFlavors.getConstArray()[i].DataType )
+ return sal_True;
+
+ return sal_False;
+}
+
diff --git a/dtrans/source/os2/clipb/Os2Transferable.hxx b/dtrans/source/os2/clipb/Os2Transferable.hxx
new file mode 100644
index 000000000000..3d3707ceebe0
--- /dev/null
+++ b/dtrans/source/os2/clipb/Os2Transferable.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: Os2Transferable.hxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: vg $ $Date: 2007-09-20 16:39:31 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#ifndef _DTRANS_OS2_TRANSFERABLE_HXX_
+#define _DTRANS_OS2_TRANSFERABLE_HXX_
+
+#ifndef _COM_SUN_STAR_DATATRANSFER_XTRANSFERABLE_HPP_
+#include <com/sun/star/datatransfer/XTransferable.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_LANG_XEVENTLISTENER_HDL_
+#include <com/sun/star/lang/XEventListener.hpp>
+#endif
+
+#ifndef _CPPUHELPER_IMPLBASE1_HXX_
+#include <cppuhelper/implbase1.hxx>
+#endif
+
+#ifndef _OSL_THREAD_H_
+#include <osl/thread.h>
+#endif
+
+#include <errno.h>
+
+#include <uclip.h>
+
+#define CHAR_POINTER(THE_OUSTRING) ::rtl::OUStringToOString (THE_OUSTRING, RTL_TEXTENCODING_UTF8).pData->buffer
+
+#if OSL_DEBUG_LEVEL>0
+extern "C" int debug_printf(const char *f, ...);
+#else
+#define debug_printf( ...) { 1; }
+#endif
+
+#define CPPUTYPE_SEQSALINT8 getCppuType( (const Sequence< sal_Int8 >*) 0 )
+#define CPPUTYPE_DEFAULT CPPUTYPE_SEQSALINT8
+
+#ifdef OOO_VENDOR
+using namespace com::sun::star::uno;
+HBITMAP OOoBmpToOS2Handle( Any &aAnyB);
+int OS2HandleToOOoBmp( HBITMAP hbm, Sequence< sal_Int8 >* winDIBStream);
+#else
+#define OOoBmpToOS2Handle(a) 0
+#define OS2HandleToOOoBmp(a,b) 0
+#endif
+
+namespace os2 {
+
+ class Os2Transferable : public ::cppu::WeakImplHelper1 <
+ ::com::sun::star::datatransfer::XTransferable >
+ {
+ HAB hAB;
+ ::rtl::OUString clipText;
+ ::com::sun::star::datatransfer::DataFlavor aFlavor;
+ ::osl::Mutex m_aMutex;
+ ::com::sun::star::uno::Reference< XInterface > m_xCreator;
+
+ public:
+ Os2Transferable( const ::com::sun::star::uno::Reference< XInterface >& xCreator);
+ virtual ~Os2Transferable();
+
+ /*
+ * XTransferable
+ */
+
+ virtual ::com::sun::star::uno::Any SAL_CALL getTransferData( const ::com::sun::star::datatransfer::DataFlavor& aFlavor )
+ throw(::com::sun::star::datatransfer::UnsupportedFlavorException,
+ ::com::sun::star::io::IOException,
+ ::com::sun::star::uno::RuntimeException
+ );
+
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors( )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isDataFlavorSupported( const ::com::sun::star::datatransfer::DataFlavor& aFlavor )
+ throw(::com::sun::star::uno::RuntimeException);
+ };
+
+} // namespace
+
+#endif
+
diff --git a/dtrans/source/os2/clipb/exports.dxp b/dtrans/source/os2/clipb/exports.dxp
new file mode 100644
index 000000000000..f72beb0fcb31
--- /dev/null
+++ b/dtrans/source/os2/clipb/exports.dxp
@@ -0,0 +1,4 @@
+component_getImplementationEnvironment
+component_writeInfo
+component_getFactory
+