summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2013-03-27 16:08:37 +0100
committerFridrich Strba <fridrich@documentfoundation.org>2013-03-27 17:25:42 +0000
commitacd3b0da305fd6bf52a3d4cb6beb1d5702f68249 (patch)
treeec3c8c813c3ece334517f69c3a7918e98a144916
parent34e356157acb91bb3c7aa48154337e4226803a40 (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.hxx4
-rw-r--r--sw/source/core/fields/docufld.cxx22
-rw-r--r--sw/source/core/text/inftxt.cxx14
-rw-r--r--sw/source/core/unocore/unoportenum.cxx24
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);