[Libreoffice-commits] core.git: 3 commits - sc/inc sc/source
Eike Rathke
erack at redhat.com
Thu Mar 20 05:04:08 PDT 2014
sc/inc/tabprotection.hxx | 19 ++++++++++++++
sc/source/core/data/tabprotection.cxx | 44 ++++++++++++++++++++++++++++++++++
sc/source/filter/excel/xicontent.cxx | 39 +++++++++++++++++++++++++++---
sc/source/filter/inc/xicontent.hxx | 6 +++-
4 files changed, 103 insertions(+), 5 deletions(-)
New commits:
commit 273195cb0a237142dd8885529688325438f27281
Author: Eike Rathke <erack at redhat.com>
Date: Thu Mar 20 13:00:48 2014 +0100
stuff Excel enhanced protection read into ScTableProtection
Change-Id: I06db8f7466f5baddc55ea9cb117bb8a222de0c01
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index 4edbff6..bc27a29 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -74,11 +74,29 @@ const XclRef8U & XclRef8U::read( XclImpStream & rStrm )
return *this;
}
-ScRange XclRef8U::convertToScRange( SCTAB nTab )
+ScRange XclRef8U::convertToScRange( SCTAB nTab ) const
{
return ScRange( mnCol1, mnRow1, nTab, mnCol2, mnRow2, nTab);
}
+ScEnhancedProtection XclEnhancedProtection::convertToScEnhancedProtection( SCTAB nTab ) const
+{
+ ScEnhancedProtection aProt;
+ if (!maRefs.empty())
+ {
+ aProt.maRangeList = new ScRangeList;
+ for (::std::vector<XclRef8U>::const_iterator it(maRefs.begin()), itEnd(maRefs.end()); it != itEnd; ++it)
+ {
+ aProt.maRangeList->Append( it->convertToScRange( nTab));
+ }
+ }
+ aProt.mnAreserved = mnAreserved;
+ aProt.mnPasswordVerifier = mnPasswordVerifier;
+ aProt.maTitle = maTitle;
+ aProt.maSecurityDescriptor = maSecurityDescriptor;
+ return aProt;
+}
+
// Shared string table ========================================================
@@ -1302,8 +1320,6 @@ void XclImpSheetProtectBuffer::Apply() const
pProtect->setPasswordHash(aPass, PASSHASH_XL);
}
- // ranges the protection is applied to
-
// sheet protection options
const sal_uInt16 nOptions = itr->second.mnOptions;
pProtect->setOption( ScTableProtection::OBJECTS, (nOptions & 0x0001) );
@@ -1322,8 +1338,23 @@ void XclImpSheetProtectBuffer::Apply() const
pProtect->setOption( ScTableProtection::PIVOT_TABLES, (nOptions & 0x2000) );
pProtect->setOption( ScTableProtection::SELECT_UNLOCKED_CELLS, (nOptions & 0x4000) );
+ SCTAB nTab = itr->first;
+
+ // Enhanced protection containing editable ranges and permissions.
+ if (!itr->second.maEnhancedProtections.empty())
+ {
+ ::std::vector<ScEnhancedProtection> aProtections;
+ for (::std::vector<XclEnhancedProtection>::const_iterator
+ it(itr->second.maEnhancedProtections.begin()), itEnd(itr->second.maEnhancedProtections.end());
+ it != itEnd; ++it)
+ {
+ aProtections.push_back( it->convertToScEnhancedProtection( nTab));
+ }
+ pProtect->setEnhancedProtection( aProtections);
+ }
+
// all done. now commit.
- GetDoc().SetTabProtection(itr->first, pProtect.get());
+ GetDoc().SetTabProtection(nTab, pProtect.get());
}
}
diff --git a/sc/source/filter/inc/xicontent.hxx b/sc/source/filter/inc/xicontent.hxx
index 72ed76915..86142ec 100644
--- a/sc/source/filter/inc/xicontent.hxx
+++ b/sc/source/filter/inc/xicontent.hxx
@@ -31,6 +31,8 @@
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/noncopyable.hpp>
+class ScEnhancedProtection;
+
/* ============================================================================
Classes to import the big Excel document contents (related to several cells or
globals for the document).
@@ -52,7 +54,7 @@ struct XclRef8U
sal_uInt16 mnCol2;
const XclRef8U & read( XclImpStream & rStrm );
- ScRange convertToScRange( SCTAB nTab );
+ ScRange convertToScRange( SCTAB nTab ) const;
};
/** Feat ISFPROTECTION refs plus FeatProtection */
@@ -63,6 +65,8 @@ struct XclEnhancedProtection
sal_uInt32 mnPasswordVerifier;
OUString maTitle;
::std::vector< sal_uInt8 > maSecurityDescriptor; // raw data
+
+ ScEnhancedProtection convertToScEnhancedProtection( SCTAB nTab ) const;
};
// Shared string table ========================================================
commit 6daff4ed350b6b2493f36290a00892a9584e786f
Author: Eike Rathke <erack at redhat.com>
Date: Thu Mar 20 11:23:48 2014 +0100
range list might be nil, who knows
Change-Id: Iee5554f1b51db0f6dc22ccbed743ae431bb895f6
diff --git a/sc/source/core/data/tabprotection.cxx b/sc/source/core/data/tabprotection.cxx
index 10eef3c..7accb27 100644
--- a/sc/source/core/data/tabprotection.cxx
+++ b/sc/source/core/data/tabprotection.cxx
@@ -374,7 +374,8 @@ bool ScTableProtectionImpl::updateReference( UpdateRefMode eMode, ScDocument* pD
for (::std::vector<ScEnhancedProtection>::iterator it(maEnhancedProtection.begin());
it != maEnhancedProtection.end(); ++it)
{
- bChanged |= (*it).maRangeList->UpdateReference( eMode, pDoc, rWhere, nDx, nDy, nDz);
+ if ((*it).maRangeList.Is())
+ bChanged |= (*it).maRangeList->UpdateReference( eMode, pDoc, rWhere, nDx, nDy, nDz);
}
return bChanged;
}
commit 9cee6a45632623d3d7e5a574128940f96d8c926b
Author: Eike Rathke <erack at redhat.com>
Date: Thu Mar 20 10:16:50 2014 +0100
added ScEnhancedProtection to ScTableProtection
Change-Id: Id6a444bd01873e30ea1522aaf3b951f4d5adc261
diff --git a/sc/inc/tabprotection.hxx b/sc/inc/tabprotection.hxx
index 7703ffb..a32f50f 100644
--- a/sc/inc/tabprotection.hxx
+++ b/sc/inc/tabprotection.hxx
@@ -24,6 +24,7 @@
#include <com/sun/star/uno/Sequence.hxx>
#include "global.hxx"
+#include "rangelst.hxx"
#include <boost/shared_ptr.hpp>
class ScDocument;
@@ -110,6 +111,19 @@ private:
::boost::shared_ptr<ScTableProtectionImpl> mpImpl;
};
+/** Container for the Excel EnhancedProtection feature.
+ */
+struct ScEnhancedProtection
+{
+ ScRangeListRef maRangeList;
+ sal_uInt32 mnAreserved;
+ sal_uInt32 mnPasswordVerifier;
+ OUString maTitle;
+ ::std::vector< sal_uInt8 > maSecurityDescriptor; // raw data
+
+ ScEnhancedProtection() : mnAreserved(0), mnPasswordVerifier(0) {}
+};
+
/** sheet protection state container
*
* This class stores sheet's protection state: 1) whether the protection
@@ -163,6 +177,11 @@ public:
bool isOptionEnabled(Option eOption) const;
void setOption(Option eOption, bool bEnabled);
+ void setEnhancedProtection( const ::std::vector< ScEnhancedProtection > & rProt );
+ const ::std::vector< ScEnhancedProtection > & getEnhancedProtection() const;
+ bool updateReference( UpdateRefMode, ScDocument*, const ScRange& rWhere, SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
+
+
private:
::boost::shared_ptr<ScTableProtectionImpl> mpImpl;
};
diff --git a/sc/source/core/data/tabprotection.cxx b/sc/source/core/data/tabprotection.cxx
index c030d32..10eef3c 100644
--- a/sc/source/core/data/tabprotection.cxx
+++ b/sc/source/core/data/tabprotection.cxx
@@ -117,6 +117,10 @@ public:
bool isOptionEnabled(SCSIZE nOptId) const;
void setOption(SCSIZE nOptId, bool bEnabled);
+ void setEnhancedProtection( const ::std::vector< ScEnhancedProtection > & rProt );
+ const ::std::vector< ScEnhancedProtection > & getEnhancedProtection() const;
+ bool updateReference( UpdateRefMode, ScDocument*, const ScRange& rWhere, SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
+
private:
OUString maPassText;
::com::sun::star::uno::Sequence<sal_Int8> maPassHash;
@@ -125,6 +129,7 @@ private:
bool mbProtected;
ScPasswordHash meHash1;
ScPasswordHash meHash2;
+ ::std::vector< ScEnhancedProtection > maEnhancedProtection;
};
Sequence<sal_Int8> ScTableProtectionImpl::hashPassword(const OUString& aPassText, ScPasswordHash eHash)
@@ -352,6 +357,27 @@ void ScTableProtectionImpl::setOption(SCSIZE nOptId, bool bEnabled)
maOptions[nOptId] = bEnabled;
}
+void ScTableProtectionImpl::setEnhancedProtection( const ::std::vector< ScEnhancedProtection > & rProt )
+{
+ maEnhancedProtection = rProt;
+}
+
+const ::std::vector< ScEnhancedProtection > & ScTableProtectionImpl::getEnhancedProtection() const
+{
+ return maEnhancedProtection;
+}
+
+bool ScTableProtectionImpl::updateReference( UpdateRefMode eMode, ScDocument* pDoc,
+ const ScRange& rWhere, SCsCOL nDx, SCsROW nDy, SCsTAB nDz )
+{
+ bool bChanged = false;
+ for (::std::vector<ScEnhancedProtection>::iterator it(maEnhancedProtection.begin());
+ it != maEnhancedProtection.end(); ++it)
+ {
+ bChanged |= (*it).maRangeList->UpdateReference( eMode, pDoc, rWhere, nDx, nDy, nDz);
+ }
+ return bChanged;
+}
ScDocProtection::ScDocProtection() :
@@ -505,4 +531,21 @@ void ScTableProtection::setOption(Option eOption, bool bEnabled)
{
mpImpl->setOption(eOption, bEnabled);
}
+
+void ScTableProtection::setEnhancedProtection( const ::std::vector< ScEnhancedProtection > & rProt )
+{
+ mpImpl->setEnhancedProtection(rProt);
+}
+
+const ::std::vector< ScEnhancedProtection > & ScTableProtection::getEnhancedProtection() const
+{
+ return mpImpl->getEnhancedProtection();
+}
+
+bool ScTableProtection::updateReference( UpdateRefMode eMode, ScDocument* pDoc, const ScRange& rWhere,
+ SCsCOL nDx, SCsROW nDy, SCsTAB nDz )
+{
+ return mpImpl->updateReference( eMode, pDoc, rWhere, nDx, nDy, nDz);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list