sc/source/core/data/table1.cxx | 20 ++++++++------------ sc/source/core/data/table2.cxx | 22 ++++++++++++++++++---- 2 files changed, 26 insertions(+), 16 deletions(-)
New commits: commit 0e0755e3903d54ec3942094060ca84e37e78264b Author: Eike Rathke <er...@redhat.com> Date: Sat Mar 22 03:31:33 2014 +0100 use enhanced protection permission to override protection attribute Change-Id: I53eeb5ffe6e700dd02e3966ccd66738c7b5ab464 diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 3eb4962..b4d6656 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -49,6 +49,7 @@ #include "mtvcellfunc.hxx" #include "refupdatecontext.hxx" #include "scopetools.hxx" +#include "tabprotection.hxx" #include <rowheightcontext.hxx> #include <refhint.hxx> @@ -2172,7 +2173,13 @@ bool ScTable::IsBlockEditable( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, else if ( IsProtected() && !pDocument->IsScenario(nTab) ) { bIsEditable = !HasAttrib( nCol1, nRow1, nCol2, nRow2, HASATTR_PROTECTED ); - if(bIsEditable) + if (!bIsEditable) + { + // An enhanced protection permission may override the attribute. + if (pTabProtection) + bIsEditable = pTabProtection->isBlockEditable( ScRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab)); + } + if (bIsEditable) { // If Sheet is protected and cells are not protected then // check the active scenario protect flag if this range is @@ -2239,13 +2246,20 @@ bool ScTable::IsSelectionEditable( const ScMarkData& rMark, bIsEditable = false; else if ( IsProtected() && !pDocument->IsScenario(nTab) ) { - if((bIsEditable = !HasAttribSelection( rMark, HASATTR_PROTECTED )) != false) + ScRangeList aRanges; + rMark.FillRangeListWithMarks( &aRanges, false ); + bIsEditable = !HasAttribSelection( rMark, HASATTR_PROTECTED ); + if (!bIsEditable) + { + // An enhanced protection permission may override the attribute. + if (pTabProtection) + bIsEditable = pTabProtection->isSelectionEditable( aRanges); + } + if (bIsEditable) { // If Sheet is protected and cells are not protected then // check the active scenario protect flag if this area is // in the active scenario range. - ScRangeList aRanges; - rMark.FillRangeListWithMarks( &aRanges, false ); SCTAB nScenTab = nTab+1; while(pDocument->IsScenario(nScenTab) && bIsEditable) { commit eceba5512636445c9ce827e2d6151875a4fc4673 Author: Eike Rathke <er...@redhat.com> Date: Sat Mar 22 03:08:50 2014 +0100 no need to use the getter here Change-Id: I5bbec2c06a641729194ceee3882b88e7372d41a9 diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index 0f71358..cb59dc4 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -1578,9 +1578,8 @@ void ScTable::UpdateReference( if(mpCondFormatList) mpCondFormatList->UpdateReference(rCxt); - ScTableProtection* pProtection = GetProtection(); - if (pProtection) - pProtection->updateReference( eUpdateRefMode, pDocument, rCxt.maRange, nDx, nDy, nDz); + if (pTabProtection) + pTabProtection->updateReference( eUpdateRefMode, pDocument, rCxt.maRange, nDx, nDy, nDz); } void ScTable::UpdateTranspose( const ScRange& rSource, const ScAddress& rDest, @@ -1611,9 +1610,8 @@ void ScTable::UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) if (mpCondFormatList) mpCondFormatList->UpdateInsertTab(rCxt); - ScTableProtection* pProtection = GetProtection(); - if (pProtection) - pProtection->updateReference( URM_INSDEL, pDocument, + if (pTabProtection) + pTabProtection->updateReference( URM_INSDEL, pDocument, ScRange( 0, 0, rCxt.mnInsertPos, MAXCOL, MAXROW, MAXTAB), 0, 0, rCxt.mnSheets); @@ -1639,9 +1637,8 @@ void ScTable::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) if (mpCondFormatList) mpCondFormatList->UpdateDeleteTab(rCxt); - ScTableProtection* pProtection = GetProtection(); - if (pProtection) - pProtection->updateReference( URM_INSDEL, pDocument, + if (pTabProtection) + pTabProtection->updateReference( URM_INSDEL, pDocument, ScRange( 0, 0, rCxt.mnDeletePos, MAXCOL, MAXROW, MAXTAB), 0, 0, -rCxt.mnSheets); @@ -1665,9 +1662,8 @@ void ScTable::UpdateMoveTab( if(mpCondFormatList) mpCondFormatList->UpdateMoveTab(rCxt); - ScTableProtection* pProtection = GetProtection(); - if (pProtection) - pProtection->updateReference( URM_REORDER, pDocument, + if (pTabProtection) + pTabProtection->updateReference( URM_REORDER, pDocument, ScRange( 0, 0, rCxt.mnOldPos, MAXCOL, MAXROW, MAXTAB), 0, 0, rCxt.mnNewPos - rCxt.mnOldPos); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits