36 #include <osl/diagnose.h>
41 #include <viewfunc.hxx>
44 #include <docfunc.hxx>
47 #include <globstr.hrc>
62 #include <drawview.hxx>
66 #include <com/sun/star/util/XCloneable.hpp>
72 void collectUIInformation(std::map<OUString, OUString>&& aParameters,
const OUString& action)
75 aDescription.
aID =
"grid_window";
78 aDescription.
aParent =
"MainWindow";
79 aDescription.
aKeyWord =
"ScGridWinUIObject";
104 ScDocument& rDoc = GetViewData().GetDocument();
105 ScDocShell* pDocSh = GetViewData().GetDocShell();
106 ScMarkData& rMark = GetViewData().GetMarkData();
114 InitOwnBlockMode( aRange );
119 CopyToClip(
nullptr,
true,
false,
true );
128 pUndoDoc->InitUndoSelected( rDoc, rMark );
137 sal_uInt16 nExtFlags = 0;
150 std::make_unique<ScUndoCut>( pDocSh, aRange, aOldEnd, rMark, std::move(pUndoDoc) ) );
152 aModificator.SetDocumentModified();
155 CellContentChanged();
160 collectUIInformation({{
"RANGE", aStartAddress +
":" + aEndAddress}},
"CUT");
163 ErrorMessage( STR_NOMULTISELECT );
171 ScMarkType eMarkType = GetViewData().GetSimpleArea( aRange );
172 ScMarkData& rMark = GetViewData().GetMarkData();
178 bDone = CopyToClip( pClipDoc, aRangeList, bCut, bApi, bIncludeObjects, bStopEdit );
185 bDone = CopyToClip( pClipDoc, aRangeList, bCut, bApi, bIncludeObjects, bStopEdit );
190 ErrorMessage(STR_NOMULTISELECT);
195 collectUIInformation({{
"RANGE", aStartAddress +
":" + aEndAddress}},
"COPY");
203 if ( rRanges.
empty() )
209 if (rRanges.
size() > 1)
210 bDone = CopyToClipMultiRange(pClipDoc, rRanges, bCut, bApi, bIncludeObjects);
212 bDone = CopyToClipSingleRange(pClipDoc, rRanges, bCut, bIncludeObjects);
222 ScDocument& rDoc = GetViewData().GetDocument();
223 ScMarkData& rMark = GetViewData().GetMarkData();
228 bool bSysClip =
false;
229 std::shared_ptr<ScDocument> pSysClipDoc;
234 pClipDoc = pSysClipDoc.get();
244 if ( bSysClip && bIncludeObjects )
259 uno::Reference<util::XCloneable> xCloneable(pObjectShell->getDocProperties(), uno::UNO_QUERY_THROW);
261 pOptions->m_xDocumentProperties.set(xCloneable->createClone(), uno::UNO_QUERY);
265 rDoc.
CopyToClip( aClipParam, pClipDoc, &rMark,
false, bIncludeObjects );
271 for (
SCTAB nTab = 0; nTab < nTabCount; ++nTab )
273 SdrPage* pPage = pDrawLayer->GetPage( static_cast< sal_uInt16 >( nTab ) );
290 ScDocShell* pDocSh = GetViewData().GetDocShell();
300 pTransferObj->SetDrawPersist( aPersistRef );
302 pTransferObj->CopyToClipboard( GetActiveWin() );
314 ErrorMessage(STR_NOMULTISELECT);
321 ErrorMessage(STR_NOMULTISELECT);
327 ScDocument& rDoc = GetViewData().GetDocument();
328 ScMarkData& rMark = GetViewData().GetMarkData();
330 bool bSuccess =
false;
338 bool bValidRanges =
true;
340 SCCOL nPrevColDelta = 0;
341 SCROW nPrevRowDelta = 0;
353 ErrorMessage(STR_MATRIXFRAGMENTERR);
360 if ((nColDelta && nRowDelta) || (nPrevColDelta && nRowDelta) || (nPrevRowDelta && nColDelta))
362 bValidRanges =
false;
380 bValidRanges =
false;
387 bValidRanges =
false;
393 nPrevColDelta = nColDelta;
394 nPrevRowDelta = nRowDelta;
395 nPrevColSize = nColSize;
396 nPrevRowSize = nRowSize;
400 rDoc.
CopyToClip(aClipParam, pDocClip.get(), &rMark,
false, bIncludeObjects );
406 ScDocShell* pDocSh = GetViewData().GetDocShell();
416 pTransferObj->SetDrawPersist( aPersistRef );
418 pTransferObj->CopyToClipboard( GetActiveWin() );
424 if (!bSuccess && !bApi)
425 ErrorMessage(STR_NOMULTISELECT);
437 ScDocument& rDoc = GetViewData().GetDocument();
438 ScMarkData& rMark = GetViewData().GetMarkData();
450 rDoc.
CopyToClip(aClipParam, pClipDoc.get(), &rMark,
false,
true);
453 pClipDoc->ExtendMerge( aRange,
true );
455 ScDocShell* pDocSh = GetViewData().GetDocShell();
479 const OUString& aSrcShellID = pDrawClip->
GetShellID();
481 PasteDraw(aPos, pDrawClip->
GetModel(),
false, aSrcShellID, aDestShellID);
513 uno::Reference<css::datatransfer::XTransferable> xTransferable( aDataHelper.
GetXTransferable() );
516 SotExchangeDest::SCDOC_FREE_AREA,
519 nFormat, nEventAction, SotClipboardFormatId::NONE,
534 PasteFromSystem(nFormat);
546 if (aDataHelper.
HasFormat( SotClipboardFormatId::DRAWING ))
549 if( aDataHelper.
HasFormat( SotClipboardFormatId::RTF ) )
551 PasteFromSystem( SotClipboardFormatId::RTF );
553 else if( aDataHelper.
HasFormat( SotClipboardFormatId::RICHTEXT ) )
555 PasteFromSystem( SotClipboardFormatId::RICHTEXT );
559 PasteFromSystem( SotClipboardFormatId::DRAWING );
562 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBED_SOURCE ))
576 && ( aDataHelper.
HasFormat( SotClipboardFormatId::RTF ) || aDataHelper.
HasFormat( SotClipboardFormatId::RICHTEXT ) ) );
579 PasteFromSystem( aDataHelper.
HasFormat( SotClipboardFormatId::RTF ) ? SotClipboardFormatId::RTF : SotClipboardFormatId::RICHTEXT );
580 else if ( aObjDesc.
maClassName ==
SvGlobalName( 0,0,0,0,0,0,0,0,0,0,0 )
581 && aDataHelper.
HasFormat( SotClipboardFormatId::SYLK ))
582 PasteFromSystem( SotClipboardFormatId::SYLK );
584 PasteFromSystem( SotClipboardFormatId::EMBED_SOURCE );
586 else if (aDataHelper.
HasFormat( SotClipboardFormatId::LINK_SOURCE ))
587 PasteFromSystem( SotClipboardFormatId::LINK_SOURCE );
589 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBEDDED_OBJ_OLE ))
590 PasteFromSystem( SotClipboardFormatId::EMBEDDED_OBJ_OLE );
593 PasteFromSystem(nBiff8);
595 PasteFromSystem(nBiff5);
596 else if (aDataHelper.
HasFormat(SotClipboardFormatId::RTF))
597 PasteFromSystem(SotClipboardFormatId::RTF);
598 else if (aDataHelper.
HasFormat(SotClipboardFormatId::RICHTEXT))
599 PasteFromSystem(SotClipboardFormatId::RICHTEXT);
600 else if (aDataHelper.
HasFormat(SotClipboardFormatId::HTML))
601 PasteFromSystem(SotClipboardFormatId::HTML);
602 else if (aDataHelper.
HasFormat(SotClipboardFormatId::HTML_SIMPLE))
603 PasteFromSystem(SotClipboardFormatId::HTML_SIMPLE);
604 else if (aDataHelper.
HasFormat(SotClipboardFormatId::SYLK))
605 PasteFromSystem(SotClipboardFormatId::SYLK);
606 else if (aDataHelper.
HasFormat(SotClipboardFormatId::STRING_TSVC))
607 PasteFromSystem(SotClipboardFormatId::STRING_TSVC);
608 else if (aDataHelper.
HasFormat(SotClipboardFormatId::STRING))
609 PasteFromSystem(SotClipboardFormatId::STRING);
611 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBED_SOURCE_OLE ))
612 PasteFromSystem( SotClipboardFormatId::EMBED_SOURCE_OLE );
613 else if (aDataHelper.
HasFormat( SotClipboardFormatId::LINK_SOURCE_OLE ))
614 PasteFromSystem( SotClipboardFormatId::LINK_SOURCE_OLE );
624 uno::Reference<lang::XUnoTunnel> xTunnel( rxTransferable, uno::UNO_QUERY );
626 if (
auto pOwnClip = comphelper::getFromUnoTunnel<ScTransferObj>(xTunnel))
632 else if (
auto pDrawClip = comphelper::getFromUnoTunnel<ScDrawTransferObj>(xTunnel))
640 aPos, pDrawClip->GetModel(),
false,
652 if (aDataHelper.
HasFormat( SotClipboardFormatId::DRAWING ))
653 nFormatId = SotClipboardFormatId::DRAWING;
654 else if (aDataHelper.
HasFormat( SotClipboardFormatId::SVXB ))
655 nFormatId = SotClipboardFormatId::SVXB;
656 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBED_SOURCE ))
665 && ( aDataHelper.
HasFormat( SotClipboardFormatId::RTF ) || aDataHelper.
HasFormat( SotClipboardFormatId::RICHTEXT ) ));
668 nFormatId = aDataHelper.
HasFormat( SotClipboardFormatId::RTF ) ? SotClipboardFormatId::RTF : SotClipboardFormatId::RICHTEXT;
670 nFormatId = SotClipboardFormatId::EMBED_SOURCE;
672 else if (aDataHelper.
HasFormat( SotClipboardFormatId::LINK_SOURCE ))
673 nFormatId = SotClipboardFormatId::LINK_SOURCE;
675 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBEDDED_OBJ_OLE ))
676 nFormatId = SotClipboardFormatId::EMBEDDED_OBJ_OLE;
682 else if (aDataHelper.
HasFormat(SotClipboardFormatId::RTF))
683 nFormatId = SotClipboardFormatId::RTF;
684 else if (aDataHelper.
HasFormat(SotClipboardFormatId::RICHTEXT))
685 nFormatId = SotClipboardFormatId::RICHTEXT;
686 else if (aDataHelper.
HasFormat(SotClipboardFormatId::HTML))
687 nFormatId = SotClipboardFormatId::HTML;
688 else if (aDataHelper.
HasFormat(SotClipboardFormatId::HTML_SIMPLE))
689 nFormatId = SotClipboardFormatId::HTML_SIMPLE;
690 else if (aDataHelper.
HasFormat(SotClipboardFormatId::SYLK))
691 nFormatId = SotClipboardFormatId::SYLK;
692 else if (aDataHelper.
HasFormat(SotClipboardFormatId::STRING_TSVC))
693 nFormatId = SotClipboardFormatId::STRING_TSVC;
694 else if (aDataHelper.
HasFormat(SotClipboardFormatId::STRING))
695 nFormatId = SotClipboardFormatId::STRING;
696 else if (aDataHelper.
HasFormat(SotClipboardFormatId::GDIMETAFILE))
697 nFormatId = SotClipboardFormatId::GDIMETAFILE;
698 else if (aDataHelper.
HasFormat(SotClipboardFormatId::BITMAP))
699 nFormatId = SotClipboardFormatId::BITMAP;
701 else if (aDataHelper.
HasFormat( SotClipboardFormatId::EMBED_SOURCE_OLE ))
702 nFormatId = SotClipboardFormatId::EMBED_SOURCE_OLE;
703 else if (aDataHelper.
HasFormat( SotClipboardFormatId::LINK_SOURCE_OLE ))
704 nFormatId = SotClipboardFormatId::LINK_SOURCE_OLE;
709 GetViewData().GetCurX(), GetViewData().GetCurY(), nullptr );
721 if ( nFormatId == SotClipboardFormatId::NONE && pOwnClip )
751 nullptr,
false, !bApi );
753 if ( !bRet && !bApi )
755 ErrorMessage(STR_PASTE_ERROR);
761 true ,
false ,
false ,
false , rViewData.
GetTabNo());
770 const uno::Reference<datatransfer::XTransferable>& rxTransferable,
775 if ( aDataHelper.
HasFormat( SotClipboardFormatId::SVXB ) )
786 const OUString aBeginUndo(
ScResId(STR_UNDO_DRAGDROP));
794 else if ( aDataHelper.
HasFormat( SotClipboardFormatId::GDIMETAFILE ) )
799 if( pScDrawView && aDataHelper.
GetGDIMetaFile( SotClipboardFormatId::GDIMETAFILE, aMtf ) )
801 const OUString aBeginUndo(
ScResId(STR_UNDO_DRAGDROP));
809 else if ( aDataHelper.
HasFormat( SotClipboardFormatId::BITMAP ) || aDataHelper.
HasFormat( SotClipboardFormatId::PNG ) )
814 if( pScDrawView && aDataHelper.
GetBitmapEx( SotClipboardFormatId::BITMAP, aBmpEx ) )
816 const OUString aBeginUndo(
ScResId(STR_UNDO_DRAGDROP));
831 return std::any_of(rTabSelection.
begin(), rTabSelection.
end(),
832 [&](
const SCTAB& rTab) {
return rDoc.
HasAttrib( nCol1, nRow1, rTab, nCol2, nRow2, rTab, nMask ); });
843 bool bIsEmpty =
true;
844 size_t nRangeSize = rDestRanges.
size();
845 for (
const auto& rTab : rMark)
847 for (
size_t i = 0;
i < nRangeSize && bIsEmpty; ++
i)
849 const ScRange& rRange = rDestRanges[
i];
874 bool bTranspose,
bool bAsLink,
880 OSL_FAIL(
"PasteFromClip: pClipDoc=0 not allowed");
884 if (GetViewData().SelectionForbidsPaste(pClipDoc))
895 if (nUndoExtraFlags & InsertDeleteFlags::ATTRIB)
904 return PasteMultiRangesFromClip(nFlags, pClipDoc, nFunction, bSkipEmptyCells, bTranspose,
905 bAsLink, bAllowDialogs, eMoveMode, nUndoFlags);
908 ScMarkData& rMark = GetViewData().GetMarkData();
912 return PasteFromClipToMultiRanges(
913 nFlags, pClipDoc, nFunction, bSkipEmptyCells, bTranspose, bAsLink, bAllowDialogs,
914 eMoveMode, nUndoFlags);
918 bool bIncludeFiltered = bCutMode;
932 if ( nY > static_cast<sal_Int32>(pClipDoc->
MaxCol()) )
934 ErrorMessage(STR_PASTE_FULL);
937 pOrigClipDoc = pClipDoc;
947 pClipDoc->
TransposeClip(xTransClip.get(), nFlags, bAsLink, bIncludeFiltered);
948 pClipDoc = xTransClip.get();
954 ResetAutoSpellForContentChange();
964 pClipDoc->
GetClipArea( nClipSizeX, nClipSizeY,
true );
969 pClipDoc->
GetClipArea( nDestSizeX, nDestSizeY, bIncludeFiltered );
971 ScDocument& rDoc = GetViewData().GetDocument();
972 ScDocShell* pDocSh = GetViewData().GetDocShell();
980 ScMarkType eMarkType = GetViewData().GetSimpleArea( aMarkRange, aFilteredMark);
982 bool bNoPaste = ((eMarkType !=
SC_MARK_SIMPLE && !bMarkIsFiltered) ||
983 (bMarkIsFiltered && (eMoveMode !=
INS_NONE || bAsLink)));
991 nStartCol = GetViewData().GetCurX();
992 nStartRow = GetViewData().GetCurY();
993 nStartTab = GetViewData().GetTabNo();
994 nEndCol = nStartCol + nDestSizeX;
995 nEndRow = nStartRow + nDestSizeY;
997 aMarkRange =
ScRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
1000 bMarkIsFiltered =
true;
1024 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1030 if (bMarkIsFiltered)
1034 nUnfilteredRows = 0;
1035 size_t ListSize = aRangeList.
size();
1036 for (
size_t i = 0;
i < ListSize; ++
i )
1046 if ((nUnfilteredRows % (nDestSizeY+1)) != 0)
1049 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1056 if ( aFilteredMark.
IsMarked() || bMarkIsFiltered )
1058 aMarkRange.
GetVars( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
1059 SCCOL nBlockAddX = nEndCol-nStartCol;
1060 SCROW nBlockAddY = nEndRow-nStartRow;
1066 if ( ( nBlockAddX != 0 && nBlockAddX < nDestSizeX ) ||
1067 ( nBlockAddY != 0 && nBlockAddY < nDestSizeY ) ||
1068 ( bMarkIsFiltered && nUnfilteredRows < nDestSizeY+1 ) )
1071 OUString aMessage =
ScResId( STR_PASTE_BIGGER );
1074 VclMessageType::Question, VclButtonsType::YesNo,
1076 xQueryBox->set_default_response(
RET_NO);
1077 if (xQueryBox->run() !=
RET_YES)
1083 if (nBlockAddX <= nDestSizeX)
1084 nEndCol = nStartCol + nDestSizeX;
1086 if (nBlockAddY <= nDestSizeY)
1088 nEndRow = nStartRow + nDestSizeY;
1089 if (bMarkIsFiltered || nEndRow > aMarkRange.
aEnd.
Row())
1095 aMarkRange =
ScRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
1098 bMarkIsFiltered =
true;
1102 ErrorMessage(STR_PASTE_FULL);
1106 aMarkRange.
GetVars( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
1108 if (bMarkIsFiltered)
1118 nStartCol = GetViewData().GetCurX();
1119 nStartRow = GetViewData().GetCurY();
1120 nStartTab = GetViewData().GetTabNo();
1121 nEndCol = nStartCol + nDestSizeX;
1122 nEndRow = nStartRow + nDestSizeY;
1123 nEndTab = nStartTab;
1129 ScRange aUserRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab );
1133 bool bInsertCells = ( eMoveMode !=
INS_NONE && !bOffLimits );
1139 MarkRange( aUserRange );
1143 if (!InsertCells( eMoveMode, bRecord,
true ))
1152 else if (!bOffLimits)
1154 bool bAskIfNotEmpty = bAllowDialogs &&
1157 SC_MOD()->GetInputOptions().GetReplaceCellsWarn();
1158 if ( bAskIfNotEmpty )
1161 if (!checkDestRangeForOverwrite(aTestRanges, rDoc, aFilteredMark, GetViewData().GetDialogParent()))
1169 SCCOL nUndoEndCol = nClipStartX + nClipSizeX;
1170 SCROW nUndoEndRow = nClipStartY + nClipSizeY;
1171 bool bClipOver =
false;
1176 if ( pClipDoc->
HasTable(nClipTab) )
1177 if ( pClipDoc->
ExtendMerge( nClipStartX,nClipStartY, nUndoEndCol,nUndoEndRow, nClipTab ) )
1179 nUndoEndCol -= nClipStartX + nClipSizeX;
1180 nUndoEndRow -= nClipStartY + nClipSizeY;
1181 nUndoEndCol = sal::static_int_cast<
SCCOL>( nUndoEndCol + nEndCol );
1182 nUndoEndRow = sal::static_int_cast<
SCROW>( nUndoEndRow + nEndRow );
1184 if (nUndoEndCol>pClipDoc->
MaxCol() || nUndoEndRow>pClipDoc->
MaxRow())
1186 ErrorMessage(STR_PASTE_FULL);
1190 rDoc.
ExtendMergeSel( nStartCol,nStartRow, nUndoEndCol,nUndoEndRow, aFilteredMark );
1194 ScEditableTester aTester( rDoc, nStartTab, nStartCol,nStartRow, nUndoEndCol,nUndoEndRow );
1207 OUString aUndo =
ScResId( pClipDoc->
IsCutMode() ? STR_UNDO_MOVE : STR_UNDO_COPY );
1208 pUndoMgr->
EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() );
1214 ScDocAttrIterator aIter( rDoc, nStartTab, nStartCol, nStartRow, nUndoEndCol, nUndoEndRow );
1219 while ( ( pPattern = aIter.
GetNext( nCol, nRow1, nRow2 ) ) !=
nullptr )
1225 ScRange aRange(nCol, nRow1, nStartTab);
1240 bool bColInfo = ( nStartRow==0 && nEndRow==rDoc.
MaxRow() );
1241 bool bRowInfo = ( nStartCol==0 && nEndCol==rDoc.
MaxCol() );
1244 std::unique_ptr<ScDocument> pRefUndoDoc;
1245 std::unique_ptr<ScRefUndoData> pUndoData;
1250 pUndoDoc->InitUndoSelected( rDoc, aFilteredMark, bColInfo, bRowInfo );
1254 rDoc.
CopyToDocument( nStartCol, nStartRow, 0, nUndoEndCol, nUndoEndRow, nTabCount-1,
1255 nUndoFlags,
false, *pUndoDoc );
1260 pRefUndoDoc->InitUndo( rDoc, 0, nTabCount-1 );
1266 sal_uInt16 nExtFlags = 0;
1267 pDocSh->
UpdatePaintExt( nExtFlags, nStartCol, nStartRow, nStartTab,
1268 nEndCol, nEndRow, nEndTab );
1270 if (GetViewData().IsActive())
1273 InitOwnBlockMode( aUserRange );
1284 bSkipEmptyCells =
false;
1285 if ( nFlags & InsertDeleteFlags::CONTENTS )
1288 pMixDoc->InitUndo( rDoc, nStartTab, nEndTab );
1289 rDoc.
CopyToDocument(nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab,
1290 InsertDeleteFlags::CONTENTS,
false, *pMixDoc);
1307 rDoc.
CopyFromClip( aUserRange, aFilteredMark, nNoObjFlags,
1308 pRefUndoDoc.get(), pClipDoc,
true,
false, bIncludeFiltered,
1309 bSkipEmptyCells, (bMarkIsFiltered ? &aRangeList :
nullptr) );
1312 if ( bTranspose && bCutMode && (nFlags & InsertDeleteFlags::CONTENTS) )
1315 else if (!bTranspose)
1318 rDoc.
CopyFromClip( aUserRange, aFilteredMark, nNoObjFlags, pRefUndoDoc.get(), pClipDoc,
1319 true,
true, bIncludeFiltered, bSkipEmptyCells );
1324 rDoc.
CopyFromClip( aUserRange, aFilteredMark, nContFlags, pRefUndoDoc.get(), pClipDoc );
1331 rDoc.
ExtendMergeSel( nStartCol, nStartRow, nEndCol, nEndRow, aFilteredMark,
true );
1336 rDoc.
MixDocument( aUserRange, nFunction, bSkipEmptyCells, *pMixDoc );
1340 AdjustBlockHeight();
1342 ::std::vector< OUString > aExcludedChartNames;
1349 pPage = ( pModel ? pModel->
GetPage( static_cast< sal_uInt16 >( nStartTab ) ) : nullptr );
1357 rDoc.
CopyFromClip( aUserRange, aFilteredMark, InsertDeleteFlags::OBJECTS, pRefUndoDoc.get(), pClipDoc,
1358 true,
false, bIncludeFiltered );
1361 pDocSh->
UpdatePaintExt( nExtFlags, nStartCol, nStartRow, nStartTab,
1362 nEndCol, nEndRow, nEndTab );
1367 nClipStartY+nClipSizeY, nStartTab ))
1370 ScRange(nClipStartX, nClipStartY, nStartTab, nClipStartX+nClipSizeX, nClipStartY, nStartTab),
1385 pRedoDoc->InitUndo( rDoc, nStartTab, nEndTab, bColInfo, bRowInfo );
1390 pRedoDoc->AddUndoTab( 0, nTabCount-1 );
1391 rDoc.
CopyUpdated( pRefUndoDoc.get(), pRedoDoc.get() );
1396 pUndoDoc->AddUndoTab( 0, nTabCount-1 );
1397 pRefUndoDoc->DeleteArea( nStartCol, nStartRow, nEndCol, nEndRow, aFilteredMark,
InsertDeleteFlags::ALL );
1398 pRefUndoDoc->CopyToDocument( 0,0,0, pUndoDoc->MaxCol(), pUndoDoc->MaxRow(), nTabCount-1,
1400 pRefUndoDoc.reset();
1413 std::unique_ptr<SfxUndoAction> pUndo(
new ScUndoPaste(
1414 pDocSh,
ScRange(nStartCol, nStartRow, nStartTab, nUndoEndCol, nUndoEndRow, nEndTab),
1415 aFilteredMark, std::move(pUndoDoc), std::move(pRedoDoc), nFlags | nUndoFlags, std::move(pUndoData),
1416 false, &aOptions ));
1423 pUndoMgr->
AddUndoAction( std::make_unique<ScUndoWrapper>( std::move(pUndo) ),
true );
1434 nUndoEndCol = rDoc.
MaxCol();
1439 nUndoEndRow = rDoc.
MaxRow();
1442 ScRange(nStartCol, nStartRow, nStartTab, nUndoEndCol, nUndoEndRow, nEndTab),
1446 aModificator.SetDocumentModified();
1447 PostPasteFromClip(aUserRange, rMark);
1449 if ( nFlags & InsertDeleteFlags::OBJECTS )
1451 ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>( pDocSh->
GetModel() );
1452 if ( pPage && pModelObj )
1457 rProtectedChartRangesVector, aExcludedChartNames, bSameDoc );
1462 collectUIInformation({{
"RANGE", aStartAddress +
":" + aEndAddress}},
"PASTE");
1468 bool bTranspose,
bool bAsLink,
1483 if (static_cast<SCROW>(rCurPos.Col()) + nRowSize-1 > static_cast<SCROW>(pClipDoc->
MaxCol()))
1485 ErrorMessage(STR_PASTE_FULL);
1490 pClipDoc->
TransposeClip(pTransClip.get(), nFlags, bAsLink,
false);
1491 pClipDoc = pTransClip.release();
1492 SCCOL nTempColSize = nColSize;
1493 nColSize =
static_cast<SCCOL>(nRowSize);
1494 nRowSize =
static_cast<SCROW>(nTempColSize);
1497 if (!rDoc.
ValidCol(rCurPos.Col()+nColSize-1) || !rDoc.
ValidRow(rCurPos.Row()+nRowSize-1))
1499 ErrorMessage(STR_PASTE_FULL);
1504 SCTAB nTab1 = aMark.GetFirstSelected();
1505 SCTAB nTab2 = aMark.GetLastSelected();
1512 ScRange aMarkedRange(rCurPos.Col(), rCurPos.Row(), nTab1,
1513 rCurPos.Col()+nColSize-1, rCurPos.Row()+nRowSize-1, nTab2);
1523 bool bAskIfNotEmpty =
1530 if (!checkDestRangeForOverwrite(aTestRanges, rDoc, aMark, GetViewData().GetDialogParent()))
1534 aMark.SetMarkArea(aMarkedRange);
1535 MarkRange(aMarkedRange);
1537 bool bInsertCells = (eMoveMode !=
INS_NONE);
1545 ResetAutoSpellForContentChange();
1547 bool bRowInfo = ( aMarkedRange.aStart.Col()==0 && aMarkedRange.aEnd.Col()==pClipDoc->
MaxCol() );
1552 pUndoDoc->InitUndoSelected(rDoc, aMark,
false, bRowInfo);
1553 rDoc.
CopyToDocument(aMarkedRange, nUndoFlags,
false, *pUndoDoc, &aMark);
1562 pMixDoc->InitUndoSelected(rDoc, aMark);
1563 rDoc.
CopyToDocument(aMarkedRange, InsertDeleteFlags::CONTENTS,
false, *pMixDoc, &aMark);
1578 if (bAsLink && bTranspose)
1581 false, bSkipEmptyCells);
1584 rDoc.
MixDocument(aMarkedRange, nFunction, bSkipEmptyCells, *pMixDoc);
1586 AdjustBlockHeight();
1588 if (nFlags & InsertDeleteFlags::OBJECTS)
1592 false,
false,
true);
1609 pClipDoc->
IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY);
1610 pUndoMgr->
EnterListAction(aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId());
1619 std::unique_ptr<ScUndoPaste> pUndo(
new ScUndoPaste(pDocSh,
1620 aMarkedRange, aMark, std::move(pUndoDoc),
nullptr, nFlags|nUndoFlags,
nullptr,
false, &aOptions));
1623 pUndoMgr->
AddUndoAction(std::make_unique<ScUndoWrapper>(std::move(pUndo)),
true);
1631 PostPasteFromClip(aMarkedRange, aMark);
1637 bool bSkipEmptyCells,
bool bTranspose,
bool bAsLink,
bool bAllowDialogs,
1643 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1650 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1659 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1672 ErrorMessage(STR_PASTE_FULL);
1679 aMark.MarkToSimple();
1680 aMark.FillRangeListWithMarks(&aRanges,
false);
1683 ErrorMessage(STR_MSSG_PASTEFROMCLIP_0);
1691 bool bAskIfNotEmpty =
1697 if (!checkDestRangeForOverwrite(aRanges, rDoc, aMark, GetViewData().GetDialogParent()))
1702 ResetAutoSpellForContentChange();
1708 pUndoDoc->InitUndoSelected(rDoc, aMark);
1709 for (
size_t i = 0,
n = aRanges.size();
i <
n; ++
i)
1712 aRanges[
i], nUndoFlags,
false, *pUndoDoc, &aMark);
1722 pMixDoc->InitUndoSelected(rDoc, aMark);
1723 for (
size_t i = 0,
n = aRanges.size();
i <
n; ++
i)
1726 aRanges[
i], InsertDeleteFlags::CONTENTS,
false, *pMixDoc, &aMark);
1737 for (
size_t i = 0,
n = aRanges.size();
i <
n; ++
i)
1740 aRanges[
i], aMark, (nFlags & ~InsertDeleteFlags::OBJECTS),
nullptr, pClipDoc,
1741 false,
false,
true, bSkipEmptyCells);
1746 for (
size_t i = 0, n = aRanges.size();
i < n; ++
i)
1747 rDoc.
MixDocument(aRanges[
i], nFunction, bSkipEmptyCells, *pMixDoc);
1750 AdjustBlockHeight();
1753 if (nFlags & InsertDeleteFlags::OBJECTS)
1755 for (
size_t i = 0, n = aRanges.size();
i < n; ++
i)
1758 aRanges[
i], aMark, InsertDeleteFlags::OBJECTS,
nullptr, pClipDoc,
1759 false,
false,
true, bSkipEmptyCells);
1775 pClipDoc->
IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY);
1776 pUndoMgr->
EnterListAction(aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId());
1787 std::make_unique<ScUndoPaste>(
1788 pDocSh, aRanges, aMark, std::move(pUndoDoc),
nullptr, nFlags|nUndoFlags,
nullptr,
false, &aOptions));
1793 PostPasteFromClip(aRanges, aMark);
1804 SelectionChanged(
true);
1811 for (
size_t i = 0,
n = rPasteRanges.
size();
i <
n; ++
i)
1813 const ScRange& r = rPasteRanges[
i];
1814 for (
const auto& rTab : rMark)
1832 ScDocShell* pDocSh = GetViewData().GetDocShell();
1835 ResetAutoSpellForContentChange();
1837 bool bSuccess =
true;
1839 const ScMarkData& rMark = GetViewData().GetMarkData();
1844 OUString aUndo =
ScResId( bCut ? STR_UNDO_MOVE : STR_UNDO_COPY );
1849 ScRange aLocalSource = rSource;
1852 SCTAB nStartTab = 0;
1853 while ( nStartTab < nTabCount && bSuccess )
1855 while ( nStartTab < nTabCount && !rMark.
GetTableSelect(nStartTab) )
1857 if ( nStartTab < nTabCount )
1859 SCTAB nEndTab = nStartTab;
1860 while ( nEndTab+1 < nTabCount && rMark.
GetTableSelect(nEndTab+1) )
1865 aLocalDest.
SetTab( nStartTab );
1868 aLocalSource, aLocalDest, bCut,
true,
true,
true );
1870 nStartTab = nEndTab + 1;
1880 rSource, rDestPos, bCut,
true,
true,
true );
1892 bool bIncludeFiltered = bCut;
1893 if ( !bIncludeFiltered )
1899 if ( nPastedCount == 0 )
1901 aDestEnd.SetRow( rDestPos.
Row() + nPastedCount - 1 );
1904 MarkRange(
ScRange( rDestPos, aDestEnd ),
false );
1932 ScDocument& rDoc = GetViewData().GetDocument();
1940 if ( GetViewData().GetTabNo() != rDestPos.
Tab() )
1941 SetTabNo( rDestPos.
Tab() );
1955 std::vector<std::unique_ptr<ScDataFormFragment>>& rEdits,
1956 sal_uInt16 aColLength )
1958 ScDocument& rDoc = GetViewData().GetDocument();
1959 ScDocShell* pDocSh = GetViewData().GetDocShell();
1960 ScMarkData& rMark = GetViewData().GetMarkData();
1967 std::unique_ptr<ScRefUndoData> pUndoData;
1968 SCTAB nTab = GetViewData().GetTabNo();
1969 SCTAB nStartTab = nTab;
1970 SCTAB nEndTab = nTab;
1977 ScRange aUserRange( nStartCol, nCurrentRow, nStartTab, nEndCol, nCurrentRow, nEndTab );
1978 bool bColInfo = ( nStartRow==0 && nEndRow==rDoc.
MaxRow() );
1979 bool bRowInfo = ( nStartCol==0 && nEndCol==rDoc.
MaxCol() );
1980 SCCOL nUndoEndCol = nStartCol+aColLength-1;
1981 SCROW nUndoEndRow = nCurrentRow;
1986 pUndoDoc->InitUndoSelected( rDoc , rMark , bColInfo , bRowInfo );
1989 sal_uInt16 nExtFlags = 0;
1990 pDocSh->
UpdatePaintExt( nExtFlags, nStartCol, nStartRow, nStartTab , nEndCol, nEndRow, nEndTab );
1993 for(sal_uInt16
i = 0;
i < aColLength;
i++)
1995 if (rEdits[
i] !=
nullptr)
1997 OUString aFieldName = rEdits[
i]->m_xEdit->get_text();
1998 rDoc.
SetString( nStartCol +
i, nCurrentRow, nTab, aFieldName );
2001 pDocSh->
UpdatePaintExt( nExtFlags, nStartCol, nCurrentRow, nStartTab, nEndCol, nCurrentRow, nEndTab );
2002 std::unique_ptr<SfxUndoAction> pUndo(
new ScUndoDataForm( pDocSh,
2003 nStartCol, nCurrentRow, nStartTab,
2004 nUndoEndCol, nUndoEndRow, nEndTab, rMark,
2005 std::move(pUndoDoc), std::move(pRedoDoc),
2006 std::move(pUndoData) ) );
2007 pUndoMgr->
AddUndoAction( std::make_unique<ScUndoWrapper>( std::move(pUndo) ),
true );
2013 nUndoEndCol = rDoc.
MaxCol();
2018 nUndoEndRow = rDoc.
MaxRow();
2022 ScRange(nStartCol, nCurrentRow, nStartTab, nUndoEndCol, nUndoEndRow, nEndTab),
SC_DLLPUBLIC void UpdateTranspose(const ScAddress &rDestPos, ScDocument *pClipDoc, const ScMarkData &rMark, ScDocument *pUndoDoc)
ScMarkData & GetMarkData()
#define EXCHG_IN_ACTION_COPY
static ScDrawTransferObj * GetOwnClipboard(const css::uno::Reference< css::datatransfer::XTransferable2 > &)
OUString GetColRowString() const
Create a human-readable string representation of the cell address.
bool RefreshAutoFilter(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
static void FillProtectedChartRangesVector(ScRangeListVector &rRangesVector, const ScDocument &rDocument, const SdrPage *pPage)
static SotClipboardFormatId RegisterFormatName(const OUString &rName)
void GetClipStart(SCCOL &nClipX, SCROW &nClipY)
ScDocShell * GetDocShell() const
bool PasteMultiRangesFromClip(InsertDeleteFlags nFlags, ScDocument *pClipDoc, ScPasteFunc nFunction, bool bSkipEmptyCells, bool bTranspose, bool bAsLink, bool bAllowDialogs, InsCellCmd eMoveMode, InsertDeleteFlags nUndoFlags)
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
OUString ScResId(TranslateId aId)
SC_DLLPUBLIC bool CopyToClip(ScDocument *pClipDoc, bool bCut, bool bApi=false, bool bIncludeObjects=false, bool bStopEdit=true)
void SetCutMode(bool bCut)
void readGraphic(Graphic &rGraphic)
bool GetBitmapEx(SotClipboardFormatId nFormat, BitmapEx &rBmp) const
OUString GetTitle(sal_uInt16 nMaxLen=0) const
SCROW getPasteRowSize(const ScDocument &rSrcDoc, bool bIncludeFiltered)
Same as the above method, but returns the row size of the compressed range.
static sal_uInt8 GetExchangeAction(const DataFlavorExVector &rDataFlavorExVector, SotExchangeDest nDestination, sal_uInt16 nSourceOptions, sal_uInt8 nUserAction, SotClipboardFormatId &rFormat, sal_uInt8 &rDefaultAction, SotClipboardFormatId nOnlyTestFormat=SotClipboardFormatId::NONE, const css::uno::Reference< css::datatransfer::XTransferable > *pxTransferable=nullptr, SotExchangeActionFlags *pActionFlags=nullptr)
SdrModel * GetModel() const
bool IsOverlapped() const
Warning box for "Replace cell contents?".
css::uno::Reference< css::frame::XModel3 > GetModel() const
void FillRangeListWithMarks(ScRangeList *pList, bool bClear, SCTAB nForTab=-1) const
Create a range list of marks.
ScRangeListVector maProtectedChartRangesVector
void CopyMultiRangeFromClip(const ScAddress &rDestPos, const ScMarkData &rMark, InsertDeleteFlags nInsFlag, ScDocument *pClipDoc, bool bResetCut=true, bool bAsLink=false, bool bIncludeFiltered=true, bool bSkipAttrForEmpty=false)
void setSourceDocID(sal_uInt32 nVal)
ScSplitPos GetActivePart() const
ScDocument & GetDocument() const
static css::uno::Reference< css::datatransfer::XTransferable2 > GetClipData(vcl::Window *pWin)
Stores options which are only relevant for clipboard documents.
void SetClipOptions(std::unique_ptr< ScClipOptions > pClipOptions)
void FillTransferableObjectDescriptor(TransferableObjectDescriptor &rDesc) const
bool HasFormat(SotClipboardFormatId nFormat) const
void GetClipArea(SCCOL &nClipX, SCROW &nClipY, bool bIncludeFiltered)
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
static bool FitToUnfilteredRows(ScRange &rRange, const ScDocument &rDoc, size_t nRows)
Fit a range to cover nRows number of unfiltered rows.
static void notifyAllViewsSheetGeomInvalidation(const SfxViewShell *pForViewShell, bool bColumns, bool bRows, bool bSizes, bool bHidden, bool bFiltered, bool bGroups, SCTAB nCurrentTabIndex)
Emits a LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY for all views whose current tab is equal to nCurrentTa...
static void CreateProtectedChartListenersAndNotify(ScDocument &rDoc, const SdrPage *pPage, ScModelObj *pModelObj, SCTAB nTab, const ScRangeListVector &rRangesVector, const ::std::vector< OUString > &rExcludedChartNames, bool bSameDoc=true)
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
const ScRange & GetMarkArea() const
SCCOL getPasteColSize()
Get the column size of a pasted range.
void MixDocument(const ScRange &rRange, ScPasteFunc nFunction, bool bSkipEmpty, ScDocument &rSrcDoc)
Internal use only (d&d undo): do not delete caption objects of cell notes.
#define EXCHG_IN_ACTION_DEFAULT
virtual SfxUndoManager * GetUndoManager() override
SC_DLLPUBLIC void CopyFromClip(const ScRange &rDestRange, const ScMarkData &rMark, InsertDeleteFlags nInsFlag, ScDocument *pRefUndoDoc, ScDocument *pClipDoc, bool bResetCut=true, bool bAsLink=false, bool bIncludeFiltered=true, bool bSkipEmptyCells=false, const ScRangeList *pDestRanges=nullptr)
Paste data from a clipboard document into this document.
static UITestLogger & getInstance()
void logEvent(const EventDescription &rDescription)
static void SetGlobalDrawPersist(SfxObjectShell *pPersist)
SC_DLLPUBLIC void CutToClip()
Not used?
void PostPasteFromClip(const ScRangeList &rPasteRanges, const ScMarkData &rMark)
bool CopyToClipSingleRange(ScDocument *pClipDoc, const ScRangeList &rRanges, bool bCut, bool bIncludeObjects)
ScClipParam & GetClipParam()
void UpdatePaintExt(sal_uInt16 &rExtFlags, SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab)
bool PasteOnDrawObjectLinked(const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable, SdrObject &rHitObj)
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC SCTAB GetTableCount() const
#define EXCHG_INOUT_ACTION_NONE
SC_DLLPUBLIC void CopyUpdated(ScDocument *pPosDoc, ScDocument *pDestDoc)
From this document this method copies the cells of positions at which there are also cells in pPosDoc...
SCTAB GetSelectCount() const
bool IsMultiMarked() const
void CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, InsertDeleteFlags nFlags, bool bMarked, ScDocument &rDestDoc, const ScMarkData *pMarks=nullptr, bool bColRowFlags=true)
static TransferableDataHelper CreateFromSystemClipboard(vcl::Window *pWindow)
void push_back(const ScRange &rRange)
SC_DLLPUBLIC bool HasTable(SCTAB nTab) const
#define EXCHG_OUT_ACTION_INSERT_GRAPH
ScDocument * GetDocument() const
SC_DLLPUBLIC void PasteFromSystem()
ScDrawLayer * MakeDrawLayer()
ScChangeTrack * GetChangeTrack() const
void CopyTabToClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCTAB nTab, ScDocument *pClipDoc)
const SfxPoolItem & GetItem(sal_uInt16 nWhichP) const
ScTabViewShell * GetViewShell() const
bool IsBlockEmpty(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab) const
void SetMarkArea(const ScRange &rRange)
SC_DLLPUBLIC bool SetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const OUString &rString, const ScSetStringParam *pParam=nullptr)
static void GetChartNames(::std::vector< OUString > &rChartNames, const SdrPage *pPage)
bool HasOLEObjectsInArea(const ScRange &rRange, const ScMarkData *pTabMark=nullptr)
bool HasClipFilteredRows()
#define SFX_TITLE_FULLNAME
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
SC_DLLPUBLIC SCCOL MaxCol() const
virtual void AddUndoAction(std::unique_ptr< SfxUndoAction > pAction, bool bTryMerg=false)
sal_uInt32 getSourceDocID() const
SCROW CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
static void SetClipDocName(const OUString &rNew)
static bool HasFiltered(const ScRange &rRange, const ScDocument &rDoc)
Point GetScrPos(SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, bool bAllowNeg=false, SCTAB nForTab=-1) const
bool LinkBlock(const ScRange &rSource, const ScAddress &rDestPos)
bool PasteFromClipToMultiRanges(InsertDeleteFlags nFlags, ScDocument *pClipDoc, ScPasteFunc nFunction, bool bSkipEmptyCells, bool bTranspose, bool bAsLink, bool bAllowDialogs, InsCellCmd eMoveMode, InsertDeleteFlags nUndoFlags)
void Notify(ScModelObj &rModelObj, const ScRangeList &rChangeRanges, const OUString &rType=OUString("cell-change"), const css::uno::Sequence< css::beans::PropertyValue > &rProperties=css::uno::Sequence< css::beans::PropertyValue >())
ScMarkType
States GetSimpleArea() returns for the underlying selection marks, so the caller can react if the res...
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
css::uno::Reference< css::datatransfer::XTransferable > GetXTransferable() const
SC_DLLPUBLIC void DeleteSelection(InsertDeleteFlags nDelFlag, const ScMarkData &rMark, bool bBroadcast=true)
bool ValidCol(SCCOL nCol) const
static tools::SvRef< ScDocShell > xDrawClipDocShellRef
const SdrPage * GetPage(sal_uInt16 nPgNum) const
static OUString CreateShellID(const SfxObjectShell *pShell)
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
ScGridWindow * GetActiveWin()
SC_DLLPUBLIC bool PasteFromClip(InsertDeleteFlags nFlags, ScDocument *pClipDoc, ScPasteFunc nFunction=ScPasteFunc::NONE, bool bSkipEmptyCells=false, bool bTranspose=false, bool bAsLink=false, InsCellCmd eMoveMode=INS_NONE, InsertDeleteFlags nUndoExtraFlags=InsertDeleteFlags::NONE, bool bAllowDialogs=false)
bool MoveBlockTo(const ScRange &rSource, const ScAddress &rDestPos, bool bCut)
void GetVars(SCCOL &nCol1, SCROW &nRow1, SCTAB &nTab1, SCCOL &nCol2, SCROW &nRow2, SCTAB &nTab2) const
Point PixelToLogic(const Point &rDevicePt) const
static void UnmarkFiltered(ScMarkData &rMark, const ScDocument &rDoc)
bool HasSelectedBlockMatrixFragment(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, const ScMarkData &rMark) const
void PostPaint(SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, PaintPartFlags nPart, sal_uInt16 nExtFlags=0)
SC_DLLPUBLIC bool ExtendMerge(SCCOL nStartCol, SCROW nStartRow, SCCOL &rEndCol, SCROW &rEndRow, SCTAB nTab, bool bRefresh=false)
TranslateId GetMessageId() const
const_iterator end() const
sal_uInt32 GetDocumentID() const
an ID unique to each document instance
ScAddress GetCurPos() const
bool CopyToClipMultiRange(const ScDocument *pClipDoc, const ScRangeList &rRanges, bool bCut, bool bApi, bool bIncludeObjects)
ScModelObj * getMustPropagateChangesModel(const ScDocShell &rDocShell)
rtl::Reference< ScTransferObj > CopyToTransferable()
::std::vector< ScRangeList > ScRangeListVector
bool CheckDestRanges(const ScDocument &rDoc, SCCOL nSrcCols, SCROW nSrcRows, const ScMarkData &rMark, const ScRangeList &rDest)
bool UnmergeCells(const ScRange &rRange, bool bRecord, ScUndoRemoveMerge *pUndoRemoveMerge)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
ScRange getWholeRange() const
Return a single range that encompasses all individual ranges.
void UpdateOle(const ScViewData &rViewData, bool bSnapSize=false)
bool ValidRow(SCROW nRow) const
const OUString & GetShellID() const
bool GetSotStorageStream(SotClipboardFormatId nFormat, tools::SvRef< SotTempStream > &rStreamRef) const
static SfxObjectShell * SetDrawClipDoc(bool bAnyOle, const std::shared_ptr< ScDocument > &={})
void ExtendMergeSel(SCCOL nStartCol, SCROW nStartRow, SCCOL &rEndCol, SCROW &rEndRow, const ScMarkData &rMark, bool bRefresh=false)
#define EXCHG_OUT_ACTION_INSERT_BITMAP
SC_DLLPUBLIC void TransposeClip(ScDocument *pTransClip, InsertDeleteFlags nFlags, bool bAsLink, bool bIncludeFiltered)
static bool lcl_SelHasAttrib(const ScDocument &rDoc, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const ScMarkData &rTabSelection, HasAttrFlags nMask)
bool GetGDIMetaFile(SotClipboardFormatId nFormat, GDIMetaFile &rMtf, size_t nMaxActions=0) const
void PasteFromTransferable(const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable)
static SC_DLLPUBLIC ScTransferObj * GetOwnClipboard(const css::uno::Reference< css::datatransfer::XTransferable2 > &)
const INetURLObject & GetURLObject() const
virtual void EnterListAction(const OUString &rComment, const OUString &rRepeatComment, sal_uInt16 nId, ViewShellId nViewShellId)
SC_DLLPUBLIC void DataFormPutData(SCROW nCurrentRow, SCROW nStartRow, SCCOL nStartCol, SCROW nEndRow, SCCOL nEndCol, std::vector< std::unique_ptr< ScDataFormFragment >> &rEdits, sal_uInt16 aColLength)
#define EXCHG_OUT_ACTION_INSERT_SVXB
const ScPatternAttr * GetNext(SCCOL &rCol, SCROW &rRow1, SCROW &rRow2)
#define SO3_SWWEB_CLASSID
const_iterator begin() const
const ScDocument & GetDocument() const
SdrObject * ApplyGraphicToObject(SdrObject &rHitObject, const Graphic &rGraphic, const OUString &rBeginUndoText, const OUString &rFile)
OUString GetURLNoPass(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
void SetDocumentModified()
SfxObjectShell * GetDocumentShell() const
bool GetTransferableObjectDescriptor(SotClipboardFormatId nFormat, TransferableObjectDescriptor &rDesc)
bool IsUndoEnabled() const
#define EXCHG_OUT_ACTION_INSERT_GDIMETAFILE
bool MoveBlock(const ScRange &rSource, const ScAddress &rDestPos, bool bCut, bool bRecord, bool bPaint, bool bApi)
void DeleteObjectsInSelection(const ScMarkData &rMark)
bool GetTableSelect(SCTAB nTab) const
std::map< OUString, OUString > aParameters
This struct stores general clipboard parameters associated with a ScDocument instance created in clip...
SC_DLLPUBLIC void ExtendOverlapped(SCCOL &rStartCol, SCROW &rStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab) const
const css::uno::Reference< css::datatransfer::XTransferable > & GetTransferable() const
SdrModel * GetModel() const
Strings (and string results if InsertDeleteFlags::FORMULA is not set).
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
Create before modifications of the document and destroy thereafter.
SC_DLLPUBLIC void CopyToClip(const ScClipParam &rClipParam, ScDocument *pClipDoc, const ScMarkData *pMarks, bool bKeepScenarioFlags, bool bIncludeObjects)
bool isMultiRange() const
bool m_bDetectedRangeSegmentation false
const DataFlavorExVector & GetDataFlavorExVector() const
SfxMedium * GetMedium() const