sw/source/core/edit/edfcol.cxx | 54 +++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 26 deletions(-)
New commits: commit ee5454c0504d72d387c37642df5d80ca4b60d0a9 Author: Ashod Nakashian <[email protected]> Date: Sat Sep 23 11:16:06 2017 -0400 sw: refactor inserting paragraph signature And move signatures to the end of the paragraphs. Change-Id: I56cb501451a52a89dc256432823d10856a6e73dd Reviewed-on: https://gerrit.libreoffice.org/42735 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx index ba4baaee73cd..47bad4fe1e74 100644 --- a/sw/source/core/edit/edfcol.cxx +++ b/sw/source/core/edit/edfcol.cxx @@ -977,6 +977,30 @@ void SwUndoParagraphSigning::RepeatImpl(::sw::RepeatContext&) { } +/// Creates and inserts Paragraph Signature Metadata field and creates the RDF entry +uno::Reference<text::XTextField> lcl_InsertParagraphSignature(const uno::Reference<frame::XModel>& xModel, + const uno::Reference<text::XTextContent>& xParent, + const OUString& signature) +{ + static const OUString MetaFilename("bails.rdf"); + static const OUString MetaNS("urn:bails"); + static const OUString RDFName = "loext:signature:signature"; + static const OUString ServiceName = "com.sun.star.text.textfield.MetadataField"; + + uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY); + auto xField = uno::Reference<text::XTextField>(xMultiServiceFactory->createInstance(ServiceName), uno::UNO_QUERY); + + // Add the signature at the end. + // uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY); + // xContent->attach(xParent->getAnchor()->getEnd()); + xField->attach(xParent->getAnchor()->getEnd()); + + const css::uno::Reference<css::rdf::XResource> xSubject(xField, uno::UNO_QUERY); + SwRDFHelper::addStatement(xModel, MetaNS, MetaFilename, xSubject, RDFName, signature); + + return xField; +} + void SwUndoParagraphSigning::Insert() { // Disable undo to avoid introducing noise when we edit the metadata field. @@ -992,17 +1016,7 @@ void SwUndoParagraphSigning::Insert() m_pDoc->GetIDocumentUndoRedo().DoUndo(isUndoEnabled); }); - static const OUString metaFile("bails.rdf"); - static const OUString metaNS("urn:bails"); - const OUString name = "loext:signature:signature"; - - uno::Reference<frame::XModel> xModel = m_pDoc->GetDocShell()->GetBaseModel(); - uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY); - m_xField = uno::Reference<text::XTextField>(xMultiServiceFactory->createInstance("com.sun.star.text.textfield.MetadataField"), uno::UNO_QUERY); - m_xField->attach(m_xParent->getAnchor()->getStart()); - - const css::uno::Reference<css::rdf::XResource> xSubject(m_xField, uno::UNO_QUERY); - SwRDFHelper::addStatement(xModel, metaNS, metaFile, xSubject, name, m_signature); + m_xField = lcl_InsertParagraphSignature(m_pDoc->GetDocShell()->GetBaseModel(), m_xParent, m_signature); uno::Reference<css::text::XTextRange> xText(m_xField, uno::UNO_QUERY); xText->setString(m_display); @@ -1063,12 +1077,9 @@ void SwEditShell::SignParagraph(SwPaM* pPaM) if (!signing.Sign(sigBuf)) return; - const OString signature = sigBuf.makeStringAndClear(); + const OUString signature = OStringToOUString(sigBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8, 0); // 4. Add metadata - static const OUString metaNS("urn:bails"); - static const OUString metaFile("bails.rdf"); - // Prevent validation since this will trigger a premature validation // upon inserting, but before seting the metadata. const bool bOldValidationFlag = SetParagraphSignatureValidation(false); @@ -1076,19 +1087,10 @@ void SwEditShell::SignParagraph(SwPaM* pPaM) SetParagraphSignatureValidation(bOldValidationFlag); }); - uno::Reference<frame::XModel> xModel = pDocShell->GetBaseModel(); - uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY); - uno::Reference<css::text::XTextField> xField(xMultiServiceFactory->createInstance("com.sun.star.text.textfield.MetadataField"), uno::UNO_QUERY); - GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::PARA_SIGN_ADD, nullptr); - // Add the signature at the end. - uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY); - xContent->attach(xParent->getAnchor()->getEnd()); - - uno::Reference<rdf::XResource> xRes(xField, uno::UNO_QUERY); - const OUString name = "loext:signature:signature"; - SwRDFHelper::addStatement(xModel, metaNS, metaFile, xRes, name, OStringToOUString(signature, RTL_TEXTENCODING_UTF8, 0)); + const uno::Reference<frame::XModel> xModel = pDocShell->GetBaseModel(); + uno::Reference<css::text::XTextField> xField = lcl_InsertParagraphSignature(xModel, xParent, signature); { // Disable undo to avoid introducing noise when we edit the metadata field. _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
