diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2013-03-27 16:08:37 +0100 |
---|---|---|
committer | Fridrich Strba <fridrich@documentfoundation.org> | 2013-03-27 17:25:42 +0000 |
commit | acd3b0da305fd6bf52a3d4cb6beb1d5702f68249 (patch) | |
tree | ec3c8c813c3ece334517f69c3a7918e98a144916 | |
parent | 34e356157acb91bb3c7aa48154337e4226803a40 (diff) |
fdo#53442 SwTxtPaintInfo::_DrawBackBrush: color multi-para comment ranges
(cherry picked from commits 82b29b9d384211061653f35695287be60dbc99b8 and
5ddcaa86003c6a28c4a9b307cdf3b37deabaa5a4)
Change-Id: Ieb9a33cda8297b432e1d0ea8224ba9231b6ac2c1
Reviewed-on: https://gerrit.libreoffice.org/3094
Reviewed-by: Michael Meeks <michael.meeks@suse.com>
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rw-r--r-- | sw/inc/docufld.hxx | 4 | ||||
-rw-r--r-- | sw/source/core/fields/docufld.cxx | 22 | ||||
-rw-r--r-- | sw/source/core/text/inftxt.cxx | 14 | ||||
-rw-r--r-- | sw/source/core/unocore/unoportenum.cxx | 24 |
4 files changed, 33 insertions, 31 deletions
diff --git a/sw/inc/docufld.hxx b/sw/inc/docufld.hxx index 0779b256dd69..35ea4c156154 100644 --- a/sw/inc/docufld.hxx +++ b/sw/inc/docufld.hxx @@ -34,6 +34,7 @@ class SwTxtFld; class SwFrm; class OutlinerParaObject; class SwTextAPIObject; +class SwFmtFld; enum SwAuthorFormat { @@ -530,6 +531,9 @@ public: const String& rAuthor, const String& rTxt, const String& rInitials, const String& rName, const DateTime& rDate); ~SwPostItField(); + /// Looks up a field identified by its unique name (used to get the postit field of a comment fieldmark) + static const SwFmtFld* GetByName(SwDoc* pDoc, const OUString& rName); + virtual String Expand() const; virtual SwField* Copy() const; diff --git a/sw/source/core/fields/docufld.cxx b/sw/source/core/fields/docufld.cxx index de0d3a841611..ebee25966357 100644 --- a/sw/source/core/fields/docufld.cxx +++ b/sw/source/core/fields/docufld.cxx @@ -92,6 +92,7 @@ #include <editeng/outliner.hxx> #include <editeng/outlobj.hxx> #include <switerator.hxx> +#include <docary.hxx> #define URL_DECODE INetURLObject::DECODE_UNAMBIGUOUS @@ -1753,6 +1754,27 @@ SwPostItField::~SwPostItField() } } +const SwFmtFld* SwPostItField::GetByName(SwDoc* pDoc, const OUString& rName) +{ + const SwFldTypes* pFldTypes = pDoc->GetFldTypes(); + sal_uInt16 nCount = pFldTypes->size(); + for (sal_uInt16 nType = 0; nType < nCount; ++nType) + { + const SwFieldType *pCurType = (*pFldTypes)[nType]; + SwIterator<SwFmtFld, SwFieldType> aIter(*pCurType); + for (const SwFmtFld* pCurFldFmt = aIter.First(); pCurFldFmt; pCurFldFmt = aIter.Next()) + { + // Ignore the field if it's not an annotation or it doesn't have an anchor. + if (pCurFldFmt->GetFld()->GetTyp()->Which() != RES_POSTITFLD || !pCurFldFmt->GetTxtFld()) + continue; + + const SwPostItField* pField = dynamic_cast<const SwPostItField*>(pCurFldFmt->GetFld()); + if (pField->GetName() == rName) + return pCurFldFmt; + } + } + return 0; +} String SwPostItField::Expand() const { diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index 2785e92fc61c..42cdbe29aaac 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -66,6 +66,7 @@ #include <cstdio> // #i12836# enhanced pdf export #include <EnhancedPDFExportHelper.hxx> +#include <docufld.hxx> #include <unomid.h> @@ -1106,17 +1107,14 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const // If this is a comment range, need to look up the color of the comment author. if (pFieldmark->GetFieldname() == ODF_COMMENTRANGE) { - // Search for the position of the postit field - const sal_Unicode fld[] = { CH_TXTATR_INWORD, 0 }; - xub_StrLen nEndIdx = GetTxt().SearchChar(fld, GetIdx()); - if (nEndIdx != STRING_NOTFOUND) + // Search for the postit field + const SwFmtFld* pField = SwPostItField::GetByName(pNd->GetDoc(), pFieldmark->GetName()); + if (pField) { - SwTxtAttr* pTxtAttr = pNd->GetTxtAttrForCharAt(nEndIdx, RES_TXTATR_FIELD); - const SwFmtFld& rPostItField = pTxtAttr->GetFld(); // Look up the author name - const OUString& rAuthor = rPostItField.GetFld()->GetPar1(); + const OUString& rAuthor = pField->GetFld()->GetPar1(); sal_uInt16 nIndex = pNd->GetDoc()->InsertRedlineAuthor(rAuthor); - pOutDev->SetFillColor( SwPostItMgr::GetColorLight(nIndex) ); + pOutDev->SetFillColor(SwPostItMgr::GetColorLight(nIndex)); bFilled = true; } } diff --git a/sw/source/core/unocore/unoportenum.cxx b/sw/source/core/unocore/unoportenum.cxx index 2829d3f6b058..788965a42146 100644 --- a/sw/source/core/unocore/unoportenum.cxx +++ b/sw/source/core/unocore/unoportenum.cxx @@ -320,28 +320,6 @@ lcl_FillFieldMarkArray(FieldMarks_t & rFieldMarks, SwUnoCrsr const & rUnoCrsr, } } -static const SwFmtFld* lcl_getFieldByName(SwDoc* pDoc, const OUString& rName) -{ - const SwFldTypes* pFldTypes = pDoc->GetFldTypes(); - sal_uInt16 nCount = pFldTypes->size(); - for (sal_uInt16 nType = 0; nType < nCount; ++nType) - { - const SwFieldType *pCurType = (*pFldTypes)[nType]; - SwIterator<SwFmtFld, SwFieldType> aIter(*pCurType); - for (const SwFmtFld* pCurFldFmt = aIter.First(); pCurFldFmt; pCurFldFmt = aIter.Next()) - { - // Ignore the field if it's not an annotation or it doesn't have an anchor. - if (pCurFldFmt->GetFld()->GetTyp()->Which() != RES_POSTITFLD || !pCurFldFmt->GetTxtFld()) - continue; - - const SwPostItField* pField = dynamic_cast<const SwPostItField*>(pCurFldFmt->GetFld()); - if (pField->GetName() == rName) - return pCurFldFmt; - } - } - return 0; -} - static uno::Reference<text::XTextRange> lcl_ExportFieldMark( uno::Reference< text::XText > const & i_xParentText, @@ -378,7 +356,7 @@ lcl_ExportFieldMark( { pPortion->SetBookmark( SwXFieldmark::CreateXFieldmark( *pDoc, *pFieldmark ) ); Reference<XTextField> xField; - const SwFmtFld* pField = lcl_getFieldByName(pDoc, pFieldmark->GetName()); + const SwFmtFld* pField = SwPostItField::GetByName(pDoc, pFieldmark->GetName()); if (pField) xField = SwXTextField::CreateSwXTextField(*pDoc, *pField); pPortion->SetTextField(xField); |