Hello Here is 2 new patch : 0001-add-GetCurParAttr-and-GetPaMParAttr-in-SwEditShell.patch Create the function GetCurParAttr and GetPaMParAttr in the SwEditShell class. The function will be used in future patchs (on the format paintbrush) that I need to format correctly. 0002-fix-of-comments.patch I wrote wrong comment in my preview patch (0002-rewrite-and-comment-SwEditShell-GetPaMTxtFmtColl.patch 31b7640f7137964916062e64fca18869a18f5118) which is waiting for moderator approval to be post on the mailing list. This patch fix the wrong comments. Regards Maxime de Roucy -- Maxime de Roucy Groupe LINAGORA - OSSA 80 rue Roque de Fillol 92800 PUTEAUX Tel. : 0 810 251 251
From dc676cade8dd096e35582a79c25c02ca3263123f Mon Sep 17 00:00:00 2001 From: Maxime de Roucy <mderoucy@linagora.com> Date: Wed, 14 Mar 2012 12:22:30 +0100 Subject: [PATCH 1/2] add GetCurParAttr and GetPaMParAttr in SwEditShell GetCurParAttr : Get the paragraph format attribute(s) of the current selection. GetPaMParAttr : Get the paragraph format attribute(s) of the selection(s) described by a SwPaM. The advantage of these methods is that the take the named and automatic format attributes. --- sw/inc/editsh.hxx | 28 +++++++++++++++++++ sw/source/core/edit/edattr.cxx | 59 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index a160b6e..392460e 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -253,6 +253,34 @@ public: void SetAttr( const SfxPoolItem&, sal_uInt16 nFlags = 0 ); void SetAttr( const SfxItemSet&, sal_uInt16 nFlags = 0, SwPaM* pCrsr = NULL ); + /** + * Get the paragraph format attribute(s) of the current selection. + * + * @see GetPaMParAttr() + * + * @param rSet + * output parameter - the SfxItemSet where the automatic paragraph format attribut(s) will be store. + * The attributes aren't invalidated or cleared if the function reach the getMaxLookup limite. + * + * @return true if the function inspect all the nodes point by the pPaM parameter, + * false if the function reach the limit of getMaxLookup number of nodes inspected. + */ + sal_Bool GetCurParAttr( SfxItemSet& rSet ) const; + /** + * Get the paragraph format attribute(s) of the selection(s) described by a SwPaM. + * + * @param pPaM + * input parameter - the selection where to look for the paragraph format. + * + * @param rSet + * output parameter - the SfxItemSet where the automatic paragraph format attribut(s) will be store. + * The attributes aren't invalidated or cleared if the function reach the getMaxLookup limite. + * + * @return true if the function inspect all the nodes point by the pPaM parameter, + * false if the function reach the limit of getMaxLookup number of nodes inspected. + */ + sal_Bool GetPaMParAttr( SwPaM* pPaM, SfxItemSet& rSet ) const; + // Set attribute as new default attribute in document. void SetDefault( const SfxPoolItem& ); diff --git a/sw/source/core/edit/edattr.cxx b/sw/source/core/edit/edattr.cxx index df6b4cd..a604cbc 100644 --- a/sw/source/core/edit/edattr.cxx +++ b/sw/source/core/edit/edattr.cxx @@ -176,7 +176,64 @@ sal_Bool SwEditShell::GetCurAttr( SfxItemSet& rSet, return GetPaMAttr( GetCrsr(), rSet, bMergeIndentValuesOfNumRule ); } -SwTxtFmtColl* SwEditShell::GetCurTxtFmtColl( ) const +sal_Bool SwEditShell::GetCurParAttr( SfxItemSet& rSet) const +{ + return GetPaMParAttr( GetCrsr(), rSet ); +} + +sal_Bool SwEditShell::GetPaMParAttr( SwPaM* pPaM, SfxItemSet& rSet ) const +{ + // number of nodes the function have explore so far + sal_uInt16 numberOfLookup = 0; + + SfxItemSet aSet( *rSet.GetPool(), rSet.GetRanges() ); + SfxItemSet* pSet = &rSet; + + SwPaM* pStartPaM = pPaM; + 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(); + + // reverse start and end if there number aren't sorted correctly + if( nSttNd > nEndNd ) + std::swap(nSttNd, nEndNd); + + // for all the nodes in the current selection + // get the node (paragraph) attributes + // and merge them in rSet + for( sal_uLong n = nSttNd; n <= nEndNd; ++n ) + { + // get the node + SwNode* pNd = GetDoc()->GetNodes()[ n ]; + + if( pNd->IsTxtNode() ) + { + // get the node (paragraph) attributes + static_cast<SwCntntNode*>(pNd)->GetAttr(*pSet); + + if( pSet != &rSet && aSet.Count() ) + { + rSet.MergeValues( aSet ); + aSet.ClearItem(); + } + + pSet = &aSet; + } + + ++numberOfLookup; + + // if the maximum number of node that can be inspect has been reach + if (numberOfLookup >= getMaxLookup()) + return sal_False; + } + } while ( ( pPaM = static_cast<SwPaM*>(pPaM->GetNext()) ) != pStartPaM ); + + return sal_True; +} + +SwTxtFmtnoll* SwEditShell::GetCurTxtFmtColl( ) const { return GetPaMTxtFmtColl( GetCrsr() ); } -- 1.7.9.4
From 84d54c3b21e165461ceceee3b5b412216338cc2b Mon Sep 17 00:00:00 2001 From: Maxime de Roucy <mderoucy@linagora.com> Date: Wed, 14 Mar 2012 12:34:56 +0100 Subject: [PATCH 2/2] fix of comments fix some comments made in 31b7640f7137964916062e64fca18869a18f5118 --- sw/inc/editsh.hxx | 10 +++++----- sw/source/core/edit/edattr.cxx | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index 392460e..a7110a9 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -325,23 +325,23 @@ public: sal_uInt16 GetTxtFmtCollCount() const; SwTxtFmtColl& GetTxtFmtColl( sal_uInt16 nTxtFmtColl) const; /** - * Get the named character format of the current selection. + * Get the named paragraph format of the current selection. * * @see GetPaMTxtFmtColl() * - * @return the named character format of the first node that contains one. + * @return the named paragraph 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. + * Get the named paragraph format of the selection(s) described by a SwPaM. * * @param pPaM - * input parameter - the selection where to look for the character format. + * input parameter - the selection where to look for the paragraph format. * - * @return the named character format of the first node that contains one. + * @return the named paragraph format of the first node that contains one. */ SwTxtFmtColl* GetPaMTxtFmtColl( SwPaM* pPaM ) const; diff --git a/sw/source/core/edit/edattr.cxx b/sw/source/core/edit/edattr.cxx index a604cbc..b690c62 100644 --- a/sw/source/core/edit/edattr.cxx +++ b/sw/source/core/edit/edattr.cxx @@ -268,17 +268,17 @@ SwTxtFmtColl* SwEditShell::GetPaMTxtFmtColl( SwPaM* pPaM ) const if( pNd->IsTxtNode() ) { - // if it's a text node get its named character format + // if it's a text node get its named paragraph format SwTxtFmtColl* pFmt = static_cast<SwTxtNode*>(pNd)->GetTxtColl(); - // if the character format exist stop here and return it + // if the paragraph format exist stop here and return it if( pFmt != NULL ) return pFmt; } } } while ( ( pPaM = static_cast<SwPaM*>(pPaM->GetNext()) ) != pStartPaM ); - // if none of the selected node contain a named character format + // if none of the selected node contain a named paragraph format return NULL; } -- 1.7.9.4
Attachment:
signature.asc
Description: This is a digitally signed message part