sc/inc/clipcontext.hxx | 53 +++++--- sc/inc/column.hxx | 2 sc/source/core/data/clipcontext.cxx | 106 +++++++++++++++-- sc/source/core/data/column4.cxx | 8 - sc/source/core/data/document10.cxx | 223 +++++++++++++++++++----------------- sc/source/core/data/table7.cxx | 10 + 6 files changed, 264 insertions(+), 138 deletions(-)
New commits: commit a49cb96244dd077d468bfd96d85a124fae135df5 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Mon Nov 10 18:45:21 2014 -0500 Speed up pasting of single row onto multiple destination rows. This is an extension of the earlier paste optimization of a single cell across multiple destination cells. Change-Id: I3a60300d3d0e11420d997bea8f7f540e948f56cc diff --git a/sc/inc/clipcontext.hxx b/sc/inc/clipcontext.hxx index 5f558cd..ccaca67 100644 --- a/sc/inc/clipcontext.hxx +++ b/sc/inc/clipcontext.hxx @@ -54,10 +54,12 @@ class CopyFromClipContext : public ClipContextBase ScDocument* mpClipDoc; InsertDeleteFlags mnInsertFlag; InsertDeleteFlags mnDeleteFlag; - ScCellValue maSingleCell; + + std::vector<ScCellValue> maSingleCells; + std::vector<const ScPatternAttr*> maSinglePatterns; + std::vector<const ScPostIt*> maSingleNotes; + ScConditionalFormatList* mpCondFormatList; - const ScPatternAttr* mpSinglePattern; - const ScPostIt* mpSingleNote; bool mbAsLink:1; bool mbSkipAttrForEmptyCells:1; bool mbCloneNotes:1; @@ -96,16 +98,23 @@ public: void setDeleteFlag( InsertDeleteFlags nFlag ); InsertDeleteFlags getDeleteFlag() const; - ScCellValue& getSingleCell(); + /** + * Set the column size of a "single cell" row, which is used when copying + * a single row of cells in a clip doc and pasting it into multiple + * rows by replicating it. + */ + void setSingleCellColumnSize( size_t nSize ); - void setCondFormatList( ScConditionalFormatList* pCondFormatList ); - ScConditionalFormatList* getCondFormatList(); + ScCellValue& getSingleCell( size_t nColOffset ); - const ScPatternAttr* getSingleCellPattern() const; - void setSingleCellPattern( const ScPatternAttr* pAttr ); + const ScPatternAttr* getSingleCellPattern( size_t nColOffset ) const; + void setSingleCellPattern( size_t nColOffset, const ScPatternAttr* pAttr ); - const ScPostIt* getSingleCellNote() const; - void setSingleCellNote( const ScPostIt* pNote ); + const ScPostIt* getSingleCellNote( size_t nColOffset ) const; + void setSingleCellNote( size_t nColOffset, const ScPostIt* pNote ); + + void setCondFormatList( ScConditionalFormatList* pCondFormatList ); + ScConditionalFormatList* getCondFormatList(); void setTableProtected( bool b ); bool isTableProtected() const; diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index ec05b13..d1ec1de 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -245,7 +245,7 @@ public: bool InitBlockPosition( sc::ColumnBlockConstPosition& rBlockPos ) const; void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol ); - void CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2 ); + void CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset ); void CopyFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, long nDy, ScColumn& rColumn ); diff --git a/sc/source/core/data/clipcontext.cxx b/sc/source/core/data/clipcontext.cxx index d60a2e2..a414cfd4 100644 --- a/sc/source/core/data/clipcontext.cxx +++ b/sc/source/core/data/clipcontext.cxx @@ -36,7 +36,7 @@ CopyFromClipContext::CopyFromClipContext(ScDocument& rDoc, mnTabStart(-1), mnTabEnd(-1), mpRefUndoDoc(pRefUndoDoc), mpClipDoc(pClipDoc), mnInsertFlag(nInsertFlag), mnDeleteFlag(IDF_NONE), - mpCondFormatList(NULL), mpSinglePattern(NULL), mpSingleNote(NULL), + mpCondFormatList(NULL), mbAsLink(bAsLink), mbSkipAttrForEmptyCells(bSkipAttrForEmptyCells), mbCloneNotes (mnInsertFlag & (IDF_NOTE|IDF_ADDNOTES)), mbTableProtected(false) @@ -106,39 +106,51 @@ InsertDeleteFlags CopyFromClipContext::getDeleteFlag() const return mnDeleteFlag; } -ScCellValue& CopyFromClipContext::getSingleCell() +void CopyFromClipContext::setSingleCellColumnSize( size_t nSize ) { - return maSingleCell; + maSingleCells.resize(nSize); + maSinglePatterns.resize(nSize, NULL); + maSingleNotes.resize(nSize, NULL); } -void CopyFromClipContext::setCondFormatList( ScConditionalFormatList* pCondFormatList ) +ScCellValue& CopyFromClipContext::getSingleCell( size_t nColOffset ) { - mpCondFormatList = pCondFormatList; + assert(nColOffset < maSingleCells.size()); + return maSingleCells[nColOffset]; } -ScConditionalFormatList* CopyFromClipContext::getCondFormatList() +const ScPatternAttr* CopyFromClipContext::getSingleCellPattern( size_t nColOffset ) const { - return mpCondFormatList; + assert(nColOffset < maSinglePatterns.size()); + return maSinglePatterns[nColOffset]; } -const ScPatternAttr* CopyFromClipContext::getSingleCellPattern() const +void CopyFromClipContext::setSingleCellPattern( size_t nColOffset, const ScPatternAttr* pAttr ) { - return mpSinglePattern; + assert(nColOffset < maSinglePatterns.size()); + maSinglePatterns[nColOffset] = pAttr; } -void CopyFromClipContext::setSingleCellPattern( const ScPatternAttr* pAttr ) +const ScPostIt* CopyFromClipContext::getSingleCellNote( size_t nColOffset ) const { - mpSinglePattern = pAttr; + assert(nColOffset < maSingleNotes.size()); + return maSingleNotes[nColOffset]; } -const ScPostIt* CopyFromClipContext::getSingleCellNote() const +void CopyFromClipContext::setSingleCellNote( size_t nColOffset, const ScPostIt* pNote ) { - return mpSingleNote; + assert(nColOffset < maSingleNotes.size()); + maSingleNotes[nColOffset] = pNote; } -void CopyFromClipContext::setSingleCellNote( const ScPostIt* pNote ) +void CopyFromClipContext::setCondFormatList( ScConditionalFormatList* pCondFormatList ) { - mpSingleNote = pNote; + mpCondFormatList = pCondFormatList; +} + +ScConditionalFormatList* CopyFromClipContext::getCondFormatList() +{ + return mpCondFormatList; } void CopyFromClipContext::setTableProtected( bool b ) diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index 3e93a2d..94634dd 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -138,7 +138,7 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc BroadcastCells(aDeletedRows, SC_HINT_DATACHANGED); } -void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2 ) +void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset ) { assert(nRow1 <= nRow2); @@ -147,7 +147,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, if (!pBlockPos) return; - ScCellValue& rSrcCell = rCxt.getSingleCell(); + ScCellValue& rSrcCell = rCxt.getSingleCell(nColOffset); InsertDeleteFlags nFlags = rCxt.getInsertFlag(); @@ -155,7 +155,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, { if (!rCxt.isSkipAttrForEmptyCells() || rSrcCell.meType != CELLTYPE_NONE) { - const ScPatternAttr* pAttr = rCxt.getSingleCellPattern(); + const ScPatternAttr* pAttr = rCxt.getSingleCellPattern(nColOffset); pAttrArray->SetPatternArea(nRow1, nRow2, pAttr, true); } } @@ -221,7 +221,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, } } - const ScPostIt* pNote = rCxt.getSingleCellNote(); + const ScPostIt* pNote = rCxt.getSingleCellNote(nColOffset); if (pNote && (nFlags & (IDF_NOTE | IDF_ADDNOTES)) != IDF_NONE) { // Duplicate the cell note over the whole pasted range. diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx index 7fcd4da..714bc23 100644 --- a/sc/source/core/data/document10.cxx +++ b/sc/source/core/data/document10.cxx @@ -70,142 +70,159 @@ bool ScDocument::CopyOneCellFromClip( return false; ScRange aClipRange = pClipDoc->GetClipParam().getWholeRange(); - if (aClipRange.aStart != aClipRange.aEnd) - // The source is not really a single cell. Bail out. + if (aClipRange.aStart.Row() != aClipRange.aEnd.Row()) + // The source is not really a single row. Bail out. return false; - ScAddress aSrcPos = aClipRange.aStart; - if (pClipDoc->IsMerged(aSrcPos)) - // We don't handle merged source cell for this. + SCCOL nSrcColSize = aClipRange.aEnd.Col() - aClipRange.aStart.Col() + 1; + SCCOL nDestColSize = nCol2 - nCol1 + 1; + if (nDestColSize < nSrcColSize) return false; + ScAddress aSrcPos = aClipRange.aStart; + + for (SCCOL nCol = aClipRange.aStart.Col(); nCol <= aClipRange.aEnd.Col(); ++nCol) + { + ScAddress aTestPos = aSrcPos; + aTestPos.SetCol(nCol); + if (pClipDoc->IsMerged(aTestPos)) + // We don't handle merged source cell for this. + return false; + } + ScTable* pSrcTab = pClipDoc->FetchTable(aSrcPos.Tab()); if (!pSrcTab) return false; - ScCellValue& rSrcCell = rCxt.getSingleCell(); - const ScPatternAttr* pAttr = pClipDoc->GetPattern(aSrcPos); - rCxt.setSingleCellPattern(pAttr); - if (rCxt.isAsLink()) - { - ScSingleRefData aRef; - aRef.InitAddress(aSrcPos); - aRef.SetFlag3D(true); + rCxt.setSingleCellColumnSize(nSrcColSize); - ScTokenArray aArr; - aArr.AddSingleReference(aRef); - rSrcCell.set(new ScFormulaCell(pClipDoc, aSrcPos, aArr)); - } - else + for (SCCOL nColOffset = 0; nColOffset < nSrcColSize; ++nColOffset, aSrcPos.IncCol()) { - rSrcCell.set(pClipDoc->GetRefCellValue(aSrcPos)); - - // Check the paste flag to see whether we want to paste this cell. If the - // flag says we don't want to paste this cell, we'll return with true. - InsertDeleteFlags nFlags = rCxt.getInsertFlag(); - bool bNumeric = (nFlags & IDF_VALUE) != IDF_NONE; - bool bDateTime = (nFlags & IDF_DATETIME) != IDF_NONE; - bool bString = (nFlags & IDF_STRING) != IDF_NONE; - bool bBoolean = (nFlags & IDF_SPECIAL_BOOLEAN) != IDF_NONE; - bool bFormula = (nFlags & IDF_FORMULA) != IDF_NONE; - - switch (rSrcCell.meType) + const ScPatternAttr* pAttr = pClipDoc->GetPattern(aSrcPos); + rCxt.setSingleCellPattern(nColOffset, pAttr); + + if ((rCxt.getInsertFlag() & (IDF_NOTE | IDF_ADDNOTES)) != IDF_NONE) + rCxt.setSingleCellNote(nColOffset, pClipDoc->GetNote(aSrcPos)); + + ScCellValue& rSrcCell = rCxt.getSingleCell(nColOffset); + if (rCxt.isAsLink()) { - case CELLTYPE_VALUE: - { - bool bPaste = rCxt.isDateCell(pSrcTab->aCol[aSrcPos.Col()], aSrcPos.Row()) ? bDateTime : bNumeric; - if (!bPaste) - // Don't paste this. - rSrcCell.clear(); - } - break; - case CELLTYPE_STRING: - case CELLTYPE_EDIT: - { - if (!bString) - // Skip pasting. - rSrcCell.clear(); - } - break; - case CELLTYPE_FORMULA: + ScSingleRefData aRef; + aRef.InitAddress(aSrcPos); + aRef.SetFlag3D(true); + + ScTokenArray aArr; + aArr.AddSingleReference(aRef); + rSrcCell.set(new ScFormulaCell(pClipDoc, aSrcPos, aArr)); + } + else + { + rSrcCell.assign(*pClipDoc, aSrcPos); + + // Check the paste flag to see whether we want to paste this cell. If the + // flag says we don't want to paste this cell, we'll return with true. + InsertDeleteFlags nFlags = rCxt.getInsertFlag(); + bool bNumeric = (nFlags & IDF_VALUE) != IDF_NONE; + bool bDateTime = (nFlags & IDF_DATETIME) != IDF_NONE; + bool bString = (nFlags & IDF_STRING) != IDF_NONE; + bool bBoolean = (nFlags & IDF_SPECIAL_BOOLEAN) != IDF_NONE; + bool bFormula = (nFlags & IDF_FORMULA) != IDF_NONE; + + switch (rSrcCell.meType) { - if (bBoolean) + case CELLTYPE_VALUE: { - // Check if this formula cell is a boolean cell, and if so, go ahead and paste it. - ScTokenArray* pCode = rSrcCell.mpFormula->GetCode(); - if (pCode && pCode->GetLen() == 1) - { - const formula::FormulaToken* p = pCode->First(); - if (p->GetOpCode() == ocTrue || p->GetOpCode() == ocFalse) - // This is a boolean formula. Good. - break; - } + bool bPaste = rCxt.isDateCell(pSrcTab->aCol[aSrcPos.Col()], aSrcPos.Row()) ? bDateTime : bNumeric; + if (!bPaste) + // Don't paste this. + rSrcCell.clear(); } - - if (bFormula) - // Good. - break; - - sal_uInt16 nErr = rSrcCell.mpFormula->GetErrCode(); - if (nErr) + break; + case CELLTYPE_STRING: + case CELLTYPE_EDIT: { - // error codes are cloned with values - if (!bNumeric) - // Error code is treated as numeric value. Don't paste it. + if (!bString) + // Skip pasting. rSrcCell.clear(); } - else if (rSrcCell.mpFormula->IsValue()) + break; + case CELLTYPE_FORMULA: { - bool bPaste = rCxt.isDateCell(pSrcTab->aCol[aSrcPos.Col()], aSrcPos.Row()) ? bDateTime : bNumeric; - if (!bPaste) + if (bBoolean) { - // Don't paste this. - rSrcCell.clear(); - break; + // Check if this formula cell is a boolean cell, and if so, go ahead and paste it. + ScTokenArray* pCode = rSrcCell.mpFormula->GetCode(); + if (pCode && pCode->GetLen() == 1) + { + const formula::FormulaToken* p = pCode->First(); + if (p->GetOpCode() == ocTrue || p->GetOpCode() == ocFalse) + // This is a boolean formula. Good. + break; + } } - // Turn this into a numeric cell. - rSrcCell.set(rSrcCell.mpFormula->GetValue()); - } - else if (bString) - { - svl::SharedString aStr = rSrcCell.mpFormula->GetString(); - if (aStr.isEmpty()) - { - // do not clone empty string - rSrcCell.clear(); + if (bFormula) + // Good. break; + + sal_uInt16 nErr = rSrcCell.mpFormula->GetErrCode(); + if (nErr) + { + // error codes are cloned with values + if (!bNumeric) + // Error code is treated as numeric value. Don't paste it. + rSrcCell.clear(); } + else if (rSrcCell.mpFormula->IsValue()) + { + bool bPaste = rCxt.isDateCell(pSrcTab->aCol[aSrcPos.Col()], aSrcPos.Row()) ? bDateTime : bNumeric; + if (!bPaste) + { + // Don't paste this. + rSrcCell.clear(); + break; + } - // Turn this into a string or edit cell. - if (rSrcCell.mpFormula->IsMultilineResult()) + // Turn this into a numeric cell. + rSrcCell.set(rSrcCell.mpFormula->GetValue()); + } + else if (bString) { - // TODO : Add shared string support to the edit engine to - // make this process simpler. - ScFieldEditEngine& rEngine = GetEditEngine(); - rEngine.SetText(rSrcCell.mpFormula->GetString().getString()); - boost::scoped_ptr<EditTextObject> pObj(rEngine.CreateTextObject()); - pObj->NormalizeString(GetSharedStringPool()); - rSrcCell.set(*pObj); + svl::SharedString aStr = rSrcCell.mpFormula->GetString(); + if (aStr.isEmpty()) + { + // do not clone empty string + rSrcCell.clear(); + break; + } + + // Turn this into a string or edit cell. + if (rSrcCell.mpFormula->IsMultilineResult()) + { + // TODO : Add shared string support to the edit engine to + // make this process simpler. + ScFieldEditEngine& rEngine = GetEditEngine(); + rEngine.SetText(rSrcCell.mpFormula->GetString().getString()); + boost::scoped_ptr<EditTextObject> pObj(rEngine.CreateTextObject()); + pObj->NormalizeString(GetSharedStringPool()); + rSrcCell.set(*pObj); + } + else + rSrcCell.set(rSrcCell.mpFormula->GetString()); } else - rSrcCell.set(rSrcCell.mpFormula->GetString()); + // We don't want to paste this. + rSrcCell.clear(); } - else - // We don't want to paste this. + break; + case CELLTYPE_NONE: + default: + // There is nothing to paste. rSrcCell.clear(); } - break; - case CELLTYPE_NONE: - default: - // There is nothing to paste. - rSrcCell.clear(); } } - if ((rCxt.getInsertFlag() & (IDF_NOTE | IDF_ADDNOTES)) != IDF_NONE) - rCxt.setSingleCellNote(pClipDoc->GetNote(aSrcPos)); - // All good. Proceed with the pasting. SCTAB nTabEnd = rCxt.getTabEnd(); diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx index 36a22c6..5686921 100644 --- a/sc/source/core/data/table7.cxx +++ b/sc/source/core/data/table7.cxx @@ -55,8 +55,16 @@ void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScT void ScTable::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) { + ScRange aSrcRange = rCxt.getClipDoc()->GetClipParam().getWholeRange(); + SCCOL nSrcColSize = aSrcRange.aEnd.Col() - aSrcRange.aStart.Col() + 1; + for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) - aCol[nCol].CopyOneCellFromClip(rCxt, nRow1, nRow2); + { + SCCOL nColOffset = nCol - nCol1; + nColOffset = nColOffset % nSrcColSize; + assert(nColOffset >= 0); + aCol[nCol].CopyOneCellFromClip(rCxt, nRow1, nRow2, nColOffset); + } } void ScTable::SetValues( SCCOL nCol, SCROW nRow, const std::vector<double>& rVals ) commit 14f08a30c5997d21aacc0a38ddefb628f0de663c Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Mon Nov 10 16:27:50 2014 -0500 Make these methods non-inline again. Change-Id: I34e18fa1607d56351e1c3656b1f37a823b7a5609 diff --git a/sc/inc/clipcontext.hxx b/sc/inc/clipcontext.hxx index 4017dda..5f558cd 100644 --- a/sc/inc/clipcontext.hxx +++ b/sc/inc/clipcontext.hxx @@ -83,36 +83,36 @@ public: void setTabRange(SCTAB nStart, SCTAB nEnd); - SCTAB getTabStart() const { return mnTabStart;} - SCTAB getTabEnd() const { return mnTabEnd;} + SCTAB getTabStart() const; + SCTAB getTabEnd() const; void setDestRange( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); Range getDestRange() const; - ScDocument* getUndoDoc() { return mpRefUndoDoc;} - ScDocument* getClipDoc() { return mpClipDoc;} - InsertDeleteFlags getInsertFlag() const { return mnInsertFlag;} + ScDocument* getUndoDoc(); + ScDocument* getClipDoc(); + InsertDeleteFlags getInsertFlag() const; void setDeleteFlag( InsertDeleteFlags nFlag ); - InsertDeleteFlags getDeleteFlag() const { return mnDeleteFlag;} + InsertDeleteFlags getDeleteFlag() const; - ScCellValue& getSingleCell() { return maSingleCell;} + ScCellValue& getSingleCell(); void setCondFormatList( ScConditionalFormatList* pCondFormatList ); - ScConditionalFormatList* getCondFormatList() { return mpCondFormatList;} + ScConditionalFormatList* getCondFormatList(); - const ScPatternAttr* getSingleCellPattern() const { return mpSinglePattern;} + const ScPatternAttr* getSingleCellPattern() const; void setSingleCellPattern( const ScPatternAttr* pAttr ); - const ScPostIt* getSingleCellNote() const { return mpSingleNote;} + const ScPostIt* getSingleCellNote() const; void setSingleCellNote( const ScPostIt* pNote ); void setTableProtected( bool b ); - bool isTableProtected() const { return mbTableProtected;} + bool isTableProtected() const; - bool isAsLink() const { return mbAsLink;} - bool isSkipAttrForEmptyCells() const { return mbSkipAttrForEmptyCells;} - bool isCloneNotes() const { return mbCloneNotes;} + bool isAsLink() const; + bool isSkipAttrForEmptyCells() const; + bool isCloneNotes() const; bool isDateCell( const ScColumn& rCol, SCROW nRow ) const; }; @@ -127,8 +127,8 @@ public: CopyToClipContext(ScDocument& rDoc, bool bKeepScenarioFlags, bool bCloneNotes); virtual ~CopyToClipContext(); - bool isKeepScenarioFlags() const { return mbKeepScenarioFlags;} - bool isCloneNotes() const { return mbCloneNotes;} + bool isKeepScenarioFlags() const; + bool isCloneNotes() const; }; class CopyToDocContext : public ClipContextBase diff --git a/sc/source/core/data/clipcontext.cxx b/sc/source/core/data/clipcontext.cxx index 6c1e1ea..d60a2e2 100644 --- a/sc/source/core/data/clipcontext.cxx +++ b/sc/source/core/data/clipcontext.cxx @@ -53,6 +53,16 @@ void CopyFromClipContext::setTabRange(SCTAB nStart, SCTAB nEnd) mnTabEnd = nEnd; } +SCTAB CopyFromClipContext::getTabStart() const +{ + return mnTabStart; +} + +SCTAB CopyFromClipContext::getTabEnd() const +{ + return mnTabEnd; +} + void CopyFromClipContext::setDestRange( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) { mnDestCol1 = nCol1; @@ -71,21 +81,61 @@ CopyFromClipContext::Range CopyFromClipContext::getDestRange() const return aRet; } +ScDocument* CopyFromClipContext::getUndoDoc() +{ + return mpRefUndoDoc; +} + +ScDocument* CopyFromClipContext::getClipDoc() +{ + return mpClipDoc; +} + +InsertDeleteFlags CopyFromClipContext::getInsertFlag() const +{ + return mnInsertFlag; +} + void CopyFromClipContext::setDeleteFlag( InsertDeleteFlags nFlag ) { mnDeleteFlag = nFlag; } +InsertDeleteFlags CopyFromClipContext::getDeleteFlag() const +{ + return mnDeleteFlag; +} + +ScCellValue& CopyFromClipContext::getSingleCell() +{ + return maSingleCell; +} + void CopyFromClipContext::setCondFormatList( ScConditionalFormatList* pCondFormatList ) { mpCondFormatList = pCondFormatList; } +ScConditionalFormatList* CopyFromClipContext::getCondFormatList() +{ + return mpCondFormatList; +} + +const ScPatternAttr* CopyFromClipContext::getSingleCellPattern() const +{ + return mpSinglePattern; +} + void CopyFromClipContext::setSingleCellPattern( const ScPatternAttr* pAttr ) { mpSinglePattern = pAttr; } +const ScPostIt* CopyFromClipContext::getSingleCellNote() const +{ + return mpSingleNote; +} + void CopyFromClipContext::setSingleCellNote( const ScPostIt* pNote ) { mpSingleNote = pNote; @@ -96,6 +146,26 @@ void CopyFromClipContext::setTableProtected( bool b ) mbTableProtected = b; } +bool CopyFromClipContext::isTableProtected() const +{ + return mbTableProtected; +} + +bool CopyFromClipContext::isAsLink() const +{ + return mbAsLink; +} + +bool CopyFromClipContext::isSkipAttrForEmptyCells() const +{ + return mbSkipAttrForEmptyCells; +} + +bool CopyFromClipContext::isCloneNotes() const +{ + return mbCloneNotes; +} + bool CopyFromClipContext::isDateCell( const ScColumn& rCol, SCROW nRow ) const { sal_uLong nNumIndex = static_cast<const SfxUInt32Item*>(rCol.GetAttr(nRow, ATTR_VALUE_FORMAT))->GetValue(); @@ -109,6 +179,16 @@ CopyToClipContext::CopyToClipContext( CopyToClipContext::~CopyToClipContext() {} +bool CopyToClipContext::isKeepScenarioFlags() const +{ + return mbKeepScenarioFlags; +} + +bool CopyToClipContext::isCloneNotes() const +{ + return mbCloneNotes; +} + CopyToDocContext::CopyToDocContext(ScDocument& rDoc) : ClipContextBase(rDoc) {} CopyToDocContext::~CopyToDocContext() {} _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits