[Libreoffice-commits] .: 6 commits - sw/inc sw/source xmloff/inc

Miklos Vajna vmiklos at kemper.freedesktop.org
Thu Jul 12 01:05:58 PDT 2012


 sw/inc/PostItMgr.hxx                |    6 +++---
 sw/inc/unofield.hxx                 |    1 +
 sw/source/core/text/inftxt.cxx      |   27 +++++++++++++++++++++++++--
 sw/source/core/unocore/unofield.cxx |   22 ++++++++++++++++++++--
 sw/source/core/unocore/unotext.cxx  |    6 +++++-
 xmloff/inc/xmloff/odffields.hxx     |    1 +
 6 files changed, 55 insertions(+), 8 deletions(-)

New commits:
commit 2c409f5a9871941ee380f200872769c62c665784
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 10:00:53 2012 +0200

    SwTxtPaintInfo::_DrawBackBrush: color comment ranges
    
    Change-Id: I65f681d9fd5f0e7471da77608279c2dade38d7cb

diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 554ba0f..e3f0835 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -39,6 +39,7 @@
 #include <editeng/splwrap.hxx>
 #include <editeng/pgrditem.hxx>
 #include <editeng/tstpitem.hxx>
+#include <xmloff/odffields.hxx>
 
 #include <SwSmartTagMgr.hxx>
 #include <linguistic/lngprops.hxx>
@@ -47,6 +48,9 @@
 #include <editeng/forbiddenruleitem.hxx>
 #include <txatbase.hxx>
 #include <fmtinfmt.hxx>
+#include <fmtfld.hxx>
+#include <fldbas.hxx>
+#include <PostItMgr.hxx>
 #include <swmodule.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/wrkwin.hxx>
@@ -1081,7 +1085,7 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const
         if(aIntersect.HasArea())
         {
             SwTxtNode *pNd = pFrm->GetTxtNode();
-            const ::sw::mark::IMark* pFieldmark = NULL;
+            const ::sw::mark::IFieldmark* pFieldmark = NULL;
             if(pNd)
             {
                 const SwDoc *doc=pNd->GetDoc();
@@ -1107,7 +1111,26 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const
             {
                 OutputDevice* pOutDev = (OutputDevice*)GetOut();
                 pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
-                pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() );
+                bool bFilled = false;
+                // 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)
+                    {
+                        SwTxtAttr* pTxtAttr = pNd->GetTxtAttrForCharAt(nEndIdx, RES_TXTATR_FIELD);
+                        const SwFmtFld& rPostItField = pTxtAttr->GetFld();
+                        // Look up the author name
+                        const rtl::OUString& rAuthor = rPostItField.GetFld()->GetPar1();
+                        sal_uInt16 nIndex = pNd->GetDoc()->InsertRedlineAuthor(rAuthor);
+                        pOutDev->SetFillColor( SwPostItMgr::GetColorLight(nIndex) );
+                        bFilled = true;
+                    }
+                }
+                if (!bFilled)
+                    pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() );
                 pOutDev->SetLineColor( );
                 pOutDev->DrawRect( aIntersect.SVRect() );
                 pOutDev->Pop();
commit ec92841fd3ea9ddcaa99d5d352f61971ba9ea5ee
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 10:00:32 2012 +0200

    SwXTextField::attachToRange: use a fieldmark for annotation range insert
    
    Change-Id: I15d8be58924918cde827ee1d12308cf491cff35b

diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index c30697b..ab20015 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -94,6 +94,7 @@
 #include <switerator.hxx>
 #include <rtl/strbuf.hxx>
 #include <vector>
+#include <xmloff/odffields.hxx>
 
 using ::rtl::OUString;
 using namespace ::com::sun::star;
