diff options
Diffstat (limited to 'sc/source/ui/view/viewfun3.cxx')
-rw-r--r-- | sc/source/ui/view/viewfun3.cxx | 294 |
1 files changed, 169 insertions, 125 deletions
diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index 10e197d7e5c4..d877815238ed 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -35,10 +35,6 @@ #define _SV_NOXSOUND -#ifdef WIN - #define _MENUBTN_HXX -#endif - #define _BASE_DLGS_HXX #define _BIGINT_HXX #define _CACHESTR_HXX @@ -139,6 +135,9 @@ #include "scitems.hxx" #include <svx/dbexch.hrc> #include <svx/svdetc.hxx> +#include <svx/svditer.hxx> +#include <svx/svdoole2.hxx> +#include <svx/svdpage.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/docfile.hxx> #include <svl/stritem.hxx> @@ -195,7 +194,7 @@ using namespace com::sun::star; //---------------------------------------------------------------------------- // C U T -void ScViewFunc::CutToClip( ScDocument* pClipDoc, BOOL bIncludeObjects ) +void ScViewFunc::CutToClip( ScDocument* pClipDoc, sal_Bool bIncludeObjects ) { UpdateInputLine(); @@ -212,7 +211,7 @@ void ScViewFunc::CutToClip( ScDocument* pClipDoc, BOOL bIncludeObjects ) ScDocument* pDoc = GetViewData()->GetDocument(); ScDocShell* pDocSh = GetViewData()->GetDocShell(); ScMarkData& rMark = GetViewData()->GetMarkData(); - const BOOL bRecord(pDoc->IsUndoEnabled()); // Undo/Redo + const sal_Bool bRecord(pDoc->IsUndoEnabled()); // Undo/Redo ScDocShellModificator aModificator( *pDocSh ); @@ -224,10 +223,10 @@ void ScViewFunc::CutToClip( ScDocument* pClipDoc, BOOL bIncludeObjects ) MarkDataChanged(); } - CopyToClip( pClipDoc, TRUE, FALSE, bIncludeObjects ); // Ab ins Clipboard + CopyToClip( pClipDoc, sal_True, false, bIncludeObjects ); // Ab ins Clipboard ScAddress aOldEnd( aRange.aEnd ); // Zusammengefasste Zellen im Bereich? - pDoc->ExtendMerge( aRange, TRUE ); + pDoc->ExtendMerge( aRange, sal_True ); ScDocument* pUndoDoc = NULL; if ( bRecord ) @@ -238,11 +237,11 @@ void ScViewFunc::CutToClip( ScDocument* pClipDoc, BOOL bIncludeObjects ) ScRange aCopyRange = aRange; aCopyRange.aStart.SetTab(0); aCopyRange.aEnd.SetTab(pDoc->GetTableCount()-1); - pDoc->CopyToDocument( aCopyRange, (IDF_ALL & ~IDF_OBJECTS) | IDF_NOCAPTIONS, FALSE, pUndoDoc ); + pDoc->CopyToDocument( aCopyRange, (IDF_ALL & ~IDF_OBJECTS) | IDF_NOCAPTIONS, false, pUndoDoc ); pDoc->BeginDrawUndo(); } - USHORT nExtFlags = 0; + sal_uInt16 nExtFlags = 0; pDocSh->UpdatePaintExt( nExtFlags, aRange ); HideCursor(); // Cursor aendert sich ! @@ -274,9 +273,9 @@ void ScViewFunc::CutToClip( ScDocument* pClipDoc, BOOL bIncludeObjects ) //---------------------------------------------------------------------------- // C O P Y -BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bIncludeObjects, BOOL bStopEdit ) +sal_Bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, sal_Bool bCut, sal_Bool bApi, sal_Bool bIncludeObjects, sal_Bool bStopEdit ) { - BOOL bDone = FALSE; + sal_Bool bDone = false; if ( bStopEdit ) UpdateInputLine(); @@ -291,11 +290,11 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI aRange.aEnd.Col(), aRange.aEnd.Row(), rMark ) ) { - BOOL bSysClip = FALSE; + sal_Bool bSysClip = false; if ( !pClipDoc ) // no clip doc specified { pClipDoc = new ScDocument( SCDOCMODE_CLIP ); // create one (deleted by ScTransferObj) - bSysClip = TRUE; // and copy into system + bSysClip = sal_True; // and copy into system } if ( !bCut ) @@ -307,20 +306,41 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI if ( bSysClip && bIncludeObjects ) { - BOOL bAnyOle = pDoc->HasOLEObjectsInArea( aRange, &rMark ); + sal_Bool bAnyOle = pDoc->HasOLEObjectsInArea( aRange, &rMark ); // update ScGlobal::pDrawClipDocShellRef ScDrawLayer::SetGlobalDrawPersist( ScTransferObj::SetDrawClipDoc( bAnyOle ) ); } ScClipParam aClipParam(aRange, bCut); + aClipParam.setSourceDocID( pDoc->GetDocumentID() ); pDoc->CopyToClip(aClipParam, pClipDoc, &rMark, false, false, bIncludeObjects); + + if ( pDoc && pClipDoc ) + { + ScDrawLayer* pDrawLayer = pClipDoc->GetDrawLayer(); + if ( pDrawLayer ) + { + ScClipParam& rClipParam = pClipDoc->GetClipParam(); + ScRangeListVector& rRangesVector = rClipParam.maProtectedChartRangesVector; + SCTAB nTabCount = pClipDoc->GetTableCount(); + for ( SCTAB nTab = 0; nTab < nTabCount; ++nTab ) + { + SdrPage* pPage = pDrawLayer->GetPage( static_cast< sal_uInt16 >( nTab ) ); + if ( pPage ) + { + ScChartHelper::FillProtectedChartRangesVector( rRangesVector, pDoc, pPage ); + } + } + } + } + if (bSysClip) { ScDrawLayer::SetGlobalDrawPersist(NULL); ScGlobal::SetClipDocName( pDoc->GetDocumentShell()->GetTitle( SFX_TITLE_FULLNAME ) ); } - pClipDoc->ExtendMerge( aRange, TRUE ); + pClipDoc->ExtendMerge( aRange, sal_True ); if (bSysClip) { @@ -343,7 +363,7 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI SC_MOD()->SetClipObject( pTransferObj, NULL ); // internal clipboard } - bDone = TRUE; + bDone = sal_True; } else { @@ -480,9 +500,9 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI } // Copy the content of the Range into clipboard. Adding this method for VBA API: Range.Copy(). -BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, BOOL bCut, BOOL bApi, BOOL bIncludeObjects, BOOL bStopEdit ) +sal_Bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, sal_Bool bCut, sal_Bool bApi, sal_Bool bIncludeObjects, sal_Bool bStopEdit ) { - BOOL bDone = FALSE; + sal_Bool bDone = false; if ( bStopEdit ) UpdateInputLine(); @@ -490,12 +510,12 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, BOOL b ScDocument* pDoc = GetViewData()->GetDocument(); if ( pDoc && !pDoc->HasSelectedBlockMatrixFragment( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aStart.Tab() ) ) { - BOOL bSysClip = FALSE; + sal_Bool bSysClip = false; if ( !pClipDoc ) { // Create one (deleted by ScTransferObj). pClipDoc = new ScDocument( SCDOCMODE_CLIP ); - bSysClip = TRUE; + bSysClip = true; } if ( !bCut ) { @@ -506,7 +526,7 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, BOOL b if ( bSysClip && bIncludeObjects ) { - BOOL bAnyOle = pDoc->HasOLEObjectsInArea( aRange ); + sal_Bool bAnyOle = pDoc->HasOLEObjectsInArea( aRange ); // Update ScGlobal::pDrawClipDocShellRef. ScDrawLayer::SetGlobalDrawPersist( ScTransferObj::SetDrawClipDoc( bAnyOle ) ); } @@ -518,7 +538,7 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, BOOL b ScDrawLayer::SetGlobalDrawPersist(NULL); ScGlobal::SetClipDocName( pDoc->GetDocumentShell()->GetTitle( SFX_TITLE_FULLNAME ) ); } - pClipDoc->ExtendMerge( aRange, TRUE ); + pClipDoc->ExtendMerge( aRange, true ); if ( bSysClip ) { @@ -538,7 +558,7 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRange& rRange, BOOL b SC_MOD()->SetClipObject( pTransferObj, NULL ); } - bDone = TRUE; + bDone = true; } else { @@ -563,14 +583,14 @@ ScTransferObj* ScViewFunc::CopyToTransferable() { ScDocument *pClipDoc = new ScDocument( SCDOCMODE_CLIP ); // create one (deleted by ScTransferObj) - BOOL bAnyOle = pDoc->HasOLEObjectsInArea( aRange, &rMark ); + sal_Bool bAnyOle = pDoc->HasOLEObjectsInArea( aRange, &rMark ); ScDrawLayer::SetGlobalDrawPersist( ScTransferObj::SetDrawClipDoc( bAnyOle ) ); ScClipParam aClipParam(aRange, false); pDoc->CopyToClip(aClipParam, pClipDoc, &rMark, false, false, true); ScDrawLayer::SetGlobalDrawPersist(NULL); - pClipDoc->ExtendMerge( aRange, TRUE ); + pClipDoc->ExtendMerge( aRange, sal_True ); ScDocShell* pDocSh = GetViewData()->GetDocShell(); TransferableObjectDescriptor aObjDesc; @@ -597,7 +617,7 @@ void ScViewFunc::PasteDraw() pViewData->GetActivePart() ) ); ScDrawTransferObj* pDrawClip = ScDrawTransferObj::GetOwnClipboard( pWin ); if (pDrawClip) - PasteDraw( aPos, pDrawClip->GetModel(), FALSE, + PasteDraw( aPos, pDrawClip->GetModel(), false, pDrawClip->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); } @@ -614,8 +634,8 @@ void ScViewFunc::PasteFromSystem() // keep a reference in case the clipboard is changed during PasteFromClip uno::Reference<datatransfer::XTransferable> aOwnClipRef( pOwnClip ); PasteFromClip( IDF_ALL, pOwnClip->GetDocument(), - PASTE_NOFUNC, FALSE, FALSE, FALSE, INS_NONE, IDF_NONE, - TRUE ); // allow warning dialog + PASTE_NOFUNC, false, false, false, INS_NONE, IDF_NONE, + sal_True ); // allow warning dialog } else if (pDrawClip) PasteDraw(); @@ -624,9 +644,9 @@ void ScViewFunc::PasteFromSystem() TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pWin ) ); { - ULONG nBiff8 = SotExchange::RegisterFormatName( + sal_uLong nBiff8 = SotExchange::RegisterFormatName( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Biff8"))); - ULONG nBiff5 = SotExchange::RegisterFormatName( + sal_uLong nBiff5 = SotExchange::RegisterFormatName( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Biff5"))); // als erstes SvDraw-Model, dann Grafik @@ -654,7 +674,7 @@ void ScViewFunc::PasteFromSystem() // it probably is spreadsheet cells that have been put // on the clipboard by OOo, so use the SYLK. (fdo#31077) - BOOL bDoRtf = FALSE; + sal_Bool bDoRtf = false; TransferableObjectDescriptor aObjDesc; if( aDataHelper.GetTransferableObjectDescriptor( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc ) ) { @@ -726,8 +746,8 @@ void ScViewFunc::PasteFromTransferable( const uno::Reference<datatransfer::XTran if (pOwnClip) { PasteFromClip( IDF_ALL, pOwnClip->GetDocument(), - PASTE_NOFUNC, FALSE, FALSE, FALSE, INS_NONE, IDF_NONE, - TRUE ); // allow warning dialog + PASTE_NOFUNC, false, false, false, INS_NONE, IDF_NONE, + sal_True ); // allow warning dialog } else if (pDrawClip) { @@ -736,17 +756,17 @@ void ScViewFunc::PasteFromTransferable( const uno::Reference<datatransfer::XTran SCROW nPosY = pViewData->GetCurY(); Window* pWin = GetActiveWin(); Point aPos = pWin->PixelToLogic( pViewData->GetScrPos( nPosX, nPosY, pViewData->GetActivePart() ) ); - PasteDraw( aPos, pDrawClip->GetModel(), FALSE, pDrawClip->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); + PasteDraw( aPos, pDrawClip->GetModel(), false, pDrawClip->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); } else { TransferableDataHelper aDataHelper( rxTransferable ); { - ULONG nBiff8 = SotExchange::RegisterFormatName( + sal_uLong nBiff8 = SotExchange::RegisterFormatName( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Biff8"))); - ULONG nBiff5 = SotExchange::RegisterFormatName( + sal_uLong nBiff5 = SotExchange::RegisterFormatName( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Biff5"))); - ULONG nFormatId = 0; + sal_uLong nFormatId = 0; // als erstes SvDraw-Model, dann Grafik // (Grafik darf nur bei einzelner Grafik drinstehen) @@ -757,7 +777,7 @@ void ScViewFunc::PasteFromTransferable( const uno::Reference<datatransfer::XTran else if (aDataHelper.HasFormat( SOT_FORMATSTR_ID_EMBED_SOURCE )) { // If it's a Writer object, insert RTF instead of OLE - BOOL bDoRtf = FALSE; + sal_Bool bDoRtf = false; TransferableObjectDescriptor aObjDesc; if( aDataHelper.GetTransferableObjectDescriptor( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc ) ) { @@ -804,16 +824,16 @@ void ScViewFunc::PasteFromTransferable( const uno::Reference<datatransfer::XTran PasteDataFormat( nFormatId, aDataHelper.GetTransferable(), GetViewData()->GetCurX(), GetViewData()->GetCurY(), - NULL, FALSE, FALSE ); + NULL, false, false ); } } } -BOOL ScViewFunc::PasteFromSystem( ULONG nFormatId, BOOL bApi ) +sal_Bool ScViewFunc::PasteFromSystem( sal_uLong nFormatId, sal_Bool bApi ) { UpdateInputLine(); - BOOL bRet = TRUE; + sal_Bool bRet = sal_True; Window* pWin = GetActiveWin(); ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin ); if ( nFormatId == 0 && pOwnClip ) @@ -821,18 +841,18 @@ BOOL ScViewFunc::PasteFromSystem( ULONG nFormatId, BOOL bApi ) // keep a reference in case the clipboard is changed during PasteFromClip uno::Reference<datatransfer::XTransferable> aOwnClipRef( pOwnClip ); PasteFromClip( IDF_ALL, pOwnClip->GetDocument(), - PASTE_NOFUNC, FALSE, FALSE, FALSE, INS_NONE, IDF_NONE, + PASTE_NOFUNC, false, false, false, INS_NONE, IDF_NONE, !bApi ); // allow warning dialog } else { TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pWin ) ); if ( !aDataHelper.GetTransferable().is() ) - return FALSE; + return false; bRet = PasteDataFormat( nFormatId, aDataHelper.GetTransferable(), GetViewData()->GetCurX(), GetViewData()->GetCurY(), - NULL, FALSE, !bApi ); // allow warning dialog + NULL, false, !bApi ); // allow warning dialog if ( !bRet && !bApi ) ErrorMessage(STR_PASTE_ERROR); @@ -844,10 +864,10 @@ BOOL ScViewFunc::PasteFromSystem( ULONG nFormatId, BOOL bApi ) //---------------------------------------------------------------------------- // P A S T E -BOOL ScViewFunc::PasteOnDrawObject( const uno::Reference<datatransfer::XTransferable>& rxTransferable, - SdrObject* pHitObj, BOOL bLink ) +sal_Bool ScViewFunc::PasteOnDrawObject( const uno::Reference<datatransfer::XTransferable>& rxTransferable, + SdrObject* pHitObj, sal_Bool bLink ) { - BOOL bRet = FALSE; + sal_Bool bRet = false; if ( bLink ) { TransferableDataHelper aDataHelper( rxTransferable ); @@ -881,14 +901,14 @@ BOOL ScViewFunc::PasteOnDrawObject( const uno::Reference<datatransfer::XTransfer return bRet; } -BOOL lcl_SelHasAttrib( ScDocument* pDoc, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - const ScMarkData& rTabSelection, USHORT nMask ) +sal_Bool lcl_SelHasAttrib( ScDocument* pDoc, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rTabSelection, sal_uInt16 nMask ) { SCTAB nTabCount = pDoc->GetTableCount(); for (SCTAB nTab=0; nTab<nTabCount; nTab++) if ( rTabSelection.GetTableSelect(nTab) && pDoc->HasAttrib( nCol1, nRow1, nTab, nCol2, nRow2, nTab, nMask ) ) - return TRUE; - return FALSE; + return sal_True; + return false; } // @@ -943,26 +963,26 @@ bool lcl_checkDestRangeForOverwrite(const ScRange& rDestRange, const ScDocument* } -BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, - USHORT nFunction, BOOL bSkipEmpty, - BOOL bTranspose, BOOL bAsLink, - InsCellCmd eMoveMode, USHORT nUndoExtraFlags, - BOOL bAllowDialogs ) +sal_Bool ScViewFunc::PasteFromClip( sal_uInt16 nFlags, ScDocument* pClipDoc, + sal_uInt16 nFunction, sal_Bool bSkipEmpty, + sal_Bool bTranspose, sal_Bool bAsLink, + InsCellCmd eMoveMode, sal_uInt16 nUndoExtraFlags, + sal_Bool bAllowDialogs ) { if (!pClipDoc) { OSL_FAIL("PasteFromClip: pClipDoc=0 not allowed"); - return FALSE; + return false; } // fuer Undo etc. immer alle oder keine Inhalte sichern - USHORT nContFlags = IDF_NONE; + sal_uInt16 nContFlags = IDF_NONE; if (nFlags & IDF_CONTENTS) nContFlags |= IDF_CONTENTS; if (nFlags & IDF_ATTRIB) nContFlags |= IDF_ATTRIB; // evtl. Attribute ins Undo ohne sie vom Clip ins Doc zu kopieren - USHORT nUndoFlags = nContFlags; + sal_uInt16 nUndoFlags = nContFlags; if (nUndoExtraFlags & IDF_ATTRIB) nUndoFlags |= IDF_ATTRIB; // do not copy note captions into undo document @@ -974,11 +994,11 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, nFlags, pClipDoc, nFunction, bSkipEmpty, bTranspose, bAsLink, bAllowDialogs, eMoveMode, nContFlags, nUndoFlags); - BOOL bCutMode = pClipDoc->IsCutMode(); // if transposing, take from original clipdoc - BOOL bIncludeFiltered = bCutMode; + sal_Bool bCutMode = pClipDoc->IsCutMode(); // if transposing, take from original clipdoc + sal_Bool bIncludeFiltered = bCutMode; // paste drawing: also if IDF_NOTE is set (to create drawing layer for note captions) - BOOL bPasteDraw = ( pClipDoc->GetDrawLayer() && ( nFlags & (IDF_OBJECTS|IDF_NOTE) ) ); + sal_Bool bPasteDraw = ( pClipDoc->GetDrawLayer() && ( nFlags & (IDF_OBJECTS|IDF_NOTE) ) ); ScDocShellRef aTransShellRef; // for objects in xTransClip - must remain valid as long as xTransClip ScDocument* pOrigClipDoc = NULL; @@ -988,12 +1008,12 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, SCCOL nX; SCROW nY; // include filtered rows until TransposeClip can skip them - bIncludeFiltered = TRUE; - pClipDoc->GetClipArea( nX, nY, TRUE ); + bIncludeFiltered = sal_True; + pClipDoc->GetClipArea( nX, nY, sal_True ); if ( nY > static_cast<sal_Int32>(MAXCOL) ) // zuviele Zeilen zum Transponieren { ErrorMessage(STR_PASTE_FULL); - return FALSE; + return false; } pOrigClipDoc = pClipDoc; // fuer Referenzen @@ -1019,7 +1039,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, SCTAB nEndTab; SCCOL nClipSizeX; SCROW nClipSizeY; - pClipDoc->GetClipArea( nClipSizeX, nClipSizeY, TRUE ); // size in clipboard doc + pClipDoc->GetClipArea( nClipSizeX, nClipSizeY, sal_True ); // size in clipboard doc // size in target doc: include filtered rows only if CutMode is set SCCOL nDestSizeX; @@ -1029,8 +1049,8 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, ScDocument* pDoc = GetViewData()->GetDocument(); ScDocShell* pDocSh = GetViewData()->GetDocShell(); ScMarkData& rMark = GetViewData()->GetMarkData(); - SfxUndoManager* pUndoMgr = pDocSh->GetUndoManager(); - const BOOL bRecord(pDoc->IsUndoEnabled()); + ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); + const sal_Bool bRecord(pDoc->IsUndoEnabled()); ScDocShellModificator aModificator( *pDocSh ); @@ -1082,7 +1102,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (bNoPaste) { ErrorMessage(STR_MSSG_PASTEFROMCLIP_0); - return FALSE; + return false; } SCROW nUnfilteredRows = aMarkRange.aEnd.Row() - aMarkRange.aStart.Row() + 1; @@ -1090,7 +1110,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (bMarkIsFiltered) { ScViewUtil::UnmarkFiltered( aFilteredMark, pDoc); - aFilteredMark.FillRangeListWithMarks( &aRangeList, FALSE); + aFilteredMark.FillRangeListWithMarks( &aRangeList, false); nUnfilteredRows = 0; size_t ListSize = aRangeList.size(); for ( size_t i = 0; i < ListSize; ++i ) @@ -1107,7 +1127,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, { /* FIXME: this should be a more descriptive error message then. */ ErrorMessage(STR_MSSG_PASTEFROMCLIP_0); - return FALSE; + return false; } #endif } @@ -1133,7 +1153,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, WinBits(WB_YES_NO | WB_DEF_NO), aMessage ); if ( aBox.Execute() != RET_YES ) { - return FALSE; + return false; } } @@ -1157,7 +1177,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (!ScViewUtil::FitToUnfilteredRows( aMarkRange, pDoc, nDestSizeY+1)) { ErrorMessage(STR_PASTE_FULL); - return FALSE; + return false; } } aMarkRange.GetVars( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab); @@ -1165,7 +1185,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (bMarkIsFiltered) { ScViewUtil::UnmarkFiltered( aFilteredMark, pDoc); - aFilteredMark.FillRangeListWithMarks( &aRangeList, TRUE); + aFilteredMark.FillRangeListWithMarks( &aRangeList, sal_True); } } } @@ -1187,7 +1207,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, // Sollen Zellen eingefuegt werden? // (zu grosse nEndCol/nEndRow werden weiter unten erkannt) - BOOL bInsertCells = ( eMoveMode != INS_NONE && !bOffLimits ); + sal_Bool bInsertCells = ( eMoveMode != INS_NONE && !bOffLimits ); if ( bInsertCells ) { // Instead of EnterListAction, the paste undo action is merged into the @@ -1196,10 +1216,10 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, MarkRange( aUserRange ); // wird vor CopyFromClip sowieso gesetzt // CutMode is reset on insertion of cols/rows but needed again on cell move - BOOL bCut = pClipDoc->IsCutMode(); - if (!InsertCells( eMoveMode, bRecord, TRUE )) // is inserting possible? + sal_Bool bCut = pClipDoc->IsCutMode(); + if (!InsertCells( eMoveMode, bRecord, true )) // is inserting possible? { - return FALSE; + return false; // #i21036# EnterListAction isn't used, and InsertCells doesn't insert // its undo action on failure, so no undo handling is needed here } @@ -1208,7 +1228,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, } else if (!bOffLimits) { - BOOL bAskIfNotEmpty = bAllowDialogs && + sal_Bool bAskIfNotEmpty = bAllowDialogs && ( nFlags & IDF_CONTENTS ) && nFunction == PASTE_NOFUNC && SC_MOD()->GetInputOptions().GetReplaceCellsWarn(); @@ -1224,14 +1244,14 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, pClipDoc->GetClipStart( nClipStartX, nClipStartY ); SCCOL nUndoEndCol = nClipStartX + nClipSizeX; SCROW nUndoEndRow = nClipStartY + nClipSizeY; // end of source area in clipboard document - BOOL bClipOver = FALSE; + sal_Bool bClipOver = false; // #i68690# ExtendMerge for the clip doc must be called with the clipboard's sheet numbers. // The same end column/row can be used for all calls because the clip doc doesn't contain // content outside the clip area. for (SCTAB nClipTab=0; nClipTab<=MAXTAB; nClipTab++) if ( pClipDoc->HasTable(nClipTab) ) - if ( pClipDoc->ExtendMerge( nClipStartX,nClipStartY, nUndoEndCol,nUndoEndRow, nClipTab, FALSE ) ) - bClipOver = TRUE; + if ( pClipDoc->ExtendMerge( nClipStartX,nClipStartY, nUndoEndCol,nUndoEndRow, nClipTab, false ) ) + bClipOver = sal_True; nUndoEndCol -= nClipStartX + nClipSizeX; nUndoEndRow -= nClipStartY + nClipSizeY; // now contains only the difference added by ExtendMerge nUndoEndCol = sal::static_int_cast<SCCOL>( nUndoEndCol + nEndCol ); @@ -1240,10 +1260,10 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (nUndoEndCol>MAXCOL || nUndoEndRow>MAXROW) { ErrorMessage(STR_PASTE_FULL); - return FALSE; + return false; } - pDoc->ExtendMergeSel( nStartCol,nStartRow, nUndoEndCol,nUndoEndRow, aFilteredMark, FALSE ); + pDoc->ExtendMergeSel( nStartCol,nStartRow, nUndoEndCol,nUndoEndRow, aFilteredMark, false ); // Test auf Zellschutz @@ -1251,7 +1271,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); - return FALSE; + return false; } //! Test auf Ueberlappung @@ -1282,8 +1302,8 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, { ScRange aRange(nCol, nRow1, nStartTab); pDoc->ExtendOverlapped(aRange); - pDoc->ExtendMerge(aRange, TRUE, TRUE); - rDocFunc.UnmergeCells(aRange, bRecord, TRUE); + pDoc->ExtendMerge(aRange, sal_True, sal_True); + rDocFunc.UnmergeCells(aRange, bRecord, sal_True); } } } @@ -1295,8 +1315,8 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, pChangeTrack->ResetLastCut(); // kein CutMode mehr } - BOOL bColInfo = ( nStartRow==0 && nEndRow==MAXROW ); - BOOL bRowInfo = ( nStartCol==0 && nEndCol==MAXCOL ); + sal_Bool bColInfo = ( nStartRow==0 && nEndRow==MAXROW ); + sal_Bool bRowInfo = ( nStartCol==0 && nEndCol==MAXCOL ); ScDocument* pUndoDoc = NULL; ScDocument* pRefUndoDoc = NULL; @@ -1311,18 +1331,18 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, // all sheets - CopyToDocument skips those that don't exist in pUndoDoc SCTAB nTabCount = pDoc->GetTableCount(); pDoc->CopyToDocument( nStartCol, nStartRow, 0, nUndoEndCol, nUndoEndRow, nTabCount-1, - nUndoFlags, FALSE, pUndoDoc ); + nUndoFlags, false, pUndoDoc ); if ( bCutMode ) { pRefUndoDoc = new ScDocument( SCDOCMODE_UNDO ); - pRefUndoDoc->InitUndo( pDoc, 0, nTabCount-1, FALSE, FALSE ); + pRefUndoDoc->InitUndo( pDoc, 0, nTabCount-1, false, false ); pUndoData = new ScRefUndoData( pDoc ); } } - USHORT nExtFlags = 0; + sal_uInt16 nExtFlags = 0; pDocSh->UpdatePaintExt( nExtFlags, nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab ); // content before the change @@ -1349,7 +1369,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, pMixDoc = new ScDocument( SCDOCMODE_UNDO ); pMixDoc->InitUndo( pDoc, nStartTab, nEndTab ); pDoc->CopyToDocument( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab, - IDF_CONTENTS, FALSE, pMixDoc ); + IDF_CONTENTS, false, pMixDoc ); } } @@ -1362,12 +1382,12 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, if ( bRecord ) pDoc->BeginDrawUndo(); - USHORT nNoObjFlags = nFlags & ~IDF_OBJECTS; + sal_uInt16 nNoObjFlags = nFlags & ~IDF_OBJECTS; if (!bAsLink) { // copy normally (original range) pDoc->CopyFromClip( aUserRange, aFilteredMark, nNoObjFlags, - pRefUndoDoc, pClipDoc, TRUE, FALSE, bIncludeFiltered, + pRefUndoDoc, pClipDoc, sal_True, false, bIncludeFiltered, bSkipEmpty, (bMarkIsFiltered ? &aRangeList : NULL) ); // bei Transpose Referenzen per Hand anpassen @@ -1378,7 +1398,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, { // copy with bAsLink=TRUE pDoc->CopyFromClip( aUserRange, aFilteredMark, nNoObjFlags, pRefUndoDoc, pClipDoc, - TRUE, TRUE, bIncludeFiltered, bSkipEmpty ); + sal_True, sal_True, bIncludeFiltered, bSkipEmpty ); } else { @@ -1388,9 +1408,9 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, // skipped rows and merged cells don't mix if ( !bIncludeFiltered && pClipDoc->HasClipFilteredRows() ) - rDocFunc.UnmergeCells( aUserRange, FALSE, TRUE ); + rDocFunc.UnmergeCells( aUserRange, false, sal_True ); - pDoc->ExtendMergeSel( nStartCol, nStartRow, nEndCol, nEndRow, aFilteredMark, TRUE ); // Refresh + pDoc->ExtendMergeSel( nStartCol, nStartRow, nEndCol, nEndRow, aFilteredMark, sal_True ); // Refresh // und Bereich neu if ( pMixDoc ) // Rechenfunktionen mit Original-Daten auszufuehren ? @@ -1401,12 +1421,23 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, AdjustBlockHeight(); // update row heights before pasting objects + ::std::vector< ::rtl::OUString > aExcludedChartNames; + SdrPage* pPage = NULL; + if ( nFlags & IDF_OBJECTS ) { + ScDrawView* pScDrawView = GetScDrawView(); + SdrModel* pModel = ( pScDrawView ? pScDrawView->GetModel() : NULL ); + pPage = ( pModel ? pModel->GetPage( static_cast< sal_uInt16 >( nStartTab ) ) : NULL ); + if ( pPage ) + { + ScChartHelper::GetChartNames( aExcludedChartNames, pPage ); + } + // Paste the drawing objects after the row heights have been updated. pDoc->CopyFromClip( aUserRange, aFilteredMark, IDF_OBJECTS, pRefUndoDoc, pClipDoc, - TRUE, FALSE, bIncludeFiltered ); + sal_True, false, bIncludeFiltered ); } @@ -1448,7 +1479,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, pUndoDoc->AddUndoTab( 0, nTabCount-1 ); pRefUndoDoc->DeleteArea( nStartCol, nStartRow, nEndCol, nEndRow, aFilteredMark, IDF_ALL ); pRefUndoDoc->CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTabCount-1, - IDF_FORMULA, FALSE, pUndoDoc ); + IDF_FORMULA, false, pUndoDoc ); delete pRefUndoDoc; } @@ -1467,21 +1498,21 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, nUndoEndCol, nUndoEndRow, nEndTab, aFilteredMark, pUndoDoc, pRedoDoc, nFlags | nUndoFlags, pUndoData, NULL, NULL, NULL, - FALSE, &aOptions ); // FALSE = Redo data not yet copied + false, &aOptions ); // sal_False = Redo data not yet copied if ( bInsertCells ) { // Merge the paste undo action into the insert action. // Use ScUndoWrapper so the ScUndoPaste pointer can be stored in the insert action. - pUndoMgr->AddUndoAction( new ScUndoWrapper( pUndo ), TRUE ); + pUndoMgr->AddUndoAction( new ScUndoWrapper( pUndo ), sal_True ); } else pUndoMgr->AddUndoAction( pUndo ); pUndoMgr->LeaveListAction(); } - USHORT nPaint = PAINT_GRID; + sal_uInt16 nPaint = PAINT_GRID; if (bColInfo) { nPaint |= PAINT_TOP; @@ -1498,7 +1529,20 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, aModificator.SetDocumentModified(); PostPasteFromClip(aUserRange, rMark); - return TRUE; + + if ( nFlags & IDF_OBJECTS ) + { + ScModelObj* pModelObj = ( pDocSh ? ScModelObj::getImplementation( pDocSh->GetModel() ) : NULL ); + if ( pDoc && pPage && pModelObj ) + { + bool bSameDoc = ( rClipParam.getSourceDocID() == pDoc->GetDocumentID() ); + const ScRangeListVector& rProtectedChartRangesVector( rClipParam.maProtectedChartRangesVector ); + ScChartHelper::CreateProtectedChartListenersAndNotify( pDoc, pPage, pModelObj, nStartTab, + rProtectedChartRangesVector, aExcludedChartNames, bSameDoc ); + } + } + + return sal_True; } bool ScViewFunc::PasteMultiRangesFromClip( @@ -1631,7 +1675,7 @@ bool ScViewFunc::PasteMultiRangesFromClip( if (pDoc->IsUndoEnabled()) { - SfxUndoManager* pUndoMgr = pDocSh->GetUndoManager(); + ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); String aUndo = ScGlobal::GetRscString( pClipDoc->IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY); pUndoMgr->EnterListAction(aUndo, aUndo); @@ -1699,13 +1743,13 @@ void ScViewFunc::PostPasteFromClip(const ScRange& rPasteRange, const ScMarkData& // // innerhalb des Dokuments -BOOL ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, - BOOL bCut, BOOL bRecord, BOOL bPaint, BOOL bApi ) +sal_Bool ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, + sal_Bool bCut, sal_Bool bRecord, sal_Bool bPaint, sal_Bool bApi ) { ScDocShell* pDocSh = GetViewData()->GetDocShell(); HideAllCursors(); // wegen zusammengefassten - BOOL bSuccess = TRUE; + sal_Bool bSuccess = sal_True; SCTAB nDestTab = rDestPos.Tab(); const ScMarkData& rMark = GetViewData()->GetMarkData(); if ( rSource.aStart.Tab() == nDestTab && rSource.aEnd.Tab() == nDestTab && rMark.GetSelectCount() > 1 ) @@ -1764,7 +1808,7 @@ BOOL ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, rDestPos.Row() + rSource.aEnd.Row() - rSource.aStart.Row(), nDestTab ); - BOOL bIncludeFiltered = bCut; + sal_Bool bIncludeFiltered = bCut; if ( !bIncludeFiltered ) { // find number of non-filtered rows @@ -1776,7 +1820,7 @@ BOOL ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, aDestEnd.SetRow( rDestPos.Row() + nPastedCount - 1 ); } - MarkRange( ScRange( rDestPos, aDestEnd ), FALSE ); //! FALSE ??? + MarkRange( ScRange( rDestPos, aDestEnd ), false ); //! sal_False ??? pDocSh->UpdateOle(GetViewData()); SelectionChanged(); @@ -1786,7 +1830,7 @@ BOOL ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, // Link innerhalb des Dokuments -BOOL ScViewFunc::LinkBlock( const ScRange& rSource, const ScAddress& rDestPos, BOOL bApi ) +sal_Bool ScViewFunc::LinkBlock( const ScRange& rSource, const ScAddress& rDestPos, sal_Bool bApi ) { // Test auf Ueberlappung @@ -1800,7 +1844,7 @@ BOOL ScViewFunc::LinkBlock( const ScRange& rSource, const ScAddress& rDestPos, B { if (!bApi) ErrorMessage( STR_ERR_LINKOVERLAP ); - return FALSE; + return false; } } @@ -1817,15 +1861,15 @@ BOOL ScViewFunc::LinkBlock( const ScRange& rSource, const ScAddress& rDestPos, B if ( GetViewData()->GetTabNo() != rDestPos.Tab() ) SetTabNo( rDestPos.Tab() ); - MoveCursorAbs( rDestPos.Col(), rDestPos.Row(), SC_FOLLOW_NONE, FALSE, FALSE ); + MoveCursorAbs( rDestPos.Col(), rDestPos.Row(), SC_FOLLOW_NONE, false, false ); // Paste - PasteFromClip( IDF_ALL, pClipDoc, PASTE_NOFUNC, FALSE, FALSE, TRUE ); // als Link + PasteFromClip( IDF_ALL, pClipDoc, PASTE_NOFUNC, false, false, sal_True ); // als Link delete pClipDoc; - return TRUE; + return sal_True; } void ScViewFunc::DataFormPutData( SCROW nCurrentRow , @@ -1841,7 +1885,7 @@ void ScViewFunc::DataFormPutData( SCROW nCurrentRow , SfxUndoManager* pUndoMgr = pDocSh->GetUndoManager(); if ( pDoc ) { - const BOOL bRecord( pDoc->IsUndoEnabled()); + const sal_Bool bRecord( pDoc->IsUndoEnabled()); ScDocument* pUndoDoc = NULL; ScDocument* pRedoDoc = NULL; ScRefUndoData* pUndoData = NULL; @@ -1855,19 +1899,19 @@ void ScViewFunc::DataFormPutData( SCROW nCurrentRow , pChangeTrack->ResetLastCut(); // kein CutMode mehr } ScRange aUserRange( nStartCol, nCurrentRow, nStartTab, nEndCol, nCurrentRow, nEndTab ); - BOOL bColInfo = ( nStartRow==0 && nEndRow==MAXROW ); - BOOL bRowInfo = ( nStartCol==0 && nEndCol==MAXCOL ); + sal_Bool bColInfo = ( nStartRow==0 && nEndRow==MAXROW ); + sal_Bool bRowInfo = ( nStartCol==0 && nEndCol==MAXCOL ); SCCOL nUndoEndCol = nStartCol+aColLength-1; SCROW nUndoEndRow = nCurrentRow; - USHORT nUndoFlags = IDF_NONE; + sal_uInt16 nUndoFlags = IDF_NONE; if ( bRecord ) { pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); pUndoDoc->InitUndoSelected( pDoc , rMark , bColInfo , bRowInfo ); - pDoc->CopyToDocument( aUserRange , 1 , FALSE , pUndoDoc ); + pDoc->CopyToDocument( aUserRange , 1 , false , pUndoDoc ); } - USHORT nExtFlags = 0; + sal_uInt16 nExtFlags = 0; pDocSh->UpdatePaintExt( nExtFlags, nStartCol, nStartRow, nStartTab , nEndCol, nEndRow, nEndTab ); // content before the change pDoc->BeginDrawUndo(); @@ -1885,10 +1929,10 @@ void ScViewFunc::DataFormPutData( SCROW nCurrentRow , nUndoEndCol, nUndoEndRow, nEndTab, rMark, pUndoDoc, pRedoDoc, nUndoFlags, pUndoData, NULL, NULL, NULL, - FALSE ); // FALSE = Redo data not yet copied - pUndoMgr->AddUndoAction( new ScUndoWrapper( pUndo ), TRUE ); + false ); // FALSE = Redo data not yet copied + pUndoMgr->AddUndoAction( new ScUndoWrapper( pUndo ), true ); - USHORT nPaint = PAINT_GRID; + sal_uInt16 nPaint = PAINT_GRID; if (bColInfo) { nPaint |= PAINT_TOP; |