xref: /trunk/main/sw/source/ui/inc/swdtflvr.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _SWDTFLVR_HXX
28 #define _SWDTFLVR_HXX
29 
30 #include <sfx2/objsh.hxx>
31 
32 #include <svtools/transfer.hxx>
33 #include <vcl/graph.hxx>
34 #include <sfx2/lnkbase.hxx>
35 #include <com/sun/star/embed/XEmbeddedObject.hpp>
36 
37 class Graphic;
38 class ImageMap;
39 class INetBookmark;
40 class INetImage;
41 class SwDoc;
42 class SwDocFac;
43 class SwTextBlocks;
44 class SwWrtShell;
45 class SvxClipboardFmtItem;
46 class ViewShell;
47 class SwView_Impl;
48 
49 typedef sal_uInt16 TransferBufferType;
50 namespace nsTransferBufferType
51 {
52     const sal_uInt16 TRNSFR_NONE            = 0x0000;
53     const sal_uInt16 TRNSFR_DOCUMENT        = 0x0001;
54     const sal_uInt16 TRNSFR_DOCUMENT_WORD   = 0x0002;
55     const sal_uInt16 TRNSFR_GRAPHIC         = 0x0004;
56     const sal_uInt16 TRNSFR_TABELLE         = 0x0008;
57     const sal_uInt16 TRNSFR_DDELINK         = 0x0010;
58     const sal_uInt16 TRNSFR_OLE             = 0x0020;
59     const sal_uInt16 TRNSFR_INETFLD         = 0x0040;
60     const sal_uInt16 TRNSFR_DRAWING         = 0x0081;   //Drawing ist auch intern!
61 }
62 
63 #define DATA_FLAVOR     ::com::sun::star::datatransfer::DataFlavor
64 
65 class SwTransferable : public TransferableHelper
66 {
67     friend class SwView_Impl;
68     SfxObjectShellLock             aDocShellRef;
69     TransferableDataHelper          aOleData;
70     TransferableObjectDescriptor    aObjDesc;
71     ::sfx2::SvBaseLinkRef            refDdeLink;
72 
73     SwWrtShell      *pWrtShell;
74     /* #96392# Added pCreatorView to distinguish SwFrameShell from
75        SwWrtShell. */
76     const ViewShell       *pCreatorView;
77     SwDocFac        *pClpDocFac;
78     Graphic         *pClpGraphic, *pClpBitmap, *pOrigGrf;
79     INetBookmark    *pBkmk;     // URL und Beschreibung!
80     ImageMap        *pImageMap;
81     INetImage       *pTargetURL;
82 
83     TransferBufferType eBufferType;
84 
85     sal_Bool bOldIdle   :1; //D&D Idle flag from the viewsettings
86     sal_Bool bCleanUp   :1; //D&D cleanup after Drop (not by internal Drop)
87 
88     // helper methods for the copy
89     com::sun::star::uno::Reference < com::sun::star::embed::XEmbeddedObject > FindOLEObj( sal_Int64& nAspect ) const;
90     Graphic* FindOLEReplacementGraphic() const;
91     void DeleteSelection();
92 
93     // helper methods for the paste
94     static SwTransferable* GetSwTransferable( const TransferableDataHelper& rData );
95     static void SetSelInShell( SwWrtShell& , sal_Bool , const Point* );
96     static sal_Bool _CheckForURLOrLNKFile( TransferableDataHelper& rData,
97                                 String& rFileName, String* pTitle = 0 );
98     static int _TestAllowedFormat( const TransferableDataHelper& rData,
99                                         sal_uLong nFormat, sal_uInt16 nDestination );
100 
101     static int _PasteFileContent( TransferableDataHelper&,
102                                     SwWrtShell& rSh, sal_uLong nFmt, sal_Bool bMsg );
103     static int _PasteOLE( TransferableDataHelper& rData, SwWrtShell& rSh,
104                             sal_uLong nFmt, sal_uInt8 nActionFlags, sal_Bool bMsg );
105     static int _PasteTargetURL( TransferableDataHelper& rData, SwWrtShell& rSh,
106                         sal_uInt16 nAction, const Point* pPt, sal_Bool bInsertGRF );
107 
108     static int _PasteDDE( TransferableDataHelper& rData, SwWrtShell& rWrtShell,
109                             sal_Bool bReReadGrf, sal_Bool bMsg );
110 
111     static int _PasteSdrFormat(  TransferableDataHelper& rData,
112                                     SwWrtShell& rSh, sal_uInt16 nAction,
113                                     const Point* pPt, sal_uInt8 nActionFlags );
114 
115     static int _PasteGrf( TransferableDataHelper& rData, SwWrtShell& rSh,
116                                 sal_uLong nFmt, sal_uInt16 nAction, const Point* pPt,
117                                 sal_uInt8 nActionFlags, sal_Bool bMsg );
118 
119     static int _PasteImageMap( TransferableDataHelper& rData,
120                                     SwWrtShell& rSh );
121 
122     static int _PasteAsHyperlink( TransferableDataHelper& rData,
123                                         SwWrtShell& rSh, sal_uLong nFmt );
124 
125     static int _PasteFileName( TransferableDataHelper& rData,
126                             SwWrtShell& rSh, sal_uLong nFmt, sal_uInt16 nAction,
127                             const Point* pPt, sal_uInt8 nActionFlags, sal_Bool bMsg );
128 
129     static int _PasteDBData( TransferableDataHelper& rData, SwWrtShell& rSh,
130                             sal_uLong nFmt, sal_Bool bLink, const Point* pDragPt,
131                             sal_Bool bMsg );
132 
133     static int _PasteFileList( TransferableDataHelper& rData,
134                                 SwWrtShell& rSh, sal_Bool bLink,
135                                 const Point* pPt, sal_Bool bMsg );
136 
137     int PrivateDrop( SwWrtShell& rSh, const Point& rDragPt, sal_Bool bMove,
138                         sal_Bool bIsXSelection );
139     int PrivatePaste( SwWrtShell& rShell );
140 
141     void SetDataForDragAndDrop( const Point& rSttPos );
142 
143                                     // not available
144                                     SwTransferable();
145                                     SwTransferable( const SwTransferable& );
146     SwTransferable&                 operator=( const SwTransferable& );
147 
148 protected:
149     virtual void        AddSupportedFormats();
150     virtual sal_Bool    GetData( const DATA_FLAVOR& rFlavor );
151     virtual sal_Bool    WriteObject( SotStorageStreamRef& rxOStm,
152                                         void* pUserObject,
153                                         sal_uInt32 nUserObjectId,
154                                         const DATA_FLAVOR& rFlavor );
155     virtual void        DragFinished( sal_Int8 nDropAction );
156     virtual void        ObjectReleased();
157 
158     using TransferableHelper::StartDrag;
159 
160 public:
161     SwTransferable( SwWrtShell& );
162     virtual ~SwTransferable();
163 
164     static sal_uInt16 GetSotDestination( const SwWrtShell& rSh, const Point* = 0 );
165 
166     // set properties on the document, like PageMargin, VisArea.
167     // And set real Size
168     static void InitOle( SfxObjectShell* pDoc, SwDoc& rDoc );
169 
170     // copy - methods and helper methods for the copy
171     int  Cut();
172     int  Copy( sal_Bool bIsCut = sal_False );
173     int  PrepareForCopy( sal_Bool bIsCut = sal_False );
174     int  CalculateAndCopy();                // special for Calculator
175     int  CopyGlossary( SwTextBlocks& rGlossary, const String& rStr );
176 
177     // remove the DDE-Link format promise
178     void RemoveDDELinkFormat( const Window& rWin );
179 
180     // paste - methods and helper methods for the paste
181     static sal_Bool IsPaste( const SwWrtShell&, const TransferableDataHelper& );
182     static int Paste( SwWrtShell&, TransferableDataHelper& );
183     static int PasteData( TransferableDataHelper& rData,
184                           SwWrtShell& rSh, sal_uInt16 nAction, sal_uLong nFormat,
185                           sal_uInt16 nDestination, sal_Bool bIsPasteFmt,
186                           sal_Bool bIsDefault,
187                           const Point* pDDPos = 0, sal_Int8 nDropAction = 0,
188                           sal_Bool bPasteSelection = sal_False );
189 
190     static sal_Bool IsPasteSpecial( const SwWrtShell& rWrtShell,
191                                 const TransferableDataHelper& );
192     static int PasteUnformatted( SwWrtShell& rSh, TransferableDataHelper& );
193     static int PasteSpecial( SwWrtShell& rSh, TransferableDataHelper&, sal_uLong& rFormatUsed );
194     static int PasteFormat( SwWrtShell& rSh, TransferableDataHelper& rData,
195                              sal_uLong nFormat );
196 
197     static void FillClipFmtItem( const SwWrtShell& rSh,
198                                 const TransferableDataHelper& rData,
199                                 SvxClipboardFmtItem & rToFill );
200 
201     // Interfaces for Drag & Drop
202     void StartDrag( Window* pWin, const Point& rPos );
203 
204     SwWrtShell* GetShell()              { return pWrtShell; }
205     void SetCleanUp( sal_Bool bFlag )       { bCleanUp = bFlag; }
206 
207     // Interfaces for Selection
208     /* #96392# Added pCreator to distinguish SwFrameShell from SwWrtShell. */
209     static void CreateSelection( SwWrtShell & rSh,
210                                  const ViewShell * pCreator = NULL );
211     static void ClearSelection( SwWrtShell& rSh,
212                                 const ViewShell * pCreator = NULL );
213 
214     // the related SwView is being closed and the SwTransferable is invalid now
215     void    Invalidate() {pWrtShell = 0;}
216     static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelId();
217 
218     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException );
219 };
220 
221 
222 #endif
223