Hello 0001-add-SCWARN_EXPORT_MAXTAB-and-SCWARN_EXPORT_MAXCOL.patch Add warning in the xls export filter in order to display different messages when the number of column, row or tab are too high. 0002-rewrite-and-comment-SwEditShell-GetPaMTxtFmtColl.patch comment, doxygen description, and rewrite of SwEditShell::GetPaMTxtFmtColl and SwEditShell::GetCurTxtFmtColl. Doesn't change the behavior of the functions. 0003-getMaxLookup-in-SwEditShell-GetPaMTxtFmtColl.patch Handle getMaxLookup in SwEditShell::GetPaMTxtFmtColl. getMaxLookup become the maximum number of nodes to inspect. The function stop when it has inspect getMaxLookup nodes instead of stopping (approximately) when it as to inspect more than getMaxLookup nodes. 0004-SwEditShell-use-of-the-STL-swap-function.patch Us of the swap STL function in the file sw/source/core/edit/edattr.cxx Feel free to comment my code ! Regards -- Maxime de Roucy Groupe LINAGORA - OSSA 80 rue Roque de Fillol 92800 PUTEAUX Tel. : 0 810 251 251
From 17a07d3c910a812f2dd0537d3a1e454ae9f06881 Mon Sep 17 00:00:00 2001
From: Maxime de Roucy <mderoucy@linagora.com>
Date: Thu, 8 Mar 2012 14:49:58 +0100
Subject: [PATCH 1/4] add SCWARN_EXPORT_MAXTAB and SCWARN_EXPORT_MAXCOL
Create separate warnings when the maximum number of row, columns or
sheets is reach in the export filter to xls forma.
---
sc/inc/scerrors.hxx | 4 +++-
sc/source/filter/excel/expop2.cxx | 7 +++++--
sc/source/ui/src/scerrors.src | 8 ++++++++
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/sc/inc/scerrors.hxx b/sc/inc/scerrors.hxx
index 735f7ba..fc6b9cb 100644
--- a/sc/inc/scerrors.hxx
+++ b/sc/inc/scerrors.hxx
@@ -68,7 +68,9 @@
#define SCWARN_EXPORT_NONCONVERTIBLE_CHARS ( 1 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
#define SCWARN_EXPORT_ASCII ( 2 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
#define SCWARN_EXPORT_MAXROW ( 3 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
-#define SCWARN_EXPORT_DATALOST ( 4 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
+#define SCWARN_EXPORT_MAXCOL ( 4 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
+#define SCWARN_EXPORT_MAXTAB ( 5 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
+#define SCWARN_EXPORT_DATALOST ( 6 | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
// ERRCODE_CLASS_GENERAL
#define SCWARN_CORE_HARD_RECALC ( 1 | ERRCODE_CLASS_GENERAL | ERRCODE_WARNING_MASK |
ERRCODE_AREA_SC )
diff --git a/sc/source/filter/excel/expop2.cxx b/sc/source/filter/excel/expop2.cxx
index a8a4ce1..ab31d97 100644
--- a/sc/source/filter/excel/expop2.cxx
+++ b/sc/source/filter/excel/expop2.cxx
@@ -124,10 +124,13 @@ FltError ExportBiff5::Write()
sfx2::SaveOlePropertySet(xDocProps, xRootStrg );
}
- //! TODO: separate warnings for columns and sheets
const XclExpAddressConverter& rAddrConv = GetAddressConverter();
- if( rAddrConv.IsColTruncated() || rAddrConv.IsRowTruncated() || rAddrConv.IsTabTruncated() )
+ if( rAddrConv.IsRowTruncated() )
return SCWARN_EXPORT_MAXROW;
+ if( rAddrConv.IsColTruncated() )
+ return SCWARN_EXPORT_MAXCOL;
+ if( rAddrConv.IsTabTruncated() )
+ return SCWARN_EXPORT_MAXTAB;
return eERR_OK;
}
diff --git a/sc/source/ui/src/scerrors.src b/sc/source/ui/src/scerrors.src
index 2a2e2ad..f77dcf0 100644
--- a/sc/source/ui/src/scerrors.src
+++ b/sc/source/ui/src/scerrors.src
@@ -150,6 +150,14 @@ Resource RID_ERRHDLSC
{
Text [ en-US ] = "The document contains more rows than supported in the selected
format.\nAdditional rows were not saved." ;
};
+ String SCWARN_EXPORT_MAXCOL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "The document contains more columns than supported in the selected
format.\nAdditional columns were not saved." ;
+ };
+ String SCWARN_EXPORT_MAXTAB & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "The document contains more sheets than supported in the selected
format.\nAdditional sheets were not saved." ;
+ };
String SCWARN_IMPORT_INFOLOST & ERRCODE_RES_MASK
{
Text [ en-US ] = "The document contains information not recognized by this program
version.\nResaving the document will delete this information!" ;
--
1.7.9.4
From 31b7640f7137964916062e64fca18869a18f5118 Mon Sep 17 00:00:00 2001
From: Maxime de Roucy <mderoucy@linagora.com>
Date: Tue, 13 Mar 2012 16:20:59 +0100
Subject: [PATCH 2/4] rewrite and comment SwEditShell::GetPaMTxtFmtColl
Classe SwEditShell.
Add some doxygen description for GetCurTxtFmtColl and GetPaMTxtFmtColl.
Rewrite of GetPaMTxtFmtColl in order to comment and simplify the code.
---
sw/inc/editsh.hxx | 18 ++++++++++++++++++
sw/source/core/edit/edattr.cxx | 38 ++++++++++++++++++++------------------
2 files changed, 38 insertions(+), 18 deletions(-)
diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx
index f6ba735..02b61f1 100644
--- a/sw/inc/editsh.hxx
+++ b/sw/inc/editsh.hxx
@@ -295,7 +295,25 @@ public:
SwTxtFmtColl& GetDfltTxtFmtColl() const;
sal_uInt16 GetTxtFmtCollCount() const;
SwTxtFmtColl& GetTxtFmtColl( sal_uInt16 nTxtFmtColl) const;
+ /**
+ * Get the named character format of the current selection.
+ *
+ * @see GetPaMTxtFmtColl()
+ *
+ * @return the named character format of the first node that contains one.
+ * Nodes are sort by order of appearance in the selections ;
+ * selections are sort by their order of creation
+ * (last created selection first, oldest selection at last).
+ */
SwTxtFmtColl* GetCurTxtFmtColl() const;
+ /**
+ * Get the named character format of the selection(s) described by a SwPaM.
+ *
+ * @param pPaM
+ * input parameter - the selection where to look for the character format.
+ *
+ * @return the named character format of the first node that contains one.
+ */
SwTxtFmtColl* GetPaMTxtFmtColl( SwPaM* pPaM ) const;
// #i62675#
diff --git a/sw/source/core/edit/edattr.cxx b/sw/source/core/edit/edattr.cxx
index 441ff2c..35f80c6 100644
--- a/sw/source/core/edit/edattr.cxx
+++ b/sw/source/core/edit/edattr.cxx
@@ -182,44 +182,46 @@ SwTxtFmtColl* SwEditShell::GetCurTxtFmtColl( ) const
SwTxtFmtColl* SwEditShell::GetPaMTxtFmtColl( SwPaM* pPaM ) const
{
- SwTxtFmtColl *pFmt = 0;
-
if ( GetCrsrCnt() > getMaxLookup() )
- return 0;
+ return NULL;
SwPaM* pStartPaM = pPaM;
- do {
+ do { // for all the point and mark (selections)
+
+ // get the start and the end node of the current selection
sal_uLong nSttNd = pPaM->GetMark()->nNode.GetIndex(),
nEndNd = pPaM->GetPoint()->nNode.GetIndex();
- xub_StrLen nSttCnt = pPaM->GetMark()->nContent.GetIndex(),
- nEndCnt = pPaM->GetPoint()->nContent.GetIndex();
- if( nSttNd > nEndNd || ( nSttNd == nEndNd && nSttCnt > nEndCnt ))
+ // reverse start and end if they aren't sorted correctly
+ if( nSttNd > nEndNd )
{
- sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
- nTmp = nSttCnt; nSttCnt = nEndCnt; nEndCnt = (xub_StrLen)nTmp;
+ sal_uLong tmpNd = nSttNd;
+ nSttNd = nEndNd;
+ nEndNd = tmpNd;
}
if( nEndNd - nSttNd >= getMaxLookup() )
- {
- pFmt = 0;
break;
- }
+ // for all the nodes in the current Point and Mark
for( sal_uLong n = nSttNd; n <= nEndNd; ++n )
{
+ // get the node
SwNode* pNd = GetDoc()->GetNodes()[ n ];
if( pNd->IsTxtNode() )
{
- if( !pFmt )
- pFmt = ((SwTxtNode*)pNd)->GetTxtColl();
- else if( pFmt == ((SwTxtNode*)pNd)->GetTxtColl() ) // ???
- break;
+ // if it's a text node get its named character format
+ SwTxtFmtColl* pFmt = static_cast<SwTxtNode*>(pNd)->GetTxtColl();
+
+ // if the character format exist stop here and return it
+ if( pFmt != NULL )
+ return pFmt;
}
}
- } while ( ( pPaM = ( SwPaM* )pPaM->GetNext() ) != pStartPaM );
+ } while ( ( pPaM = static_cast<SwPaM*>(pPaM->GetNext()) ) != pStartPaM );
- return pFmt;
+ // if none of the selected node contain a named character format
+ return NULL;
}
--
1.7.9.4
From ec9f5e9cdae263766f48a6cba8fb504df65cfd99 Mon Sep 17 00:00:00 2001
From: Maxime de Roucy <mderoucy@linagora.com>
Date: Tue, 13 Mar 2012 16:54:39 +0100
Subject: [PATCH 3/4] getMaxLookup in SwEditShell::GetPaMTxtFmtColl
Handle getMaxLookup as the maximum number of node to inspect.
---
sw/source/core/edit/edattr.cxx | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/sw/source/core/edit/edattr.cxx b/sw/source/core/edit/edattr.cxx
index 35f80c6..59356d6 100644
--- a/sw/source/core/edit/edattr.cxx
+++ b/sw/source/core/edit/edattr.cxx
@@ -72,6 +72,7 @@ const sal_uInt16& getMaxLookup()
sal_Bool SwEditShell::GetPaMAttr( SwPaM* pPaM, SfxItemSet& rSet,
const bool bMergeIndentValuesOfNumRule ) const
{
+ // ??? pPaM can be different from the Cursor ???
if( GetCrsrCnt() > getMaxLookup() )
{
rSet.InvalidateAllItems();
@@ -182,8 +183,8 @@ SwTxtFmtColl* SwEditShell::GetCurTxtFmtColl( ) const
SwTxtFmtColl* SwEditShell::GetPaMTxtFmtColl( SwPaM* pPaM ) const
{
- if ( GetCrsrCnt() > getMaxLookup() )
- return NULL;
+ // number of nodes the function have explore so far
+ sal_uInt16 numberOfLookup = 0;
SwPaM* pStartPaM = pPaM;
do { // for all the point and mark (selections)
@@ -200,14 +201,18 @@ SwTxtFmtColl* SwEditShell::GetPaMTxtFmtColl( SwPaM* pPaM ) const
nEndNd = tmpNd;
}
- if( nEndNd - nSttNd >= getMaxLookup() )
- break;
-
// for all the nodes in the current Point and Mark
for( sal_uLong n = nSttNd; n <= nEndNd; ++n )
{
// get the node
SwNode* pNd = GetDoc()->GetNodes()[ n ];
+
+ ++numberOfLookup;
+
+ // if the maximum number of node that can be inspect has been reach
+ if (numberOfLookup >= getMaxLookup())
+ return NULL;
+
if( pNd->IsTxtNode() )
{
// if it's a text node get its named character format
--
1.7.9.4
From 97f01fd8a11bd3a8f0c9de6a6f1963eaf4e30a3a Mon Sep 17 00:00:00 2001
From: Maxime de Roucy <mderoucy@linagora.com>
Date: Tue, 13 Mar 2012 17:10:55 +0100
Subject: [PATCH 4/4] SwEditShell : use of the STL swap function
---
sw/inc/editsh.hxx | 1 +
sw/source/core/edit/edattr.cxx | 14 ++++----------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx
index 02b61f1..a160b6e 100644
--- a/sw/inc/editsh.hxx
+++ b/sw/inc/editsh.hxx
@@ -44,6 +44,7 @@
#include <tblenum.hxx>
#include <IMark.hxx>
+#include <algorithm>
#include <vector>
#include <set>
#include <swundo.hxx>
diff --git a/sw/source/core/edit/edattr.cxx b/sw/source/core/edit/edattr.cxx
index 59356d6..df6b4cd 100644
--- a/sw/source/core/edit/edattr.cxx
+++ b/sw/source/core/edit/edattr.cxx
@@ -116,8 +116,8 @@ sal_Bool SwEditShell::GetPaMAttr( SwPaM* pPaM, SfxItemSet& rSet,
if( nSttNd > nEndNd || ( nSttNd == nEndNd && nSttCnt > nEndCnt ))
{
- sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
- nTmp = nSttCnt; nSttCnt = nEndCnt; nEndCnt = (xub_StrLen)nTmp;
+ std::swap(nSttNd, nEndNd);
+ std::swap(nSttCnt, nEndCnt);
}
if( nEndNd - nSttNd >= getMaxLookup() )
@@ -195,11 +195,7 @@ SwTxtFmtColl* SwEditShell::GetPaMTxtFmtColl( SwPaM* pPaM ) const
// reverse start and end if they aren't sorted correctly
if( nSttNd > nEndNd )
- {
- sal_uLong tmpNd = nSttNd;
- nSttNd = nEndNd;
- nEndNd = tmpNd;
- }
+ std::swap(nSttNd, nEndNd);
// for all the nodes in the current Point and Mark
for( sal_uLong n = nSttNd; n <= nEndNd; ++n )
@@ -343,9 +339,7 @@ sal_Bool SwEditShell::IsMoveLeftMargin( sal_Bool bRight, sal_Bool bModulus ) con
nEndNd = PCURCRSR->GetPoint()->nNode.GetIndex();
if( nSttNd > nEndNd )
- {
- sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
- }
+ std::swap(nSttNd, nEndNd);
SwCntntNode* pCNd;
for( sal_uLong n = nSttNd; bRet && n <= nEndNd; ++n )
--
1.7.9.4
Attachment:
signature.asc
Description: This is a digitally signed message part