@@ -1741,7 +1742,7 @@ void SwXTextField::attachToRange(
 
             UnoActionContext aCont(pDoc);
             SwTxtAttr* pTxtAttr = 0;
-            if(aPam.HasMark())
+            if(aPam.HasMark() && m_nServiceId != SW_SERVICE_FIELDTYPE_ANNOTATION)
                 pDoc->DeleteAndJoin(aPam);
 
             SwXTextCursor const*const pTextCursor(
@@ -1752,7 +1753,19 @@ void SwXTextField::attachToRange(
                 ? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
                 : nsSetAttrMode::SETATTR_DEFAULT;
 
-            pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
+            if (*aPam.GetPoint() != *aPam.GetMark() && m_nServiceId == SW_SERVICE_FIELDTYPE_ANNOTATION)
+            {
+                IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
+                pMarksAccess->makeFieldBookmark(
+                        aPam,
+                        OUString(),
+                        ODF_COMMENTRANGE);
+
+                SwPaM aEnd(*aPam.GetMark(), *aPam.GetMark());
+                pDoc->InsertPoolItem(aEnd, aFmt, nInsertFlags);
+            }
+            else
+                pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
 
             pTxtAttr = aPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
                     aPam.GetPoint()->nContent.GetIndex()-1, RES_TXTATR_FIELD);
commit ff3dc1d67002be4fa7a73785843087d0bc5ed123
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 09:59:43 2012 +0200

    SwXText::insertTextContent: allow attaching an annotation field to a range
    
    Change-Id: I44633089c40a5a02655d4abb08fedd1acb014d15

diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx
index f9cd4a0..4a8f1ef 100644
--- a/sw/source/core/unocore/unotext.cxx
+++ b/sw/source/core/unocore/unotext.cxx
@@ -605,9 +605,13 @@ throw (lang::IllegalArgumentException, uno::RuntimeException)
         ::sw::UnoTunnelGetImplementation<SwXReferenceMark>(xContentTunnel);
     SwXMeta *const pMeta =
         ::sw::UnoTunnelGetImplementation<SwXMeta>(xContentTunnel);
+    SwXTextField* pTextField =
+        ::sw::UnoTunnelGetImplementation<SwXTextField>(xContentTunnel);
+    if (pTextField && pTextField->GetServiceId() != SW_SERVICE_FIELDTYPE_ANNOTATION)
+        pTextField = 0;
 
     const bool bAttribute = pBookmark || pDocumentIndexMark
-        || pSection || pReferenceMark || pMeta;
+        || pSection || pReferenceMark || pMeta || pTextField;
 
     if (bAbsorb && !bAttribute)
     {
commit fa72acc4bf926b5df3e484d72fcc9880994f7ea2
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 09:56:53 2012 +0200

    SwXTextField: add getter method for m_nServiceId
    
    Change-Id: I5a4f65da17062db1334bb0140b7b4545494adfa6

diff --git a/sw/inc/unofield.hxx b/sw/inc/unofield.hxx
index 71915fa..c583353 100644
--- a/sw/inc/unofield.hxx
+++ b/sw/inc/unofield.hxx
@@ -196,6 +196,7 @@ public:
 
     /// @return an SwXTextField, either an already existing one or a new one
     static SwXTextField* CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt);
+    sal_uInt16 GetServiceId();
 };
 
 typedef
diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index b2447f4..c30697b 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -1019,6 +1019,11 @@ SwXTextField* SwXTextField::CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFm
     return pField ? pField : new SwXTextField( rFmt, &rDoc );
 }
 
+sal_uInt16 SwXTextField::GetServiceId()
+{
+    return m_nServiceId;
+}
+
 struct SwFieldProperties_Impl
 {
     String      sPar1;
commit f98fbc38640816aa1f834f0e932991ae0d3202ee
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 09:53:36 2012 +0200

    SwPostItMgr: these can be static
    
    Change-Id: I83b18d86c61e38ebe344d0b4153513ad65b20720

diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 502f750..8540697 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -262,9 +262,9 @@ class SwPostItMgr: public SfxListener
 
             void SetSpellChecking();
 
-            Color           GetColorDark(sal_uInt16 aAuthorIndex);
-            Color           GetColorLight(sal_uInt16 aAuthorIndex);
-            Color           GetColorAnchor(sal_uInt16 aAuthorIndex);
+            static Color           GetColorDark(sal_uInt16 aAuthorIndex);
+            static Color           GetColorLight(sal_uInt16 aAuthorIndex);
+            static Color           GetColorAnchor(sal_uInt16 aAuthorIndex);
 
 
             void                RegisterAnswer(OutlinerParaObject* pAnswer) { mpAnswer = pAnswer;}
commit 25416b8ad4fa0416bffdb05e231a5249faf7a38e
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Thu Jul 12 09:53:17 2012 +0200

    xmloff: add new constant for commentrange field type
    
    Change-Id: I9bdf184f5a8f414144d9dea814d6179ec2134209

diff --git a/xmloff/inc/xmloff/odffields.hxx b/xmloff/inc/xmloff/odffields.hxx
index b144f13..a116350 100644
--- a/xmloff/inc/xmloff/odffields.hxx
+++ b/xmloff/inc/xmloff/odffields.hxx
@@ -46,6 +46,7 @@
 #define ODF_OLE_PARAM "vnd.oasis.opendocument.field.ole"
 #define ODF_ID_PARAM "vnd.oasis.opendocument.field.id"
 #define ODF_CODE_PARAM "vnd.oasis.opendocument.field.code"
+#define ODF_COMMENTRANGE "vnd.oasis.opendocument.field.COMMENTRANGE"
 
 #endif /*  _ODFFIELDS_HXX */
 


More information about the Libreoffice-commits mailing list