1*cc13e73eSYuri Dario /**************************************************************
2*cc13e73eSYuri Dario  *
3*cc13e73eSYuri Dario  * Licensed to the Apache Software Foundation (ASF) under one
4*cc13e73eSYuri Dario  * or more contributor license agreements.  See the NOTICE file
5*cc13e73eSYuri Dario  * distributed with this work for additional information
6*cc13e73eSYuri Dario  * regarding copyright ownership.  The ASF licenses this file
7*cc13e73eSYuri Dario  * to you under the Apache License, Version 2.0 (the
8*cc13e73eSYuri Dario  * "License"); you may not use this file except in compliance
9*cc13e73eSYuri Dario  * with the License.  You may obtain a copy of the License at
10*cc13e73eSYuri Dario  *
11*cc13e73eSYuri Dario  *   http://www.apache.org/licenses/LICENSE-2.0
12*cc13e73eSYuri Dario  *
13*cc13e73eSYuri Dario  * Unless required by applicable law or agreed to in writing,
14*cc13e73eSYuri Dario  * software distributed under the License is distributed on an
15*cc13e73eSYuri Dario  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cc13e73eSYuri Dario  * KIND, either express or implied.  See the License for the
17*cc13e73eSYuri Dario  * specific language governing permissions and limitations
18*cc13e73eSYuri Dario  * under the License.
19*cc13e73eSYuri Dario  *
20*cc13e73eSYuri Dario  *************************************************************/
21*cc13e73eSYuri Dario 
22*cc13e73eSYuri Dario 
23*cc13e73eSYuri Dario #ifndef _OTRANSFERABLE_HXX_
24*cc13e73eSYuri Dario #define _OTRANSFERABLE_HXX_
25*cc13e73eSYuri Dario 
26*cc13e73eSYuri Dario #include <svpm.h>
27*cc13e73eSYuri Dario 
28*cc13e73eSYuri Dario #include <cppuhelper/implbase1.hxx>
29*cc13e73eSYuri Dario #include <rtl/ustring.hxx>
30*cc13e73eSYuri Dario #include <rtl/unload.h>
31*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/DataFlavor.hpp>
32*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/XTransferable.hpp>
33*cc13e73eSYuri Dario 
34*cc13e73eSYuri Dario using namespace cppu;
35*cc13e73eSYuri Dario using namespace osl;
36*cc13e73eSYuri Dario using namespace rtl;
37*cc13e73eSYuri Dario using namespace com::sun::star::io;
38*cc13e73eSYuri Dario using namespace com::sun::star::uno;
39*cc13e73eSYuri Dario using namespace com::sun::star::datatransfer;
40*cc13e73eSYuri Dario 
41*cc13e73eSYuri Dario 
42*cc13e73eSYuri Dario // undocumented(?)
43*cc13e73eSYuri Dario #ifndef DC_PREPAREITEM
44*cc13e73eSYuri Dario #define DC_PREPAREITEM   0x0040
45*cc13e73eSYuri Dario #endif
46*cc13e73eSYuri Dario 
47*cc13e73eSYuri Dario // rendering mechanism
48*cc13e73eSYuri Dario #define DTSHARE_NAME    "\\SHAREMEM\\AOO_DND"
49*cc13e73eSYuri Dario #define DTSHARE_RMF     "<DRM_DTSHARE,DRF_TEXT>"
50*cc13e73eSYuri Dario 
51*cc13e73eSYuri Dario #define SHAREDMEM_RMF   "<DRM_SHAREDMEM,DRF_TEXT>"
52*cc13e73eSYuri Dario 
53*cc13e73eSYuri Dario #define OS2FILE_NAME    "AOO_TGT.TMP"
54*cc13e73eSYuri Dario #define OS2FILE_TXTRMF  "<DRM_OS2FILE,DRF_TEXT>"
55*cc13e73eSYuri Dario #define OS2FILE_UNKRMF  "<DRM_OS2FILE,DRF_UNKNOWN>"
56*cc13e73eSYuri Dario 
57*cc13e73eSYuri Dario 
58*cc13e73eSYuri Dario class OTransferable: public ::cppu::WeakImplHelper1<XTransferable>
59*cc13e73eSYuri Dario {
60*cc13e73eSYuri Dario     com::sun::star::uno::Sequence<DataFlavor> m_aFlavorList;
61*cc13e73eSYuri Dario 
62*cc13e73eSYuri Dario private:
63*cc13e73eSYuri Dario     HWND mHwndTarget;
64*cc13e73eSYuri Dario     PDRAGINFO mDragInfo;
65*cc13e73eSYuri Dario     bool removeOnExit;
66*cc13e73eSYuri Dario     char fullpath[CCHMAXPATH];
67*cc13e73eSYuri Dario     void *pDTShare;
68*cc13e73eSYuri Dario     char *pSharedMem;
69*cc13e73eSYuri Dario     enum _DRM { DRM_NULL, DRM_ATOM, DRM_DTSHARE, DRM_OS2FILE, DRM_SHAREDMEM};
70*cc13e73eSYuri Dario     _DRM renderDRM;
71*cc13e73eSYuri Dario     enum _MIMETYPE { MIMETYPE_NULL, MIMETYPE_TEXT, MIMETYPE_FILE};
72*cc13e73eSYuri Dario     _MIMETYPE mimeType;
73*cc13e73eSYuri Dario 
74*cc13e73eSYuri Dario public:
75*cc13e73eSYuri Dario 
76*cc13e73eSYuri Dario public:
77*cc13e73eSYuri Dario     OTransferable( HWND hwnd, PDRAGINFO dragInfo);
78*cc13e73eSYuri Dario     ~OTransferable();
79*cc13e73eSYuri Dario 
80*cc13e73eSYuri Dario     virtual Any SAL_CALL getTransferData( const DataFlavor& aFlavor)
81*cc13e73eSYuri Dario         throw(UnsupportedFlavorException, IOException, RuntimeException);
82*cc13e73eSYuri Dario     virtual Sequence< DataFlavor > SAL_CALL getTransferDataFlavors()
83*cc13e73eSYuri Dario         throw(RuntimeException);
84*cc13e73eSYuri Dario     virtual sal_Bool SAL_CALL isDataFlavorSupported( const DataFlavor& aFlavor)
85*cc13e73eSYuri Dario         throw(RuntimeException);
86*cc13e73eSYuri Dario 
87*cc13e73eSYuri Dario     bool renderComplete( PDRAGTRANSFER pdxfer);
88*cc13e73eSYuri Dario     bool requestRendering( void);
89*cc13e73eSYuri Dario 
90*cc13e73eSYuri Dario private:
91*cc13e73eSYuri Dario     bool RequestFileRendering( PDRAGITEM pditem, HWND hwnd, PCSZ pRMF, PCSZ pName);
92*cc13e73eSYuri Dario     bool RenderToOS2File( PDRAGITEM pditem, HWND hwnd);
93*cc13e73eSYuri Dario     bool RenderToDTShare( PDRAGITEM pditem, HWND hwnd);
94*cc13e73eSYuri Dario     bool RenderToSharedMem( PDRAGITEM pditem, HWND hwnd);
95*cc13e73eSYuri Dario 
96*cc13e73eSYuri Dario };
97*cc13e73eSYuri Dario 
98*cc13e73eSYuri Dario #endif // _OTRANSFERABLE_HXX_
99