[Libreoffice-commits] core.git: 2 commits - sw/inc sw/source

Ashod Nakashian ashod.nakashian at collabora.co.uk
Tue Sep 26 11:58:59 UTC 2017


 sw/inc/editsh.hxx              |    4 +++
 sw/source/core/crsr/pam.cxx    |   28 ++------------------------
 sw/source/core/edit/edfcol.cxx |   44 ++++++++++++++++++++++++++++++++---------
 3 files changed, 42 insertions(+), 34 deletions(-)

New commits:
commit 3823697d99b28592d8923e099b6aab577d5cd339
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Sep 24 21:51:13 2017 -0400

    TSCP: refactor paragraph metadata field check
    
    This moves the logic into SwEditShell next to
    the exiting paragraph metadata infrastructure.
    
    Change-Id: I6c12bfca3d2e1b2bc8697f03f4de1b7c3e14b95a
    Reviewed-on: https://gerrit.libreoffice.org/42742
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx
index 50c5bf75e44e..7a8164c9ef70 100644
--- a/sw/inc/editsh.hxx
+++ b/sw/inc/editsh.hxx
@@ -380,6 +380,10 @@ public:
     /// Validate paragraph signatures, if any, at the cursor.
     void ValidateParagraphSignatures(bool updateDontRemove);
 
+    /// Returns true iff the cursor is within a paragraph metadata field.
+    /// Currently there are two variants: signature and classification.
+    bool IsCursorInParagraphMetadataField() const;
+
     void Insert2(SwField const &, const bool bForceExpandHints);
 
     void UpdateFields( SwField & );   ///< One single field.
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index dc7314e4896e..2afae847e64b 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -43,9 +43,7 @@
 #include <hints.hxx>
 #include <xmloff/odffields.hxx>
 
-#include <rdfhelper.hxx>
-#include <txtatr.hxx>
-#include <docsh.hxx>
+#include <editsh.hxx>
 
 // for the dump "MSC-" compiler
 inline sal_Int32 GetSttOrEnd( bool bCondition, const SwContentNode& rNd )
@@ -715,30 +713,10 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
         bRet = !( pA == pB && pA != nullptr );
     }
 
-    // Paragraph Signatures are read-only.
     if (!bRet)
     {
-        SwTextNode* pNode = Start()->nNode.GetNode().GetTextNode();
-        if (pNode != nullptr)
-        {
-            SwTextAttr* pAttr = pNode->GetTextAttrAt(Start()->nContent.GetIndex(), RES_TXTATR_METAFIELD);
-            SwTextMeta* pTextMeta = static_txtattr_cast<SwTextMeta*>(pAttr);
-            if (pTextMeta)
-            {
-                SwFormatMeta& rFormatMeta(static_cast<SwFormatMeta&>(pTextMeta->GetAttr()));
-                if (::sw::Meta* pMeta = rFormatMeta.GetMeta())
-                {
-                    if (const SwDocShell* pDocSh = pDoc->GetDocShell())
-                    {
-                        static const OUString metaNS("urn:bails");
-                        const css::uno::Reference<css::rdf::XResource> xSubject(pMeta->MakeUnoObject(), uno::UNO_QUERY);
-                        uno::Reference<frame::XModel> xModel = pDocSh->GetBaseModel();
-                        const std::map<OUString, OUString> aStatements = SwRDFHelper::getStatements(xModel, metaNS, xSubject);
-                        bRet = (aStatements.find("loext:paragraph:signature") != aStatements.end());
-                    }
-                }
-            }
-        }
+        // Paragraph Signatures and Classification fields are read-only.
+        bRet = pDoc->GetEditShell()->IsCursorInParagraphMetadataField();
     }
 
     return bRet;
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index 134682671242..d696fe02eaa3 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -79,6 +79,7 @@
 #include <strings.hrc>
 #include <undobj.hxx>
 #include <UndoParagraphSignature.hxx>
+#include <txtatr.hxx>
 
 #include <officecfg/Office/Common.hxx>
 #include <com/sun/star/beans/PropertyAttribute.hpp>
@@ -1155,6 +1156,32 @@ void SwEditShell::ValidateParagraphSignatures(bool updateDontRemove)
     }
 }
 
+bool SwEditShell::IsCursorInParagraphMetadataField() const
+{
+    SwTextNode* pNode = GetCursor()->Start()->nNode.GetNode().GetTextNode();
+    if (pNode != nullptr)
+    {
+        SwTextAttr* pAttr = pNode->GetTextAttrAt(GetCursor()->Start()->nContent.GetIndex(), RES_TXTATR_METAFIELD);
+        SwTextMeta* pTextMeta = static_txtattr_cast<SwTextMeta*>(pAttr);
+        if (pTextMeta != nullptr)
+        {
+            SwFormatMeta& rFormatMeta(static_cast<SwFormatMeta&>(pTextMeta->GetAttr()));
+            if (::sw::Meta* pMeta = rFormatMeta.GetMeta())
+            {
+                if (const SwDocShell* pDocSh = GetDoc()->GetDocShell())
+                {
+                    const css::uno::Reference<css::rdf::XResource> xSubject(pMeta->MakeUnoObject(), uno::UNO_QUERY);
+                    uno::Reference<frame::XModel> xModel = pDocSh->GetBaseModel();
+                    const std::map<OUString, OUString> aStatements = SwRDFHelper::getStatements(xModel, MetaNS, xSubject);
+                    return (aStatements.find(ParagraphSignatureRDFName) != aStatements.end());
+                }
+            }
+        }
+    }
+
+    return false;
+}
+
 // #i62675#
 void SwEditShell::SetTextFormatColl(SwTextFormatColl *pFormat,
                                 const bool bResetListAttrs)
