sc/source/ui/docshell/dbdocfun.cxx | 18 +++++----- sc/source/ui/docshell/docfunc.cxx | 50 ++++++++++++++--------------- sc/source/ui/docshell/editable.cxx | 62 +++++++++++++++++-------------------- sc/source/ui/docshell/impex.cxx | 2 - sc/source/ui/inc/editable.hxx | 44 +++++++++++++------------- sc/source/ui/view/cellsh1.cxx | 4 +- sc/source/ui/view/cellsh3.cxx | 2 - sc/source/ui/view/dbfunc.cxx | 4 +- sc/source/ui/view/dbfunc3.cxx | 2 - sc/source/ui/view/gridwin.cxx | 2 - sc/source/ui/view/spelldialog.cxx | 2 - sc/source/ui/view/viewfun2.cxx | 12 +++---- sc/source/ui/view/viewfun3.cxx | 4 +- sc/source/ui/view/viewfun4.cxx | 9 ++--- sc/source/ui/view/viewfunc.cxx | 8 ++-- 15 files changed, 112 insertions(+), 113 deletions(-)
New commits: commit da42d0ef32fc9c970511c9f10995a854a421568b Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Thu Aug 21 00:22:46 2025 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Sep 18 10:37:27 2025 +0200 sc: change constructors for static methods in ScEditableTester All the different constructors make ScEditableTester hard to use as it is hard to determine what each constructor will trigger, so instead use properly named static methods to create the object, to make it easier to understand what was used. Change-Id: Ieaa20c4f0fd134bd65ffb4a4353c60ea9e0fc874 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190202 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> (cherry picked from commit 24da8ee8221553b0aa3c91ce00663bf1a9ebba30) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191087 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx index bf6dd852614d..046abcaecaaf 100644 --- a/sc/source/ui/docshell/dbdocfun.cxx +++ b/sc/source/ui/docshell/dbdocfun.cxx @@ -513,8 +513,9 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, else nStartingColToEdit++; } - ScEditableTester aTester( rDoc, nTab, nStartingColToEdit, nStartingRowToEdit, - aLocalParam.nCol2, aLocalParam.nRow2, true /*bNoMatrixAtAll*/ ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock( + rDoc, nTab, nStartingColToEdit, nStartingRowToEdit, + aLocalParam.nCol2, aLocalParam.nRow2, true /*bNoMatrixAtAll*/); if (!aTester.IsEditable()) { if (!bApi) @@ -740,8 +741,9 @@ bool ScDBDocFunc::Query( SCTAB nTab, const ScQueryParam& rQueryParam, return false; } - ScEditableTester aTester( rDoc, nDestTab, aLocalParam.nCol1,aLocalParam.nRow1, - aLocalParam.nCol2,aLocalParam.nRow2); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nDestTab, + aLocalParam.nCol1, aLocalParam.nRow1, + aLocalParam.nCol2,aLocalParam.nRow2); if (!aTester.IsEditable()) { if (!bApi) @@ -1056,7 +1058,7 @@ void ScDBDocFunc::DoSubTotals( SCTAB nTab, const ScSubTotalParam& rParam, return; } - ScEditableTester aTester( rDoc, nTab, 0,rParam.nRow1+1, rDoc.MaxCol(),rDoc.MaxRow() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, 0, rParam.nRow1 + 1, rDoc.MaxCol(), rDoc.MaxRow()); if (!aTester.IsEditable()) { if (!bApi) @@ -1229,7 +1231,7 @@ bool isEditable(ScDocShell& rDocShell, const ScRangeList& rRanges, bool bApi, for (size_t i = 0, n = rRanges.size(); i < n; ++i) { const ScRange & r = rRanges[i]; - ScEditableTester aTester(rDoc, r, eAction); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, r, eAction); if (!aTester.IsEditable()) { if (!bApi) @@ -1283,7 +1285,7 @@ bool checkNewOutputRange(ScDPObject& rDPObj, ScDocShell& rDocShell, ScRange& rNe if (!rDoc.IsImportingXML()) { - ScEditableTester aTester(rDoc, rNewOut, eAction); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, rNewOut, eAction); if (!aTester.IsEditable()) { // destination area isn't editable @@ -1544,7 +1546,7 @@ bool ScDBDocFunc::CreatePivotTable(const ScDPObject& rDPObj, bool bRecord, bool if (!rDoc.IsImportingXML()) { - ScEditableTester aTester(rDoc, aNewOut, sc::EditAction::Unknown); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, aNewOut, sc::EditAction::Unknown); if (!aTester.IsEditable()) { // destination area isn't editable diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 0ec3c510f631..a8eb36617a0d 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -598,7 +598,7 @@ bool ScDocFunc::DeleteContents( if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; - ScEditableTester aTester( rDoc, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(rDoc, rMark); if (!aTester.IsEditable()) { if (!bApi) @@ -701,7 +701,7 @@ bool ScDocFunc::DeleteCell( if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; - ScEditableTester aTester(rDoc, rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row(), rMark); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row(), rMark); if (!aTester.IsEditable()) { rDocShell.ErrorMessage(aTester.GetMessageId()); @@ -769,7 +769,7 @@ bool ScDocFunc::TransliterateText( const ScMarkData& rMark, TransliterationFlags if (!rDoc.IsUndoEnabled()) bRecord = false; - ScEditableTester aTester( rDoc, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(rDoc, rMark); if (!aTester.IsEditable()) { if (!bApi) @@ -823,7 +823,7 @@ bool ScDocFunc::SetNormalString( bool& o_rbNumFmtSet, const ScAddress& rPos, con ScDocument& rDoc = rDocShell.GetDocument(); bool bUndo(rDoc.IsUndoEnabled()); - ScEditableTester aTester( rDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, rPos.Tab(), rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row()); if (!aTester.IsEditable()) { if (!bApi) @@ -1341,7 +1341,7 @@ void ScDocFunc::SetNoteText( const ScAddress& rPos, const OUString& rText, bool ScDocShellModificator aModificator( rDocShell ); ScDocument& rDoc = rDocShell.GetDocument(); - ScEditableTester aTester( rDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, rPos.Tab(), rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row()); if (!aTester.IsEditable()) { if (!bApi) @@ -1366,7 +1366,7 @@ void ScDocFunc::ReplaceNote( const ScAddress& rPos, const OUString& rNoteText, c { ScDocShellModificator aModificator( rDocShell ); ScDocument& rDoc = rDocShell.GetDocument(); - ScEditableTester aTester( rDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, rPos.Tab(), rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row()); if (aTester.IsEditable()) { ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer(); @@ -1904,23 +1904,23 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, switch (eCmd) { case INS_INSCOLS_BEFORE: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::InsertColumnsBefore, nMergeTestStartCol, 0, nMergeTestEndCol, rDoc.MaxRow(), aMark); break; case INS_INSCOLS_AFTER: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::InsertColumnsAfter, nMergeTestStartCol, 0, nMergeTestEndCol, rDoc.MaxRow(), aMark); break; case INS_INSROWS_BEFORE: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::InsertRowsBefore, 0, nMergeTestStartRow, rDoc.MaxCol(), nMergeTestEndRow, aMark); break; case INS_INSROWS_AFTER: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::InsertRowsAfter, 0, nMergeTestStartRow, rDoc.MaxCol(), nMergeTestEndRow, aMark); break; default: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestSelectedBlock( rDoc, nMergeTestStartCol, nMergeTestStartRow, nEditTestEndCol, nEditTestEndRow, aMark); } @@ -2406,15 +2406,15 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, switch (eCmd) { case DelCellCmd::Cols: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::DeleteColumns, nUndoStartCol, 0, nUndoEndCol, rDoc.MaxRow(), aMark); break; case DelCellCmd::Rows: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestBlockForAction( rDoc, sc::EditAction::DeleteRows, 0, nUndoStartRow, rDoc.MaxCol(), nUndoEndRow, aMark); break; default: - aTester = ScEditableTester( + aTester = ScEditableTester::CreateAndTestSelectedBlock( rDoc, nUndoStartCol, nUndoStartRow, nEditTestEndX, nEditTestEndY, aMark); } @@ -4120,7 +4120,7 @@ void ScDocFunc::ClearItems( const ScMarkData& rMark, const sal_uInt16* pWhich, b ScDocument& rDoc = rDocShell.GetDocument(); bool bUndo (rDoc.IsUndoEnabled()); - ScEditableTester aTester( rDoc, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(rDoc, rMark); if (!aTester.IsEditable()) { if (!bApi) @@ -4164,7 +4164,7 @@ bool ScDocFunc::ChangeIndent( const ScMarkData& rMark, bool bIncrement, bool bAp ScDocument& rDoc = rDocShell.GetDocument(); bool bUndo(rDoc.IsUndoEnabled()); - ScEditableTester aTester( rDoc, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(rDoc, rMark); if (!aTester.IsEditable()) { if (!bApi) @@ -4253,7 +4253,7 @@ bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, } ScAutoFormat* pAutoFormat = ScGlobal::GetOrCreateAutoFormat(); - ScEditableTester aTester( rDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, aMark); if ( nFormatNo < pAutoFormat->size() && aTester.IsEditable() ) { weld::WaitObject aWait( ScDocShell::GetActiveDialogParent() ); @@ -4375,7 +4375,7 @@ bool ScDocFunc::EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, aMark.SelectTable( nTab, true ); } - ScEditableTester aTester( rDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, aMark); if ( aTester.IsEditable() ) { weld::WaitObject aWait( ScDocShell::GetActiveDialogParent() ); @@ -4462,7 +4462,7 @@ bool ScDocFunc::TabOp( const ScRange& rRange, const ScMarkData* pTabMark, aMark.SelectTable( nTab, true ); } - ScEditableTester aTester( rDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, aMark); if ( aTester.IsEditable() ) { weld::WaitObject aWait( ScDocShell::GetActiveDialogParent() ); @@ -4606,7 +4606,7 @@ bool ScDocFunc::FillSimple( const ScRange& rRange, const ScMarkData* pTabMark, aMark.SelectTable( nTab, true ); } - ScEditableTester aTester( rDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, aMark); if ( aTester.IsEditable() ) { weld::WaitObject aWait( ScDocShell::GetActiveDialogParent() ); @@ -4719,7 +4719,7 @@ bool ScDocFunc::FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, aMark.SelectTable( nTab, true ); } - ScEditableTester aTester( rDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, aMark); if ( aTester.IsEditable() ) { weld::WaitObject aWait( ScDocShell::GetActiveDialogParent() ); @@ -4891,7 +4891,7 @@ bool ScDocFunc::FillAuto( ScRange& rRange, const ScMarkData* pTabMark, FillDir e //! Source range can be protected !!! //! but can't contain matrix fragments !!! - ScEditableTester aTester( rDoc, aDestArea, sc::EditAction::Unknown ); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, aDestArea, sc::EditAction::Unknown); if ( !aTester.IsEditable() ) { if (!bApi) @@ -4991,7 +4991,7 @@ bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, bool bContents, bo for (const auto& rTab : rOption.maTabs) { - ScEditableTester aTester( rDoc, rTab, nStartCol, nStartRow, nEndCol, nEndRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, rTab, nStartCol, nStartRow, nEndCol, nEndRow); if (!aTester.IsEditable()) { if (!bApi) @@ -5430,7 +5430,7 @@ bool ScDocFunc::InsertNameList( const ScAddress& rStartPos, bool bApi ) SCCOL nEndCol = nStartCol + 1; SCROW nEndRow = nStartRow + static_cast<SCROW>(nValidCount) - 1; - ScEditableTester aTester( rDoc, nTab, nStartCol,nStartRow, nEndCol,nEndRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow); if (aTester.IsEditable()) { ScDocumentUniquePtr pUndoDoc; @@ -5744,7 +5744,7 @@ void ScDocFunc::ConvertFormulaToValue( const ScRange& rRange, bool bInteraction if (!rDoc.IsUndoEnabled()) bRecord = false; - ScEditableTester aTester(rDoc, rRange, sc::EditAction::Unknown); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, rRange, sc::EditAction::Unknown); if (!aTester.IsEditable()) { if (bInteraction) diff --git a/sc/source/ui/docshell/editable.cxx b/sc/source/ui/docshell/editable.cxx index 357897470aa1..c10d0e0d4e21 100644 --- a/sc/source/ui/docshell/editable.cxx +++ b/sc/source/ui/docshell/editable.cxx @@ -22,65 +22,61 @@ #include <viewfunc.hxx> #include <globstr.hrc> -ScEditableTester::ScEditableTester() : - mbIsEditable(true), - mbOnlyMatrix(true) -{ -} +ScEditableTester::ScEditableTester() = default; -ScEditableTester::ScEditableTester( const ScDocument& rDoc, SCTAB nTab, - SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bNoMatrixAtAll ) : - mbIsEditable(true), - mbOnlyMatrix(true) +ScEditableTester ScEditableTester::CreateAndTestBlock(const ScDocument& rDoc, SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bNoMatrixAtAll) { - TestBlock( rDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow, bNoMatrixAtAll ); + ScEditableTester aTester; + aTester.TestBlock(rDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow, bNoMatrixAtAll); + return aTester; } -ScEditableTester::ScEditableTester( const ScDocument& rDoc, +ScEditableTester ScEditableTester::CreateAndTestSelectedBlock(const ScDocument& rDoc, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, - const ScMarkData& rMark ) : - mbIsEditable(true), - mbOnlyMatrix(true) + const ScMarkData& rMark) { - TestSelectedBlock( rDoc, nStartCol, nStartRow, nEndCol, nEndRow, rMark ); + ScEditableTester aTester; + aTester.TestSelectedBlock(rDoc, nStartCol, nStartRow, nEndCol, nEndRow, rMark); + return aTester; } -ScEditableTester::ScEditableTester( const ScDocument& rDoc, const ScRange& rRange, sc::EditAction eAction ) : - mbIsEditable(true), - mbOnlyMatrix(true) +ScEditableTester ScEditableTester::CreateAndTestRange(const ScDocument& rDoc, const ScRange& rRange, sc::EditAction eAction) { + ScEditableTester aTester; if (eAction == sc::EditAction::Unknown) - TestRange(rDoc, rRange); + aTester.TestRange(rDoc, rRange); else - TestRangeForAction( rDoc, rRange, eAction ); + aTester.TestRangeForAction( rDoc, rRange, eAction ); + return aTester; } -ScEditableTester::ScEditableTester( const ScDocument& rDoc, const ScMarkData& rMark ) : - mbIsEditable(true), - mbOnlyMatrix(true) +ScEditableTester ScEditableTester::CreateAndTestSelection(const ScDocument& rDoc, const ScMarkData& rMark) { - TestSelection( rDoc, rMark ); + ScEditableTester aTester; + aTester.TestSelection(rDoc, rMark); + return aTester; } -ScEditableTester::ScEditableTester( ScViewFunc* pView ) : - mbIsEditable(true), - mbOnlyMatrix(true) +ScEditableTester ScEditableTester::CreateAndTestView(ScViewFunc* pView) { + ScEditableTester aTester; bool bThisMatrix; if ( !pView->SelectionEditable( &bThisMatrix ) ) { - mbIsEditable = false; + aTester.mbIsEditable = false; if ( !bThisMatrix ) - mbOnlyMatrix = false; + aTester.mbOnlyMatrix = false; } + return aTester; } -ScEditableTester::ScEditableTester( +ScEditableTester ScEditableTester::CreateAndTestBlockForAction( const ScDocument& rDoc, sc::EditAction eAction, SCCOL nStartCol, SCROW nStartRow, - SCCOL nEndCol, SCROW nEndRow, const ScMarkData& rMark ) : - ScEditableTester() + SCCOL nEndCol, SCROW nEndRow, const ScMarkData& rMark ) { - TestBlockForAction(rDoc, eAction, nStartCol, nStartRow, nEndCol, nEndRow, rMark); + ScEditableTester aTester; + aTester.TestBlockForAction(rDoc, eAction, nStartCol, nStartRow, nEndCol, nEndRow, rMark); + return aTester; } void ScEditableTester::TestBlock( const ScDocument& rDoc, SCTAB nTab, diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx index 98e05311c356..b9d453fc56e2 100644 --- a/sc/source/ui/docshell/impex.cxx +++ b/sc/source/ui/docshell/impex.cxx @@ -230,7 +230,7 @@ bool ScImportExport::StartPaste() { if ( !bAll ) { - ScEditableTester aTester( rDoc, aRange, sc::EditAction::Unknown ); + ScEditableTester aTester = ScEditableTester::CreateAndTestRange(rDoc, aRange, sc::EditAction::Unknown); if ( !aTester.IsEditable() ) { std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(ScDocShell::GetActiveDialogParent(), diff --git a/sc/source/ui/inc/editable.hxx b/sc/source/ui/inc/editable.hxx index c5deab9ae699..5128fb47301d 100644 --- a/sc/source/ui/inc/editable.hxx +++ b/sc/source/ui/inc/editable.hxx @@ -27,44 +27,44 @@ class ScViewFunc; class ScMarkData; namespace sc { - enum class EditAction; - } class ScEditableTester { - bool mbIsEditable; - bool mbOnlyMatrix; +private: + bool mbIsEditable = true; + bool mbOnlyMatrix = true; public: - ScEditableTester(); + ScEditableTester(); + + // Enable move constructor + ScEditableTester(ScEditableTester&& rOther) noexcept = default; - // calls TestBlock - /** @param bNoMatrixAtAll - TRUE if there must not be any matrix, not even entirely - contained; for example in sorting. */ - ScEditableTester( const ScDocument& rDoc, SCTAB nTab, + // Allow copy assignment + ScEditableTester& operator=(const ScEditableTester& rOther) = default; + + /** @param bNoMatrixAtAll + TRUE if there must not be any matrix, not even entirely + contained; for example in sorting. */ + static ScEditableTester CreateAndTestBlock(const ScDocument& rDoc, SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, - bool bNoMatrixAtAll = false ); + bool bNoMatrixAtAll = false); - // calls TestSelectedBlock - ScEditableTester( const ScDocument& rDoc, + static ScEditableTester CreateAndTestSelectedBlock(const ScDocument& rDoc, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, - const ScMarkData& rMark ); + const ScMarkData& rMark); - // calls TestRange - ScEditableTester( const ScDocument& rDoc, const ScRange& rRange, sc::EditAction eAction ); + static ScEditableTester CreateAndTestRange(const ScDocument& rDoc, const ScRange& rRange, sc::EditAction eAction); - // calls TestSelection - ScEditableTester( const ScDocument& rDoc, const ScMarkData& rMark ); + static ScEditableTester CreateAndTestSelection(const ScDocument& rDoc, const ScMarkData& rMark); - // calls TestView - ScEditableTester( ScViewFunc* pView ); + static ScEditableTester CreateAndTestView(ScViewFunc* pView); - ScEditableTester( + static ScEditableTester CreateAndTestBlockForAction( const ScDocument& rDoc, sc::EditAction eAction, SCCOL nStartCol, - SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, const ScMarkData& rMark ); + SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, const ScMarkData& rMark); // Several calls to the Test... methods check if *all* of the ranges // are editable. For several independent checks, Reset() has to be used. diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index 65b75608468c..9d53ed8739ef 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -484,7 +484,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } else { - ScEditableTester aTester( pTabViewShell ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(pTabViewShell); if (aTester.IsEditable()) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); @@ -1562,7 +1562,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } else { - ScEditableTester aTester( pTabViewShell ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(pTabViewShell); if (aTester.IsEditable()) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index ccd9cfa7557f..879ede8c1e44 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -1024,7 +1024,7 @@ void ScCellShell::Execute( SfxRequest& rReq ) if ( pDlg->Execute() == RET_OK ) { - ScEditableTester aTester( pTabViewShell ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(pTabViewShell); if ( !aTester.IsEditable() ) { pTabViewShell->ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index 8071b19313e6..ba1908d43f17 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -452,8 +452,8 @@ bool ScDBFunc::ImportData( const ScImportParam& rParam ) { ScDocument& rDoc = GetViewData().GetDocument(); - ScEditableTester aTester( rDoc, GetViewData().CurrentTabForData(), rParam.nCol1,rParam.nRow1, - rParam.nCol2,rParam.nRow2 ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, GetViewData().CurrentTabForData(), + rParam.nCol1, rParam.nRow1, rParam.nCol2, rParam.nRow2); if ( !aTester.IsEditable() ) { ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index 5788c4a39be9..55fa29a66cf0 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -447,7 +447,7 @@ void ScDBFunc::DoSubTotals( const ScSubTotalParam& rParam, bool bRecord, return; } - ScEditableTester aTester( rDoc, nTab, 0,rParam.nRow1+1, rDoc.MaxCol(),rDoc.MaxRow() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, 0, rParam.nRow1 + 1, rDoc.MaxCol(), rDoc.MaxRow()); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index cf786ea0529b..e9f835751bb9 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -4396,7 +4396,7 @@ sal_Int8 ScGridWindow::AcceptDrop( const AcceptDropEvent& rEvt ) SCTAB nTab = mrViewData.CurrentTabForData(); ScDocument& rDoc = mrViewData.GetDocument(); - ScEditableTester aTester( rDoc, nTab, nPosX,nPosY, nPosX,nPosY ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, nPosX, nPosY, nPosX, nPosY); if ( !aTester.IsFormatEditable() ) nRet = DND_ACTION_NONE; // forbidden } diff --git a/sc/source/ui/view/spelldialog.cxx b/sc/source/ui/view/spelldialog.cxx index b8dfaa9e8553..40fffa485495 100644 --- a/sc/source/ui/view/spelldialog.cxx +++ b/sc/source/ui/view/spelldialog.cxx @@ -198,7 +198,7 @@ void ScSpellDialogChildWindow::Init() case SC_SELECTTYPE_SHEET: { // test if there is something editable - ScEditableTester aTester( *mpDoc, rMarkData ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(*mpDoc, rMarkData); if( !aTester.IsEditable() ) { // #i85751# Don't show an ErrorMessage here, because the vcl diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index 73098abe894a..5f8ef60bfe90 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -1184,7 +1184,7 @@ void ScViewFunc::MergeCells( bool bApi, bool bDoContents, bool bCenter, { // Editable- and Being-Nested- test must be at the beginning (in DocFunc too), // so that the Contents-QueryBox won't appear - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -1365,7 +1365,7 @@ static bool lcl_extendMergeRange(ScCellMergeOption& rOption, const ScRange& rRan bool ScViewFunc::RemoveMerge() { ScRange aRange; - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -1699,7 +1699,7 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR void ScViewFunc::FillTab( InsertDeleteFlags nFlags, ScPasteFunc nFunction, bool bSkipEmpty, bool bAsLink ) { //! allow source sheet to be protected - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -2281,7 +2281,7 @@ void ScViewFunc::Solve( const ScSolveParam& rParam ) SCROW nDestRow = rParam.aRefVariableCell.Row(); SCTAB nDestTab = rParam.aRefVariableCell.Tab(); - ScEditableTester aTester( rDoc, nDestTab, nDestCol,nDestRow, nDestCol,nDestRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nDestTab, nDestCol, nDestRow, nDestCol, nDestRow); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -2379,7 +2379,7 @@ void ScViewFunc::MakeScenario( const OUString& rName, const OUString& rComment, void ScViewFunc::ExtendScenario() { - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -3312,7 +3312,7 @@ void ScViewFunc::HideTable( const ScMarkData& rMark, SCTAB nTabToSelect ) void ScViewFunc::InsertSpecialChar( const OUString& rStr, const vcl::Font& rFont ) { - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index 3f5d0125953a..f5fe10d47d51 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -93,7 +93,7 @@ void ScViewFunc::CutToClip() { UpdateInputLine(); - ScEditableTester aTester( this ); + ScEditableTester aTester = ScEditableTester::CreateAndTestView(this); if (!aTester.IsEditable()) // selection editable? { ErrorMessage( aTester.GetMessageId() ); @@ -1211,7 +1211,7 @@ bool ScViewFunc::PasteFromClip( InsertDeleteFlags nFlags, ScDocument* pClipDoc, // check cell-protection - ScEditableTester aTester( rDoc, nStartTab, nStartCol,nStartRow, nUndoEndCol,nUndoEndRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nStartTab, nStartCol, nStartRow, nUndoEndCol, nUndoEndRow); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx index fbba8b46c2e0..2a6b3c6020bd 100644 --- a/sc/source/ui/view/viewfun4.cxx +++ b/sc/source/ui/view/viewfun4.cxx @@ -198,8 +198,9 @@ void ScViewFunc::DoRefConversion() aMarkRange = ScRange( GetViewData().GetCurX(), GetViewData().GetCurY(), GetViewData().CurrentTabForData() ); } - ScEditableTester aTester( rDoc, aMarkRange.aStart.Col(), aMarkRange.aStart.Row(), - aMarkRange.aEnd.Col(), aMarkRange.aEnd.Row(),rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock( + rDoc, aMarkRange.aStart.Col(), aMarkRange.aStart.Row(), + aMarkRange.aEnd.Col(), aMarkRange.aEnd.Row(), rMark); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -340,7 +341,7 @@ void ScViewFunc::DoThesaurus() nTab = GetViewData().CurrentTabForData(); ScAddress aPos(nCol, nRow, nTab); - ScEditableTester aTester( rDoc, nCol, nRow, nCol, nRow, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nCol, nRow, nCol, nRow, rMark); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -469,7 +470,7 @@ void ScViewFunc::DoSheetConversion( const ScConversionParam& rConvParam ) bool bMarked = rMark.IsMultiMarked(); if (bMarked) { - ScEditableTester aTester( rDoc, rMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelection(rDoc, rMark); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 8fbdd4535ae5..b957271c0e61 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -783,7 +783,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, ScDocFunc &rFunc = GetViewData().GetDocFunc(); std::shared_ptr<ScDocShellModificator> xModificator = std::make_shared<ScDocShellModificator>(*pDocSh); - ScEditableTester aTester( rDoc, nCol,nRow, nCol,nRow, aMark ); + ScEditableTester aTester = ScEditableTester::CreateAndTestSelectedBlock(rDoc, nCol, nRow, nCol, nRow, aMark); if (!aTester.IsEditable()) { ErrorMessage(aTester.GetMessageId()); @@ -858,7 +858,7 @@ void ScViewFunc::EnterValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& r bool bUndo(rDoc.IsUndoEnabled()); ScDocShellModificator aModificator( *pDocSh ); - ScEditableTester aTester( rDoc, nTab, nCol,nRow, nCol,nRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, nCol, nRow, nCol, nRow); if (aTester.IsEditable()) { ScAddress aPos( nCol, nRow, nTab ); @@ -893,7 +893,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, ScDocShellModificator aModificator( *pDocSh ); - ScEditableTester aTester( rDoc, nTab, nCol,nRow, nCol,nRow ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, nCol, nRow, nCol, nRow); if (aTester.IsEditable()) { @@ -2126,7 +2126,7 @@ void ScViewFunc::DeleteMulti( bool bRows ) if (i == 0) { // test to the end of the sheet - ScEditableTester aTester( rDoc, nTab, nStartCol, nStartRow, rDoc.MaxCol(), rDoc.MaxRow() ); + ScEditableTester aTester = ScEditableTester::CreateAndTestBlock(rDoc, nTab, nStartCol, nStartRow, rDoc.MaxCol(), rDoc.MaxRow()); if (!aTester.IsEditable()) pErrorId = aTester.GetMessageId(); }