[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - cui/source include/svx svx/Library_svx.mk svx/source
Miklos Vajna (via logerrit)
logerrit at kemper.freedesktop.org
Fri Jun 26 06:53:54 UTC 2020
cui/source/dialogs/SignSignatureLineDialog.cxx | 37 +-------
cui/source/dialogs/SignatureLineDialog.cxx | 14 ---
cui/source/dialogs/SignatureLineDialogBase.cxx | 14 ---
cui/source/inc/SignatureLineDialogBase.hxx | 1
include/svx/signaturelinehelper.hxx | 59 ++++++++++++
svx/Library_svx.mk | 1
svx/source/dialog/signaturelinehelper.cxx | 114 +++++++++++++++++++++++++
7 files changed, 185 insertions(+), 55 deletions(-)
New commits:
commit d3506785b59442a7f747eccedea557f5645b33cb
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Jun 8 17:14:14 2020 +0200
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Fri Jun 26 08:53:20 2020 +0200
sd signature line: extract part of signature line UI from cui to svx
So the "sign existing pdf" code in sd can reuse that.
(cherry picked from commit 85b68061a5a904ca82e5db40600af741d30f0bb8)
Conflicts:
cui/source/dialogs/SignSignatureLineDialog.cxx
Change-Id: If51fae203ed0c68ed8e5e63368e60ae1c705bade
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97175
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/cui/source/dialogs/SignSignatureLineDialog.cxx b/cui/source/dialogs/SignSignatureLineDialog.cxx
index 96fa94248106..10223e2b68fa 100644
--- a/cui/source/dialogs/SignSignatureLineDialog.cxx
+++ b/cui/source/dialogs/SignSignatureLineDialog.cxx
@@ -30,6 +30,7 @@
#include <utility>
#include <vcl/graph.hxx>
#include <vcl/weld.hxx>
+#include <svx/signaturelinehelper.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/graphic/GraphicProvider.hpp>
@@ -166,22 +167,14 @@ IMPL_LINK_NOARG(SignSignatureLineDialog, chooseCertificate, weld::Button&, void)
if (!pShell->PrepareForSigning(m_xDialog.get()))
return;
- Reference<XDocumentDigitalSignatures> xSigner(DocumentDigitalSignatures::createWithVersion(
- comphelper::getProcessComponentContext(), "1.2"));
- xSigner->setParentWindow(m_xDialog->GetXWindow());
- OUString aDescription;
- CertificateKind certificateKind = CertificateKind_NONE;
- // When signing ooxml, we only want X.509 certificates
- if (pShell->GetMedium()->GetFilter()->IsAlienFormat())
- certificateKind = CertificateKind_X509;
Reference<XCertificate> xSignCertificate
- = xSigner->selectSigningCertificateWithType(certificateKind, aDescription);
+ = svx::SignatureLineHelper::getSignatureCertificate(pShell, m_xDialog.get());
if (xSignCertificate.is())
{
m_xSelectedCertifate = xSignCertificate;
- m_xBtnChooseCertificate->set_label(xmlsec::GetContentPart(
- xSignCertificate->getSubjectName(), xSignCertificate->getCertificateKind()));
+ m_xBtnChooseCertificate->set_label(
+ svx::SignatureLineHelper::getSignerName(xSignCertificate));
}
ValidateFields();
}
@@ -217,15 +210,13 @@ void SignSignatureLineDialog::Apply()
css::uno::Reference<css::graphic::XGraphic> SignSignatureLineDialog::getSignedGraphic(bool bValid)
{
// Read svg and replace placeholder texts
- OUString aSvgImage(getSignatureImage());
+ OUString aSvgImage(svx::SignatureLineHelper::getSignatureImage());
aSvgImage = aSvgImage.replaceAll("[SIGNER_NAME]", getCDataString(m_aSuggestedSignerName));
aSvgImage = aSvgImage.replaceAll("[SIGNER_TITLE]", getCDataString(m_aSuggestedSignerTitle));
OUString aIssuerLine
= CuiResId(RID_SVXSTR_SIGNATURELINE_SIGNED_BY)
- .replaceFirst("%1",
- xmlsec::GetContentPart(m_xSelectedCertifate->getSubjectName(),
- m_xSelectedCertifate->getCertificateKind()));
+ .replaceFirst("%1", svx::SignatureLineHelper::getSignerName(m_xSelectedCertifate));
aSvgImage = aSvgImage.replaceAll("[SIGNED_BY]", getCDataString(aIssuerLine));
if (bValid)
aSvgImage = aSvgImage.replaceAll("[INVALID_SIGNATURE]", "");
@@ -233,10 +224,7 @@ css::uno::Reference<css::graphic::XGraphic> SignSignatureLineDialog::getSignedGr
OUString aDate;
if (m_bShowSignDate && bValid)
{
- const SvtSysLocale aSysLocale;
- const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
- Date aDateTime(Date::SYSTEM);
- aDate = rLocaleData.getDate(aDateTime);
+ aDate = svx::SignatureLineHelper::getLocalizedDate();
}
aSvgImage = aSvgImage.replaceAll("[DATE]", aDate);
@@ -266,16 +254,7 @@ css::uno::Reference<css::graphic::XGraphic> SignSignatureLineDialog::getSignedGr
}
// Create graphic
- SvMemoryStream aSvgStream(4096, 4096);
- aSvgStream.WriteOString(OUStringToOString(aSvgImage, RTL_TEXTENCODING_UTF8));
- Reference<XInputStream> xInputStream(new utl::OSeekableInputStreamWrapper(aSvgStream));
- Reference<XComponentContext> xContext(comphelper::getProcessComponentContext());
- Reference<XGraphicProvider> xProvider = css::graphic::GraphicProvider::create(xContext);
-
- Sequence<PropertyValue> aMediaProperties(1);
- aMediaProperties[0].Name = "InputStream";
- aMediaProperties[0].Value <<= xInputStream;
- return xProvider->queryGraphic(aMediaProperties);
+ return svx::SignatureLineHelper::importSVG(aSvgImage);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/cui/source/dialogs/SignatureLineDialog.cxx b/cui/source/dialogs/SignatureLineDialog.cxx
index 16f3b22ddd4a..efed5459bb6f 100644
--- a/cui/source/dialogs/SignatureLineDialog.cxx
+++ b/cui/source/dialogs/SignatureLineDialog.cxx
@@ -15,6 +15,7 @@
#include <unotools/streamwrap.hxx>
#include <utility>
#include <vcl/weld.hxx>
+#include <svx/signaturelinehelper.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
@@ -111,7 +112,7 @@ void SignatureLineDialog::Apply()
bool bShowSignDate(m_xCheckboxShowSignDate->get_active());
// Read svg and replace placeholder texts
- OUString aSvgImage(getSignatureImage());
+ OUString aSvgImage(svx::SignatureLineHelper::getSignatureImage());
aSvgImage = aSvgImage.replaceAll("[SIGNER_NAME]", getCDataString(aSignerName));
aSvgImage = aSvgImage.replaceAll("[SIGNER_TITLE]", getCDataString(aSignerTitle));
@@ -122,16 +123,7 @@ void SignatureLineDialog::Apply()
aSvgImage = aSvgImage.replaceAll("[DATE]", "");
// Insert/Update graphic
- SvMemoryStream aSvgStream(4096, 4096);
- aSvgStream.WriteOString(OUStringToOString(aSvgImage, RTL_TEXTENCODING_UTF8));
- Reference<XInputStream> xInputStream(new utl::OSeekableInputStreamWrapper(aSvgStream));
- Reference<XComponentContext> xContext(comphelper::getProcessComponentContext());
- Reference<XGraphicProvider> xProvider = css::graphic::GraphicProvider::create(xContext);
-
- Sequence<PropertyValue> aMediaProperties(1);
- aMediaProperties[0].Name = "InputStream";
- aMediaProperties[0].Value <<= xInputStream;
- Reference<XGraphic> xGraphic(xProvider->queryGraphic(aMediaProperties));
+ Reference<XGraphic> xGraphic = svx::SignatureLineHelper::importSVG(aSvgImage);
bool bIsExistingSignatureLine = m_xExistingShapeProperties.is();
Reference<XPropertySet> xShapeProps;
diff --git a/cui/source/dialogs/SignatureLineDialogBase.cxx b/cui/source/dialogs/SignatureLineDialogBase.cxx
index d72fa7b93f1d..50214308fe10 100644
--- a/cui/source/dialogs/SignatureLineDialogBase.cxx
+++ b/cui/source/dialogs/SignatureLineDialogBase.cxx
@@ -41,18 +41,4 @@ OUString SignatureLineDialogBase::getCDataString(const OUString& rString)
return "<![CDATA[" + rString + "]]>";
}
-OUString SignatureLineDialogBase::getSignatureImage()
-{
- OUString aPath("$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER "/filter/signature-line.svg");
- rtl::Bootstrap::expandMacros(aPath);
- SvFileStream aStream(aPath, StreamMode::READ);
- if (aStream.GetError() != ERRCODE_NONE)
- {
- SAL_WARN("cui.dialogs", "failed to open signature-line.svg");
- }
-
- OString const svg = read_uInt8s_ToOString(aStream, aStream.remainingSize());
- return OUString::fromUtf8(svg);
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/cui/source/inc/SignatureLineDialogBase.hxx b/cui/source/inc/SignatureLineDialogBase.hxx
index 2e046d945d80..3b065fe87838 100644
--- a/cui/source/inc/SignatureLineDialogBase.hxx
+++ b/cui/source/inc/SignatureLineDialogBase.hxx
@@ -24,7 +24,6 @@ public:
protected:
css::uno::Reference<css::frame::XModel> m_xModel;
- static OUString getSignatureImage();
virtual void Apply() = 0;
static OUString getCDataString(const OUString& rString);
};
diff --git a/include/svx/signaturelinehelper.hxx b/include/svx/signaturelinehelper.hxx
new file mode 100644
index 000000000000..4cdb40651479
--- /dev/null
+++ b/include/svx/signaturelinehelper.hxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SVX_SIGNATURELINEHELPER_HXX
+#define INCLUDED_SVX_SIGNATURELINEHELPER_HXX
+
+#include <rtl/ustring.hxx>
+#include <svx/svxdllapi.h>
+
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/security/XCertificate.hpp>
+
+namespace weld
+{
+class Window;
+}
+class SfxObjectShell;
+
+namespace svx::SignatureLineHelper
+{
+/**
+ * Returns an SVG template. Once placeholders are replaced with real content, the result can be used
+ * as the graphic of a signature line shape.
+ */
+SVX_DLLPUBLIC OUString getSignatureImage(const OUString& rType = OUString());
+
+/**
+ * Choose a signature for signature line purposes.
+ */
+SVX_DLLPUBLIC css::uno::Reference<css::security::XCertificate>
+getSignatureCertificate(SfxObjectShell* pShell, weld::Window* pParent);
+
+/**
+ * Get a signer name out of a certificate.
+ */
+SVX_DLLPUBLIC OUString
+getSignerName(const css::uno::Reference<css::security::XCertificate>& xCertificate);
+
+/**
+ * Gets a localized date string.
+ */
+SVX_DLLPUBLIC OUString getLocalizedDate();
+
+/**
+ * Interprets rSVG as a graphic and gives back the resuling UNO wrapper.
+ */
+SVX_DLLPUBLIC css::uno::Reference<css::graphic::XGraphic> importSVG(const OUString& rSVG);
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index bdbdda1f555c..60916bc4c3a1 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -158,6 +158,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
svx/source/dialog/txencbox \
svx/source/dialog/txenctab \
svx/source/dialog/weldeditview \
+ svx/source/dialog/signaturelinehelper \
svx/source/engine3d/float3d \
svx/source/items/algitem \
svx/source/items/autoformathelper \
diff --git a/svx/source/dialog/signaturelinehelper.cxx b/svx/source/dialog/signaturelinehelper.cxx
new file mode 100644
index 000000000000..5e15cc0ba5b0
--- /dev/null
+++ b/svx/source/dialog/signaturelinehelper.cxx
@@ -0,0 +1,114 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <svx/signaturelinehelper.hxx>
+
+#include <com/sun/star/graphic/GraphicProvider.hpp>
+#include <com/sun/star/security/DocumentDigitalSignatures.hpp>
+#include <com/sun/star/security/XCertificate.hpp>
+
+#include <comphelper/processfactory.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <comphelper/xmlsechelper.hxx>
+#include <config_folders.h>
+#include <rtl/bootstrap.hxx>
+#include <sal/log.hxx>
+#include <sfx2/docfile.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/objsh.hxx>
+#include <tools/stream.hxx>
+#include <unotools/localedatawrapper.hxx>
+#include <unotools/streamwrap.hxx>
+#include <unotools/syslocale.hxx>
+#include <vcl/weld.hxx>
+
+using namespace com::sun::star;
+
+namespace svx::SignatureLineHelper
+{
+OUString getSignatureImage(const OUString& rType)
+{
+ OUString aType = rType;
+ if (aType.isEmpty())
+ {
+ aType = "signature-line.svg";
+ }
+ OUString aPath("$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER "/filter/" + aType);
+ rtl::Bootstrap::expandMacros(aPath);
+ SvFileStream aStream(aPath, StreamMode::READ);
+ if (aStream.GetError() != ERRCODE_NONE)
+ {
+ SAL_WARN("cui.dialogs", "failed to open " << aType);
+ }
+
+ OString const svg = read_uInt8s_ToOString(aStream, aStream.remainingSize());
+ return OUString::fromUtf8(svg);
+}
+
+uno::Reference<security::XCertificate> getSignatureCertificate(SfxObjectShell* pShell,
+ weld::Window* pParent)
+{
+ if (!pShell)
+ {
+ return uno::Reference<security::XCertificate>();
+ }
+
+ if (!pParent)
+ {
+ return uno::Reference<security::XCertificate>();
+ }
+
+ uno::Reference<security::XDocumentDigitalSignatures> xSigner(
+ security::DocumentDigitalSignatures::createWithVersion(
+ comphelper::getProcessComponentContext(), "1.2"));
+ xSigner->setParentWindow(pParent->GetXWindow());
+ OUString aDescription;
+ security::CertificateKind certificateKind = security::CertificateKind_NONE;
+ // When signing ooxml, we only want X.509 certificates
+ if (pShell->GetMedium()->GetFilter()->IsAlienFormat())
+ {
+ certificateKind = security::CertificateKind_X509;
+ }
+ uno::Reference<security::XCertificate> xSignCertificate
+ = xSigner->selectSigningCertificateWithType(certificateKind, aDescription);
+ return xSignCertificate;
+}
+
+OUString getSignerName(const css::uno::Reference<css::security::XCertificate>& xCertificate)
+{
+ return comphelper::xmlsec::GetContentPart(xCertificate->getSubjectName(),
+ xCertificate->getCertificateKind());
+}
+
+OUString getLocalizedDate()
+{
+ const SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
+ Date aDateTime(Date::SYSTEM);
+ return rLocaleData.getDate(aDateTime);
+}
+
+uno::Reference<graphic::XGraphic> importSVG(const OUString& rSVG)
+{
+ SvMemoryStream aSvgStream(4096, 4096);
+ aSvgStream.WriteOString(OUStringToOString(rSVG, RTL_TEXTENCODING_UTF8));
+ uno::Reference<io::XInputStream> xInputStream(new utl::OSeekableInputStreamWrapper(aSvgStream));
+ uno::Reference<uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
+ uno::Reference<graphic::XGraphicProvider> xProvider
+ = graphic::GraphicProvider::create(xContext);
+
+ uno::Sequence<beans::PropertyValue> aMediaProperties(1);
+ aMediaProperties[0].Name = "InputStream";
+ aMediaProperties[0].Value <<= xInputStream;
+ uno::Reference<graphic::XGraphic> xGraphic(xProvider->queryGraphic(aMediaProperties));
+ return xGraphic;
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list