[Libreoffice-commits] .: 2 commits - sc/inc sc/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Sep 6 09:56:35 PDT 2012
sc/inc/globstr.hrc | 4 +++-
sc/source/core/data/attarray.cxx | 34 ++++++++++++++++++++++++++++++++++
sc/source/core/data/fillinfo.cxx | 21 ++++++++++++++++-----
sc/source/core/data/table2.cxx | 3 ++-
sc/source/ui/src/globstr.src | 4 ++++
sc/source/ui/view/cellsh1.cxx | 12 ++++++++++++
6 files changed, 71 insertions(+), 7 deletions(-)
New commits:
commit 24712398aa28b5a612a9a2bdeecd51d3eb9535e8
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Sep 6 18:52:12 2012 +0200
handle protection in conditional formats correctly, fdo#51636
Change-Id: I81d7369218ae8e361f15d811952a8f690a32df96
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index 6cf487f..bcba4de 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -1189,7 +1189,41 @@ bool ScAttrArray::HasAttrib( SCROW nRow1, SCROW nRow2, sal_uInt16 nMask ) const
{
const ScProtectionAttr* pProtect =
(const ScProtectionAttr*) &pPattern->GetItem( ATTR_PROTECTION );
+ bool bFoundTemp = false;
if ( pProtect->GetProtection() || pProtect->GetHideCell() )
+ bFoundTemp = true;
+
+ const SfxUInt32Item* pConditional =
+ (const SfxUInt32Item*) &pPattern->GetItem( ATTR_CONDITIONAL );
+ if ( pConditional->GetValue() != 0 )
+ {
+ SCROW nRowStartCond = std::max<SCROW>( nRow1, i ? pData[i-1].nRow + 1: 0 );
+ SCROW nRowEndCond = std::min<SCROW>( nRow2, pData[i].nRow );
+ bool bFoundCond = false;
+ for(SCROW nRowCond = nRowStartCond; nRowCond <= nRowEndCond && !bFoundCond; ++nRowCond)
+ {
+ const SfxItemSet* pSet = pDocument->GetCondResult( nCol, nRowCond, nTab );
+
+ const SfxPoolItem* pItem;
+ if( pSet && pSet->GetItemState( ATTR_PROTECTION, true, &pItem ) == SFX_ITEM_SET )
+ {
+ const ScProtectionAttr* pCondProtect = static_cast<const ScProtectionAttr*>(pItem);
+ if( pCondProtect->GetProtection() || pProtect->GetHideCell() )
+ bFoundCond = true;
+ }
+ else
+ {
+ // well it is not true that we found one
+ // but existing one + cell where conditional
+ // formatting does not remove it
+ // => we have a protected cell
+ bFoundCond = true;
+ }
+ }
+ bFoundTemp = bFoundCond;
+ }
+
+ if(bFoundTemp)
bFound = true;
}
if ( nMask & HASATTR_ROTATE )
diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx
index 743aa26..1ee5a51 100644
--- a/sc/source/core/data/fillinfo.cxx
+++ b/sc/source/core/data/fillinfo.cxx
@@ -533,11 +533,6 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
pThisRowInfo->bEmptyBack = false;
}
- if (bHidden || ( bFormulaMode && bHideFormula && pInfo->pCell
- && pInfo->pCell->GetCellType()
- == CELLTYPE_FORMULA ))
- pInfo->bEmptyCellText = true;
-
if ( pCondForm )
{
ScCondFormatData aData = pCondForm->GetData( pInfo->pCell,
@@ -551,6 +546,17 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
//! Style-Sets cachen !!!
pInfo->pConditionSet = &pStyleSheet->GetItemSet();
bAnyCondition = true;
+
+ // we need to check already here for protected cells
+ const SfxPoolItem* pItem;
+ if ( bTabProtect && pInfo->pConditionSet->GetItemState( ATTR_PROTECTION, true, &pItem ) == SFX_ITEM_SET )
+ {
+ const ScProtectionAttr* pProtAttr = static_cast<const ScProtectionAttr*>(pItem);
+ bHidden = pProtAttr->GetHideCell();
+ bHideFormula = pProtAttr->GetHideFormula();
+
+ }
+
}
// if style is not there, treat like no condition
}
@@ -565,6 +571,11 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
}
}
+ if (bHidden || ( bFormulaMode && bHideFormula && pInfo->pCell
+ && pInfo->pCell->GetCellType()
+ == CELLTYPE_FORMULA ))
+ pInfo->bEmptyCellText = true;
+
++nArrY;
}
else if (bRowHidden && nLastHiddenRow >= 0)
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index afb9c6b..48cff65 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1909,7 +1909,8 @@ bool ScTable::IsBlockEditable( SCCOL nCol1, SCROW nRow1, SCCOL nCol2,
bIsEditable = false;
else if ( IsProtected() && !pDocument->IsScenario(nTab) )
{
- if((bIsEditable = !HasAttrib( nCol1, nRow1, nCol2, nRow2, HASATTR_PROTECTED )) != false)
+ bIsEditable = !HasAttrib( nCol1, nRow1, nCol2, nRow2, HASATTR_PROTECTED );
+ if(bIsEditable)
{
// If Sheet is protected and cells are not protected then
// check the active scenario protect flag if this range is
commit 8ebc294b5bbcbfe27db3718453fbfcf129329b90
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Sep 6 17:02:44 2012 +0200
no conditional format changes i protected sheets, related fdo#51636
Change-Id: I228ca76c34e3e18ea4d4f2197db20222319ebbd0
diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc
index 0694946..42d8c1e 100644
--- a/sc/inc/globstr.hrc
+++ b/sc/inc/globstr.hrc
@@ -600,7 +600,9 @@
#define STR_COND_UNIQUE 475
#define STR_COND_DUPLICATE 476
-#define STR_COUNT 477
+#define STR_ERR_CONDFORMAT_PROTECTED 477
+
+#define STR_COUNT 478
#endif
diff --git a/sc/source/ui/src/globstr.src b/sc/source/ui/src/globstr.src
index 0b25b8c..a58f5b6 100644
--- a/sc/source/ui/src/globstr.src
+++ b/sc/source/ui/src/globstr.src
@@ -1895,5 +1895,9 @@ Resource RID_GLOBSTR
{
Text [ en-US ] = "Formula is";
};
+ String STR_ERR_CONDFORMAT_PROTECTED
+ {
+ Text [ en-US ] = "Conditional Formats can not be created, deleted or changed in protected sheets!";
+ };
};
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 90e3dfe..c7f0ef8 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -2044,6 +2044,12 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
pData->GetMarkData().FillRangeListWithMarks(&aRangeList, false);
ScDocument* pDoc = pData->GetDocument();
+ if(pDoc->IsTabProtected(pData->GetTabNo()))
+ {
+ pTabViewShell->ErrorMessage( STR_ERR_CONDFORMAT_PROTECTED );
+ break;
+ }
+
ScAddress aPos(pData->GetCurX(), pData->GetCurY(), pData->GetTabNo());
if(aRangeList.empty())
{
@@ -2084,6 +2090,12 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
pData->GetMarkData().FillRangeListWithMarks(&aRangeList, false);
ScDocument* pDoc = pData->GetDocument();
+ if(pDoc->IsTabProtected(pData->GetTabNo()))
+ {
+ pTabViewShell->ErrorMessage( STR_ERR_CONDFORMAT_PROTECTED );
+ break;
+ }
+
ScAddress aPos(pData->GetCurX(), pData->GetCurY(), pData->GetTabNo());
if(aRangeList.empty())
{
More information about the Libreoffice-commits
mailing list