commit cfb355ec205044234840405fde4343898c2ea97b
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Sep 24 21:15:49 2017 -0400

    TSCP: cleanup more constant strings
    
    Change-Id: I244a3fc7899b3269cfdc76172f5dd57a2b987373
    Reviewed-on: https://gerrit.libreoffice.org/42741
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index 9ab83df7e36f..134682671242 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -91,6 +91,7 @@ static const OUString MetaFilename("bails.rdf");
 static const OUString MetaNS("urn:bails");
 static const OUString ParagraphSignatureRDFName = "loext:paragraph:signature";
 static const OUString MetadataFieldServiceName = "com.sun.star.text.textfield.MetadataField";
+static const OUString DocInfoServiceName = "com.sun.star.text.TextField.DocInfo.Custom";
 
 /// Find all page styles which are currently used in the document.
 std::vector<OUString> lcl_getUsedPageStyles(SwViewShell const * pShell)
@@ -382,10 +383,9 @@ bool addOrInsertDocumentProperty(uno::Reference<beans::XPropertyContainer> const
 
 void insertFieldToDocument(uno::Reference<lang::XMultiServiceFactory> const & rxMultiServiceFactory, uno::Reference<text::XText> const & rxText, OUString const & rsKey)
 {
-    const OUString aServiceName = "com.sun.star.text.TextField.DocInfo.Custom";
-    if (!lcl_hasField(rxText, aServiceName, rsKey))
+    if (!lcl_hasField(rxText, DocInfoServiceName, rsKey))
     {
-        uno::Reference<beans::XPropertySet> xField(rxMultiServiceFactory->createInstance(aServiceName), uno::UNO_QUERY);
+        uno::Reference<beans::XPropertySet> xField(rxMultiServiceFactory->createInstance(DocInfoServiceName), uno::UNO_QUERY);
         xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(rsKey));
         uno::Reference<text::XTextContent> xTextContent(xField, uno::UNO_QUERY);
         rxText->insertTextContent(rxText->getEnd(), xTextContent, false);
@@ -544,7 +544,7 @@ std::vector<svx::ClassificationResult> SwEditShell::CollectAdvancedClassificatio
 
             uno::Reference<lang::XServiceInfo> xTextField;
             xTextPortion->getPropertyValue(UNO_NAME_TEXT_FIELD) >>= xTextField;
-            if (!xTextField->supportsService("com.sun.star.text.TextField.DocInfo.Custom"))
+            if (!xTextField->supportsService(DocInfoServiceName))
                 continue;
 
             OUString aName;
@@ -607,7 +607,6 @@ void SwEditShell::SetClassification(const OUString& rName, SfxClassificationPoli
     for (const OUString& rPageStyleName : aStyles)
     {
         uno::Reference<beans::XPropertySet> xPageStyle(xStyleFamily->getByName(rPageStyleName), uno::UNO_QUERY);
-        const OUString aServiceName = "com.sun.star.text.TextField.DocInfo.Custom";
         uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY);
 
         if (bHeaderIsNeeded || bWatermarkIsNeeded || bHadWatermark)
@@ -624,10 +623,10 @@ void SwEditShell::SetClassification(const OUString& rName, SfxClassificationPoli
 
             if (bHeaderIsNeeded)
             {
-                if (!lcl_hasField(xHeaderText, aServiceName, SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCHEADER()))
+                if (!lcl_hasField(xHeaderText, DocInfoServiceName, SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCHEADER()))
                 {
                     // Append a field to the end of the header text.
-                    uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(aServiceName), uno::UNO_QUERY);
+                    uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(DocInfoServiceName), uno::UNO_QUERY);
                     xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCHEADER()));
                     uno::Reference<text::XTextContent> xTextContent(xField, uno::UNO_QUERY);
                     xHeaderText->insertTextContent(xHeaderText->getEnd(), xTextContent, /*bAbsorb=*/false);
@@ -651,10 +650,10 @@ void SwEditShell::SetClassification(const OUString& rName, SfxClassificationPoli
             uno::Reference<text::XText> xFooterText;
             xPageStyle->getPropertyValue(UNO_NAME_FOOTER_TEXT) >>= xFooterText;
             static OUString sFooter = SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + SfxClassificationHelper::PROP_DOCFOOTER();
-            if (!lcl_hasField(xFooterText, aServiceName, sFooter))
+            if (!lcl_hasField(xFooterText, DocInfoServiceName, sFooter))
             {
                 // Append a field to the end of the footer text.
-                uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(aServiceName), uno::UNO_QUERY);
+                uno::Reference<beans::XPropertySet> xField(xMultiServiceFactory->createInstance(DocInfoServiceName), uno::UNO_QUERY);
                 xField->setPropertyValue(UNO_NAME_NAME, uno::makeAny(sFooter));
                 uno::Reference<text::XTextContent> xTextContent(xField, uno::UNO_QUERY);
                 xFooterText->insertTextContent(xFooterText->getEnd(), xTextContent, /*bAbsorb=*/false);


More information about the Libreoffice-commits mailing list