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